Java Microservice Dockerfile
Source: docker/java-microservice/Dockerfile
Dockerfile
FROM maven:3.8.8-eclipse-temurin-17 AS builder
WORKDIR /workspace
COPY pom.xml mvnw ./
COPY .mvn .mvn
RUN mvn -B -DskipTests dependency:go-offline
COPY src ./src
RUN mvn -B -DskipTests package
FROM eclipse-temurin:17-jdk-jammy
WORKDIR /app
COPY --from=builder /workspace/target/*.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app/app.jar"]
What It Does
- Resolves dependencies and builds a JAR with Maven.
- Copies the built JAR into a Java 17 runtime image.
- Starts the app on port
8080.
Required Files In Build Context
pom.xmlmvnw.mvn/src/
Docker Compose Example
version: '3.8'
services:
app:
build:
context: .
dockerfile: docker/java-microservice/Dockerfile
container_name: java-microservice
env_file:
- .env
environment:
- SPRING_PROFILES_ACTIVE=prod
ports:
- "8080:8080"
depends_on:
- db
restart: unless-stopped
db:
image: postgres:15-alpine
container_name: java-db
environment:
- POSTGRES_DB=appdb
- POSTGRES_USER=app
- POSTGRES_PASSWORD=password
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
volumes:
postgres_data:
Other Files You Need
.envwith application and datasource valuessrc/main/resources/application.propertiesorapplication.yml- Database migration setup (Flyway/Liquibase) if used
Build (Docker)
docker build -t java-microservice -f docker/java-microservice/Dockerfile .
Run (Docker)
docker run --rm -p 8080:8080 java-microservice
Run (Docker Compose)
docker compose up --build -d