Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Chạy ứng dụng Java trong Docker Container – Hướng dẫn chi tiết

Docker cung cấp môi trường đóng gói, nhất quán để chạy ứng dụng Java mà không cần cài đặt JDK/JRE trực tiếp trên máy host. Bài viết hướng dẫn 2 cách: dùng image Java chính thức (khuyên dùng) và tự build image custom.

Cách 1: Dùng image Java chính thức (Đơn giản, khuyên dùng)

Bước 1: Chuẩn bị project

mkdir my-java-app
cd my-java-app

Bước 2: Tạo file Java

File Main.java:

public class Main {
    public static void main(String[] args) {
        System.out.println("Welcome to TutorialsPoint from Docker!");
    }
}

Bước 3: Tạo Dockerfile

File Dockerfile (không có extension):

# Sử dụng image Java 21 chính thức (LTS, nhẹ - slim)
FROM eclipse-temurin:21-jdk-alpine AS build
WORKDIR /app

# Copy source
COPY Main.java .

# Compile
RUN javac Main.java

# Runtime stage (nhẹ hơn - chỉ JRE)
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app

# Copy compiled class từ build stage
COPY --from=build /app/Main.class .

# Chạy ứng dụng
CMD ["java", "Main"]

Giải thích: Sử dụng multi-stage build – stage đầu compile (cần JDK), stage sau chạy (chỉ cần JRE) → image nhẹ hơn nhiều (~50MB vs ~300MB).

Bước 4: Build image

docker build -t my-java-app .

Bước 5: Chạy container

docker run --rm my-java-app
# Output: Welcome to TutorialsPoint from Docker!

Cách 2: Build image custom với Maven/Gradle (Dự án thực tế)

Với project Maven/Gradle, dùng build tool bên trong container:

# Dockerfile for Maven project
FROM maven:3.9-eclipse-temurin-21 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests

FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

Các lệnh Docker hữu ích

LệnhMô tả
docker imagesLiệt kê images local
docker ps -aXem tất cả containers
docker logs <container_id>Xem log container
docker exec -it <id> shVào shell container đang chạy
docker rmi <image>Xóa image

Best Practices cho Java trong Docker

  • Dùng base image Alpine (eclipse-temurin:xx-jre-alpine) – nhẹ, bảo mật.
  • Multi-stage build – tách compile và runtime.
  • Non-root user: RUN addgroup -S app && adduser -S app -G app && USER app.
  • JVM tuning cho container: JAVA_OPTS="-XX:MaxRAMPercentage=75.0 -XX:+UseContainerSupport".
  • .dockerignore: Loại trừ target/, .git/, *.log, .idea/ khỏi build context.
  • Health check: HEALTHCHECK CMD curl -f https://localhost:8080/actuator/health || exit 1.

Kết luận

Docker giúp tiêu chuẩn hóa môi trường Java từ dev → test → prod. Image eclipse-temurin (thay thế OpenJDK официальный) là lựa chọn hiện đại, bảo mật, được cập nhật thường xuyên. Multi-stage build là chuẩn mực cho production.