Cách Dockerize Dự Án Java Với Multi-Stage Build

1. Giới Thiệu

Docker giúp đóng gói ứng dụng Java thành container, đảm bảo chạy ổn định trên mọi môi trường. Multi-Stage Build giúp tối ưu hóa quá trình build, giảm kích thước image và tăng hiệu suất chạy ứng dụng.

Trong bài viết này, chúng ta sẽ:

  • Xây dựng ứng dụng Java với Maven/Gradle.
  • Sử dụng Multi-Stage Build trong Dockerfile để tối ưu kích thước image.
  • Chạy container Java với Docker.
  • Sử dụng Docker Compose để quản lý dịch vụ cùng database.

2. Chuẩn Bị Dự Án Java

Nếu bạn có dự án Java rồi thì dùng dự án của bạn còn nếu bạn chưa có dự án Java, tạo một ứng dụng Spring Boot đơn giản:

spring init --dependencies=web my-java-app
cd my-java-app

Biên dịch ứng dụng:

./mvnw package # Với Maven
# hoặc
./gradlew build # Với Gradle

Ứng dụng sẽ tạo file .jar trong thư mục target/ hoặc build/libs/.

3. Viết Dockerfile Với Multi-Stage Build

Tạo file Dockerfile trong thư mục dự án:

# Stage 1: Build ứng dụng
FROM maven:3.8.5-openjdk-17 AS build
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn clean package -DskipTests

# Stage 2: Deploy ứng dụng
FROM openjdk:17-jdk-alpine
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

Giải thích:

  • Giai đoạn build sử dụng Maven để biên dịch ứng dụng Java.
  • Giai đoạn deploy chỉ chứa file .jar đã build, giúp image nhỏ gọn hơn.

4. Xây Dựng Và Chạy Container

4.1. Build Docker Image

Chạy lệnh sau để tạo image Docker:

docker build -t my-java-app .

4.2. Chạy Container

docker run -d -p 8080:8080 my-java-app

Truy cập ứng dụng tại http://localhost:8080.

5. Sử Dụng Docker Compose

Tạo file docker-compose.yml để chạy cùng database (PostgreSQL):

version: '3.8'
services:
  app:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - db
  db:
    image: postgres:15
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    ports:
      - "5432:5432"
volumes:
  postgres_data:

Chạy tất cả container:

docker-compose up -d

6. Kết Luận

  • Docker giúp triển khai ứng dụng Java dễ dàng.
  • Multi-Stage Build giúp tối ưu kích thước image.
  • Docker Compose quản lý nhiều dịch vụ linh hoạt.
  • Ứng dụng có thể chạy ổn định trên mọi môi trường.
Article Thumbnail
Article Thumbnail
Datadog Webinar: Modernize AWS Logs at Scale
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận