Container image build for thinkWhere GeoServer deployments.
This repository now uses a config-driven build flow so version and plugin updates are made in one place.
The image is built from:
- Tomcat base image (configurable)
- GeoServer WAR (configurable version)
- Stable and community GeoServer plugins (configurable lists)
- Optional GDAL native support and GDAL GeoServer extension
- Optional custom fonts from
build/resources/fonts
Main build files:
build/build-config.yml(single source of build values)build/build.sh(Linux/macOS local build)build/build.bat(Windows local build)build/Dockerfile(image recipe)build/download.sh(plugin download helper used by GitHub Actions)
Update only build/build-config.yml for normal version/plugin changes.
Keys:
gs_versiontomcat_imagegdal_versiongdal_nativetomcat_extrasbuild_platformplugins(comma-separated stable plugins)community_plugins(comma-separated community plugins)
ARM64 example values are included as comments in the same file.
- Open PowerShell.
- Go to
buildfolder. - Run
build.bat.
Set-Location "C:\data\DATA_TEAM\geoserver_upgrade\generation_of_images\GeoServer-Docker\build"
.\build.bat- Open shell.
- Go to
buildfolder. - Run
build.sh.
cd build
chmod +x build.sh
./build.shImportant:
- Both scripts build locally only (
docker build), they do not push images. - If plugin ZIP files already exist in
build/resources/plugins, scripts skip re-download.
Windows example with repo-local data directory:
docker rm -f geoserver_local 2>$null
docker run --name geoserver_local -p 8085:8080 -d -v "C:\data\DATA_TEAM\geoserver_upgrade\generation_of_images\GeoServer-Docker\build\resources\data_dir:/opt/geoserver/data_dir" -e "GEOSERVER_LOG_LOCATION=/opt/geoserver/data_dir/logs/geoserver_8085.log" thinkwhere/geoserver:2.28.4Open:
http://localhost:8085/geoserver
docker-compose.deprecated.ymlis legacy reference only and is not part of the current build/deploy flow.
nginx/nginx-for-testing.confis a local/deprecated testing config for a separatenginxcontainer.- It is not packaged into the
thinkwhere/geoserverimage. - The GeoServer image build context is
build/, so files undernginx/are excluded from image builds.
Use this process when preparing a new image release.
- Edit
build/build-config.yml. - Set
gs_versionto the new GeoServer version. - Review
pluginsandcommunity_pluginslists and adjust as needed for that version. - If needed, update
tomcat_image,gdal_version, andgdal_native. - Run local build (
build.baton Windows orbuild.shon Linux). - Run a local container and verify GeoServer starts and required plugins load.
- Commit and push your changes to
master.
Workflow file: .github/workflows/main.yml.
On push to master, GitHub Actions does this:
- Checks out the repository.
- Logs in to Docker Hub using repository secrets:
DOCKERHUB_USERNAMEDOCKERHUB_TOKEN
- Sets up QEMU and Buildx for multi-arch builds.
- Runs
build/download.sh <gs-version>to fetch plugin ZIP files intobuild/resources/plugins. - Builds the image from
build/Dockerfileusing matrix build args (GeoServer version, Tomcat image, GDAL settings). - Pushes the image to Docker Hub under
thinkwhere/geoserver:<tag>.
- Open
.github/workflows/main.yml. - In the matrix entry, update:
taggs-version- (optional)
tomcat-image,gdal-version,gdal-native,tomcat-extras,platform
- Ensure
build/build-config.ymlplugin lists are compatible with that GeoServer version. - Commit and push to
master. - Watch the workflow run in GitHub Actions.
- Confirm the new tag appears on Docker Hub (
thinkwhere/geoserver).
GDAL_NATIVE=trueinstalls/copies GDAL native dependencies and ensures GDAL extension ZIP is available during build.GDAL_NATIVE=falseskips GDAL native setup and skips GDAL extension auto-download.- Local scripts and CI both rely on build args and config-driven values to avoid hardcoded updates in multiple places.