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.