forked from xdocker/xgeoserver

Tim Sutton
2016-03-16 a5daf6173b081ccea7501033cedbcedff02b5c75
Merge pull request #4 from shane-axiom/master

Use WAR/Tomcat, support plugins, document setting memory
3 files deleted
4 files modified
2 files added
213 ■■■■ changed files
.gitignore 8 ●●●● patch | view | raw | blame | history
Dockerfile 103 ●●●● patch | view | raw | blame | history
README.md 61 ●●●●● patch | view | raw | blame | history
build.sh 4 ●●●● patch | view | raw | blame | history
resources/overlays/README.txt 14 ●●●●● patch | view | raw | blame | history
resources/plugins/README.txt 2 ●●●●● patch | view | raw | blame | history
setup.sh patch | view | raw | blame | history
sshd.conf 5 ●●●●● patch | view | raw | blame | history
start.sh 16 ●●●●● patch | view | raw | blame | history
.gitignore
@@ -1,2 +1,8 @@
resources/geoserver.zip
resources/*
!resources/plugins/
resources/plugins/*
!resources/plugins/README.txt
!resources/overlays/
resources/overlays/*
!resources/overlays/README.txt
.idea
Dockerfile
@@ -16,19 +16,98 @@
#-------------Application Specific Stuff ----------------------------------------------------
RUN apt-get -y install unzip openjdk-7-jre-headless openjdk-7-jre
ENV GS_VERSION 2.6.1
ENV GEOSERVER_DATA_DIR /opt/geoserver/data_dir
# Unset Java related ENVs since they may change with Oracle JDK
ENV JAVA_VERSION=
ENV JAVA_DEBIAN_VERSION=
# Set JAVA_HOME to /usr/lib/jvm/default-java and link it to OpenJDK installation
RUN ln -s /usr/lib/jvm/java-7-openjdk-amd64 /usr/lib/jvm/default-java
ENV JAVA_HOME /usr/lib/jvm/default-java
ADD resources /tmp/resources
# A little logic that will fetch the geoserver zip file if it
# is not available locally in the resources dir and
RUN if [ ! -f /tmp/resources/geoserver.zip ]; then \
    wget -c http://downloads.sourceforge.net/project/geoserver/GeoServer/2.6.1/geoserver-2.6.1-bin.zip -O /tmp/resources/geoserver.zip; \
    fi; \
    unzip /tmp/resources/geoserver.zip -d /opt && mv -v /opt/geoserver* /opt/geoserver
ENV GEOSERVER_HOME /opt/geoserver
ENV JAVA_HOME /usr/
# If a matching Oracle JDK tar.gz exists in /tmp/resources, move it to /var/cache/oracle-jdk7-installer
# where oracle-java7-installer will detect it
RUN if ls /tmp/resources/*jdk-*-linux-x64.tar.gz > /dev/null 2>&1; then \
      mkdir /var/cache/oracle-jdk7-installer && \
      mv /tmp/resources/*jdk-*-linux-x64.tar.gz /var/cache/oracle-jdk7-installer/; \
    fi;
#ENTRYPOINT "/opt/geoserver/bin/startup.sh"
CMD "/opt/geoserver/bin/startup.sh"
EXPOSE 8080
# Install Oracle JDK (and uninstall OpenJDK JRE) if the build-arg ORACLE_JDK = true or an Oracle tar.gz
# was found in /tmp/resources
ARG ORACLE_JDK=false
RUN if ls /var/cache/oracle-jdk7-installer/*jdk-*-linux-x64.tar.gz > /dev/null 2>&1 || [ "$ORACLE_JDK" = true ]; then \
       apt-get autoremove --purge -y openjdk-7-jre-headless && \
       echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true \
         | debconf-set-selections && \
       echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" \
         > /etc/apt/sources.list.d/webupd8team-java.list && \
       apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886 && \
       apt-get update && \
       apt-get install -y oracle-java7-installer oracle-java7-set-default && \
       ln -s --force /usr/lib/jvm/java-7-oracle /usr/lib/jvm/default-java && \
       rm -rf /var/lib/apt/lists/* && \
       rm -rf /var/cache/oracle-jdk7-installer; \
       if [ -f /tmp/resources/jce_policy.zip ]; then \
         unzip -j /tmp/resources/jce_policy.zip -d /tmp/jce_policy && \
         mv /tmp/jce_policy/*.jar $JAVA_HOME/jre/lib/security/; \
       fi; \
    fi;
#Add JAI and ImageIO for great speedy speed.
WORKDIR /tmp
RUN wget http://download.java.net/media/jai/builds/release/1_1_3/jai-1_1_3-lib-linux-amd64.tar.gz && \
    wget http://download.java.net/media/jai-imageio/builds/release/1.1/jai_imageio-1_1-lib-linux-amd64.tar.gz && \
    gunzip -c jai-1_1_3-lib-linux-amd64.tar.gz | tar xf - && \
    gunzip -c jai_imageio-1_1-lib-linux-amd64.tar.gz | tar xf - && \
    mv /tmp/jai-1_1_3/lib/*.jar $JAVA_HOME/jre/lib/ext/ && \
    mv /tmp/jai-1_1_3/lib/*.so $JAVA_HOME/jre/lib/amd64/ && \
    mv /tmp/jai_imageio-1_1/lib/*.jar $JAVA_HOME/jre/lib/ext/ && \
    mv /tmp/jai_imageio-1_1/lib/*.so $JAVA_HOME/jre/lib/amd64/ && \
    rm /tmp/jai-1_1_3-lib-linux-amd64.tar.gz && \
    rm -r /tmp/jai-1_1_3 && \
    rm /tmp/jai_imageio-1_1-lib-linux-amd64.tar.gz && \
    rm -r /tmp/jai_imageio-1_1
WORKDIR $CATALINA_HOME
# A little logic that will fetch the geoserver war zip file if it
# is not available locally in the resources dir
RUN if [ ! -f /tmp/resources/geoserver.zip ]; then \
    wget -c http://downloads.sourceforge.net/project/geoserver/GeoServer/${GS_VERSION}/geoserver-${GS_VERSION}-war.zip \
      -O /tmp/resources/geoserver.zip; \
    fi; \
    unzip /tmp/resources/geoserver.zip -d /tmp/geoserver \
    && unzip /tmp/geoserver/geoserver.war -d $CATALINA_HOME/webapps/geoserver \
    && rm -rf $CATALINA_HOME/webapps/geoserver/data \
    && rm -rf /tmp/geoserver
# Install any plugin zip files in resources/plugins
RUN if ls /tmp/resources/plugins/*.zip > /dev/null 2>&1; then \
      for p in /tmp/resources/plugins/*.zip; do \
        unzip $p -d /tmp/gs_plugin \
        && mv /tmp/gs_plugin/*.jar $CATALINA_HOME/webapps/geoserver/WEB-INF/lib/ \
        && rm -rf /tmp/gs_plugin; \
      done; \
    fi
# Overlay files and directories in resources/overlays if they exist
RUN rm /tmp/resources/overlays/README.txt && \
    if ls /tmp/resources/overlays/* > /dev/null 2>&1; then \
      cp -rf /tmp/resources/overlays/* /; \
    fi;
# Optionally remove Tomcat manager, docs, and examples
ARG TOMCAT_EXTRAS=true
RUN if [ "$TOMCAT_EXTRAS" = false ]; then \
    rm -rf $CATALINA_HOME/webapps/ROOT && \
    rm -rf $CATALINA_HOME/webapps/docs && \
    rm -rf $CATALINA_HOME/webapps/examples && \
    rm -rf $CATALINA_HOME/webapps/host-manager && \
    rm -rf $CATALINA_HOME/webapps/manager; \
  fi;
# Delete resources after installation
RUN rm -rf /tmp/resources
README.md
@@ -40,6 +40,49 @@
docker build -t kartoza/postgis .
```
### Building with Oracle JDK
To replace OpenJDK Java with the Oracle JDK, set build-arg `ORACLE_JDK=true`:
```shell
docker build --build-arg ORACLE_JDK=true -t kartoza/postgis .
```
Alternatively, you can download the Oracle JDK 7 Linux x64 tar.gz currently in use by
[webupd8team's Oracle JDK installer](https://launchpad.net/~webupd8team/+archive/ubuntu/java/+packages)
(usually the latest version available from Oracle) and place it in `resources` before building.
To enable strong cryptography when using the Oracle JDK (recommended), download the
[Oracle Java policy jar zip](http://docs.geoserver.org/latest/en/user/production/java.html#oracle-java)
for the correct JDK version and place it at `resources/jce_policy.zip` before building.
### Building with plugins
To build a GeoServer image with plugins (e.g. SQL Server plugin, Excel output plugin),
download the plugin zip files from the GeoServer download page and put them in
`resources/plugins` before building. You should also download the matching version
GeoServer WAR zip file to `resources/geoserver.zip`.
### Removing Tomcat extras during build
To remove Tomcat extras including docs, examples, and the manager webapp, set the
`TOMCAT_EXTRAS` build-arg to `false`:
```shell
docker build --build-arg TOMCAT_EXTRAS=false -t kartoza/postgis .
```
### Building with file system overlays (advanced)
The contents of `resources/overlays` will be copied to the image file system
during the build. For example, to include a static Tomcat `setenv.sh`,
create the file at `resources/overlays/usr/local/tomcat/bin/setenv.sh`.
You can use this functionality to write a static GeoServer directory to
`/opt/geoserver/data_dir`, include additional jar files, and more.
Overlay files will overwrite existing destination files, so be careful!
## Run
You probably want to also have postgis running too. To create a running 
@@ -76,12 +119,26 @@
docker run -d -v $HOME/geoserver_data:/opt/geoserver/data_dir kartoza/geserver
```
You need to ensure the ``geoserver_data`` directory has sufficinet permissions
You need to ensure the ``geoserver_data`` directory has sufficient permissions
for the docker process to read / write it.
## Setting Tomcat properties
To set Tomcat properties such as maximum heap memory size, create a `setenv.sh` file such as:
```shell
JAVA_OPTS="$JAVA_OPTS -Xmx1536M -XX:MaxPermSize=756M"
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled"
```
Then pass the `setenv.sh` file as a volume at `/usr/local/tomcat/bin/setenv.sh` when running:
```shell
docker run -d -v $HOME/setenv.sh:/usr/local/tomcat/bin/setenv.sh kartoza/geserver
```
## Credits
Tim Sutton (tim@kartoza.com)
May 2014
Shane St Clair (shane@axiomdatascience.com)
Alex Leith (alexgleith@gmail.com)
build.sh
@@ -1,7 +1,3 @@
#!/bin/sh
if [ ! -f resources/geoserver.zip ]
then
    wget -c http://downloads.sourceforge.net/project/geoserver/GeoServer/2.5.2/geoserver-2.5.2-bin.zip -O resources/geoserver.zip
fi
docker build -t kartoza/geoserver .
resources/overlays/README.txt
New file
@@ -0,0 +1,14 @@
To include files in the container file system at arbitrary locations, build
a directory structure from / here and include the files at the desired location.
For example, to include a static Tomcat setenv.sh in the build, place it at:
resources/overlays/usr/local/tomcat/bin/setenv.sh
Other overlay examples include static GeoServer data directories, the Marlin renderer, etc.
Note that overlay files will overwrite existing destination files, and that
files in the overlay root will be copied to the container root
(e.g. resources/overlay/somefile.txt will be copied to /somefile.txt).
Be careful!
resources/plugins/README.txt
New file
@@ -0,0 +1,2 @@
Download plugin zips and place them here when building to include them in
the container's GeoServer deployment.
setup.sh
sshd.conf
File was deleted
start.sh
File was deleted