Việc đóng gói các ứng dụng Java Microservice thành Docker image giúp đơn giản hóa quá trình triển khai và đảm bảo tính nhất quán giữa các môi trường. Dưới đây là hướng dẫn chi tiết cách tạo Dockerfile và vận hành một tệp JAR trong môi trường container.
1. Chuẩn bị thư mục dự án
Trước tiên, hãy tạo một không gian làm việc để chứa tệp Dockerfile và tệp tin thực thi (.jar) của ứng dụng.
# Tạo thư mục gốc cho dự án
mkdir -p /opt/microservice-app
cd /opt/microservice-app
# Chuẩn bị tệp tin JAR (giả sử bạn đã có tệp app-service.jar)
# Nếu chưa có, bạn có thể copy từ thư mục build của project
cp /path/to/your/target/app-service.jar ./app-service.jar
2. Khởi tạo Dockerfile
Tạo một tệp tin có tên Dockerfile trong thư mục vừa tạo. Nội dung Dockerfile sẽ định nghĩa môi trường chạy và cách thức khởi động ứng dụng.
# Sử dụng OpenJDK bản rút gọn trên Alpine Linux để giảm dung lượng image
FROM openjdk:8-jre-alpine
# Thông tin mô tả
LABEL maintainer="system-admin@example.com"
LABEL version="1.0"
# Thiết lập biến môi trường cho JVM và múi giờ
ENV JVM_OPTS="-Dfile.encoding=UTF-8 -Duser.timezone=Asia/Ho_Chi_Minh"
ENV APP_NAME="app-service.jar"
# Cập nhật mirror và cài đặt gói múi giờ để đồng bộ thời gian hệ thống
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk add --no-cache tzdata && \
cp /usr/share/zoneinfo/Asia/Ho_Chi_Minh /etc/localtime && \
echo "Asia/Ho_Chi_Minh" > /etc/timezone
# Sao chép tệp JAR từ máy vật lý vào thư mục gốc của container
COPY ${APP_NAME} /${APP_NAME}
# Khai báo cổng mà ứng dụng sẽ lắng nghe
EXPOSE 8080
# Lệnh khởi chạy ứng dụng khi container bắt đầu
ENTRYPOINT ["sh", "-c", "java $JVM_OPTS -jar /$APP_NAME"]
3. Xây dựng Docker Image
Sử dụng lệnh docker build để đóng gói toàn bộ cấu hình và mã nguồn thành một image hoàn chỉnh.
# Build image với tên là 'java-service' và tag là 'v1.0'
docker build -t java-service:v1.0 .
# Kiểm tra danh sách image sau khi build thành công
docker images
Sau khi lệnh hoàn tất, bạn sẽ thấy image java-service xuất hiện trong danh sách kết quả với dung lượng đã được tối ưu hóa nhờ sử dụng Alpine Linux.
4. Triển khai Container từ Image
Sử dụng lệnh docker run để tạo và khởi chạy một container từ image vừa xây dựng.
# Chạy container ở chế độ nền, map cổng 8080 của máy chủ vào 8080 của container
docker run -d \
--name micro-app-instance \
-p 8080:8080 \
--restart always \
java-service:v1.0
5. Kiểm tra trạng thái và Log ứng dụng
Để đảm bảo ứng dụng microservice hoạt động bình thường, bạn cần kiểm tra trạng thái tiến trình và log khởi động của Java.
# Kiểm tra các container đang chạy
docker ps
# Xem log trực tiếp từ ứng dụng bên trong container
docker logs -f micro-app-instance
Nếu ứng dụng hiển thị các thông tin khởi chạy Spring Boot hoặc Java tiêu chuẩn và không có lỗi Runtime, quá trình triển khai đã thành công. Bạn có thể truy cập ứng dụng qua địa chỉ IP của máy chủ tại cổng 8080.