Docker Hub Deployment Guide
This guide explains how to build and deploy new versions of bpmn-to-code-web to Docker Hub.
Prerequisites
1. Docker Hub Account
- Repository:
emaarco/bpmn-to-code-web - Access: Maintainer or Owner permissions required
2. Docker Installation
Verify Docker is installed:
docker --version3. Docker Hub Authentication
Log in to Docker Hub:
docker login4. Repository Access
Ensure you're working in the project root:
cd /path/to/bpmn-to-codeDeployment Steps
Step 1: Update Version
Edit bpmn-to-code-web/build.gradle.kts:
version = "2.0.1" // Increment versionFollow semantic versioning:
- Major (X.0.0): Breaking changes
- Minor (0.X.0): New features, backward-compatible
- Patch (0.0.X): Bug fixes, backward-compatible
Step 2: Build the Docker Image
Run the Gradle Docker build task:
./gradlew :bpmn-to-code-web:dockerBuildThis task:
- Builds the fat JAR:
./gradlew :bpmn-to-code-web:buildFatJar - Runs
docker buildusingbpmn-to-code-web/Dockerfile - Tags image as:
emaarco/bpmn-to-code-web:VERSION(e.g.,2.0.1)emaarco/bpmn-to-code-web:latest
Platform Architecture: The build is configured to create AMD64/x86_64 images using --platform linux/amd64. This ensures compatibility with most cloud Kubernetes clusters (AWS, GCP, Azure, etc.), even when building locally on Apple Silicon Macs.
Image Details:
- Base image:
gcr.io/distroless/java21-debian12:nonroot(Google Distroless) - Image size: ~300MB (base: ~195MB, JAR: ~105MB)
- Security: Minimal attack surface (no shell, package managers, or unnecessary tools)
- User: Runs as non-root user by default
Health Checks: The distroless image doesn't support shell-based health checks. Configure health checks at the orchestrator level:
- Kubernetes: Use
livenessProbeandreadinessProbewith HTTP GET to/ - Docker Compose: Use
test: ["CMD", "curl", "-f", "http://localhost:8080/"](requires curl in image)
Verify the image was created:
docker images | grep bpmn-to-code-webExpected output:
emaarco/bpmn-to-code-web 2.0.1 abc123def456 ...
emaarco/bpmn-to-code-web latest abc123def456 ...Step 3: Test the Image Locally
Run the container:
./gradlew :bpmn-to-code-web:dockerRunOr manually:
docker run -p 8080:8080 --rm emaarco/bpmn-to-code-web:latestVerify functionality:
- Open browser:
http://localhost:8080 - Upload a BPMN file
- Generate code and verify output
- Stop container:
Ctrl+C
Step 4: Tag Git Release
IMPORTANT: Always create a Git tag before pushing to Docker Hub. Release versions must be tagged.
Create Git tag for the version:
git tag -a v2.0.1 -m "Release version 2.0.1"
git push origin v2.0.1Create a GitHub release:
- Go to: https://github.com/emaarco/bpmn-to-code/releases
- Click "Draft a new release"
- Select tag
v2.0.1 - Add release notes
- Publish release
Step 5: Push to Docker Hub
Push the image:
./gradlew :bpmn-to-code-web:dockerPushThis pushes both tags:
emaarco/bpmn-to-code-web:VERSIONemaarco/bpmn-to-code-web:latest
Manual push (alternative):
docker push emaarco/bpmn-to-code-web:2.0.1
docker push emaarco/bpmn-to-code-web:latestStep 6: Verify Deployment
Check Docker Hub:
- Visit: https://hub.docker.com/r/emaarco/bpmn-to-code-web/tags
- Confirm new version appears in tag list
- Verify
latesttag updated
Pull and test from Docker Hub:
docker pull emaarco/bpmn-to-code-web:2.0.1
docker run -p 8080:8080 emaarco/bpmn-to-code-web:2.0.1Gradle Tasks Reference
Build Tasks
# Build fat JAR only
./gradlew :bpmn-to-code-web:buildFatJar
# Build Docker image (includes buildFatJar)
./gradlew :bpmn-to-code-web:dockerBuild
# Build and push to Docker Hub
./gradlew :bpmn-to-code-web:dockerPush
# Run container locally
./gradlew :bpmn-to-code-web:dockerRunTask Configuration
Defined in bpmn-to-code-web/build.gradle.kts:
val dockerImageName = "emaarco/bpmn-to-code-web"
val dockerImageTag = project.version.toString()Docker Commands Reference
Image Management
# List images
docker images | grep bpmn-to-code-web
# Remove local image
docker rmi emaarco/bpmn-to-code-web:VERSION
# Remove all versions
docker rmi $(docker images emaarco/bpmn-to-code-web -q)
# Inspect image
docker inspect emaarco/bpmn-to-code-web:latestContainer Management
# Run container (foreground)
docker run -p 8080:8080 --rm emaarco/bpmn-to-code-web:latest
# Run container (background)
docker run -d -p 8080:8080 --name bpmn-web emaarco/bpmn-to-code-web:latest
# Stop container
docker stop bpmn-web
# View logs
docker logs bpmn-web
# Remove container
docker rm bpmn-web