Skillversitas

Docker Java

How to run a Java application in Docker.

Java Dockerfile

# Stage 1: Build
FROM maven:3.9-eclipse-temurin-17 AS builder
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package -DskipTests

# Stage 2: Production
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
COPY --from=builder /app/target/*.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]

docker-compose.yml

version: '3.8'

services:
  api:
    build: .
    ports:
      - "8080:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://database:5432/myapp
      - SPRING_DATASOURCE_USERNAME=user
      - SPRING_DATASOURCE_PASSWORD=pass
    networks:
      - app-net

  database:
    image: postgres:15
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    volumes:
      - postgres-data:/var/lib/postgresql/data
    networks:
      - app-net

networks:
  app-net:

volumes:
  postgres-data:

Use Case: Java Spring Boot

# Run Java
docker-compose up -d

# Build
docker-compose build

# Test
docker-compose exec api mvn test

Everyday Use Case

Case: A developer needs to run Java.

# Build
docker-compose build

# Run
docker-compose up -d

# Java commands
docker-compose exec api mvn test
docker-compose exec api mvn spring-boot:run

Best Practices

  1. Multi-stage build: For a smaller image
  2. JRE image: Not the JDK for production
  3. Non-root user: For security
  4. Health check: For monitoring

Conclusion

Java in Docker is easy to set up. Use a multi-stage build to produce a smaller image.