Bài viết này sẽ giới thiệu 3 kỹ thuật dùng Maven để đóng gói ứng dụng SpringBoot thành image Docker.
(1)Sử dụng chức năng tích hợp sẵn của spring-boot-maven-plugin build-image.
(2)Sử dụng sản phẩm của Google là jib-maven-plugin。
(3)Sử dụng dockerfle-maven-plugin。
Ứng dụng Spring Boot
Để tiện thực hành, cần có một dự án Spring Boot.
Địa chỉ dự án Demo:
https://github.com/davelms/me...
Môi trường dự án:
Java 11
Maven 3.6.3
Sử dụng mvn package có thể dựng gói jar bình thường.
cũng có thể chạy bình thường:
java -jar target/demo-application-0.0.1-SNAPSHOT.jar
Trang thử nghiệm:
http://localhost:8080/hello

Dự án Demo đã ổn, tiếp theo sẽ bắt đầu thực hành 3 phương pháp dựng image.
Một、build-image của plugin Maven cho Spring Boot
Spring Boot cài sẵn plugin riêng để dựng image Docker, chúng ta không cần thay đổi gì, vì nó đã nằm trong spring-boot-starter-parent ở pom.xml.
Bạn không cần viết Dockerfile, cũng không cần lo những việc khác, plugin đã làm hết giúp bạn, chẳng hạn các vấn đề về bảo mật, bộ nhớ, hiệu năng mà Spring khuyến nghị.
Chỉ cần thực thi đơn giản:
mvn spring-boot:build-image
Sau khi thực thi xong, bạn sẽ thấy thông báo thành công:

Chạy container để kiểm thử:
docker run -p 9090:8080 -t demo-application:0.0.1-SNAPSHOT
Lưu ý:cổng trên máy cục bộ được ánh xạ ở đây là 9090。

Hai、jib-maven-plugin
Jib là một plugin cho Maven và Gradle, dùng để tạo image Docker.
Plugin này có một đặc điểm rất rõ rệt:Không cần cài Docker trên máy cục bộ,điều này rất thuận tiện cho tích hợp liên tục, Jib có thể đẩy trực tiếp lên kho Docker được chỉ định.
Jib cũng không cần viết Dockerfile.
Sử dụng cũng rất tiện, không cần sửa mã, cũng có thể không cần thay đổi pom.xml.
Chỉ cần thực thi:
mvn compile com.google.cloud.tools:jib-maven-plugin:2.3.0:dockerBuild
mvn compile
là lệnh biên dịch maven rất quen thuộc với chúng ta。
com.google.cloud.tools:jib-maven-plugin:2.3.0
Chỉ định sử dụng plugin Jib
dockerBuild
là mục tiêu thực thi của plugin Jib,dockerBuild chỉ định Jib sử dụng Docker đã cài đặt trên máy cục bộ của chúng ta.
Sau khi thực thi xong, bạn sẽ thấy thông báo thành công:

Khởi động container để kiểm thử:
docker run -p 9091:8080 -t demo-application:0.0.1-SNAPSHOT
Lưu ý:cổng trên máy cục bộ được ánh xạ ở đây là 9091。

Ba、dockerfile-maven-plugin
Plugin này yêu cầu chúng ta viết Dockerfile, dự án Domo đã chuẩn bị sẵn rồi.
Dockerfile cần được đặt trong thư mục gốc của dự án, cùng chỗ với pom.xml.

Tiếp theo, cần thêm một số cấu hình trong pom.xml để chỉ định kho lưu trữ, nhãn tag, cùng với phần đã được định nghĩa trong Dockerfile ở trên JAR_FILE。

Thực thi mvn package thì sẽ tự động dựng ảnh, sau khi thực thi xong sẽ thấy thông báo:

Chạy container:
docker run -p 9092:8080 -t demo-application:0.0.1-SNAPSHOT
Lưu ý: cổng trên máy cục bộ được ánh xạ là 9092。

Tóm lược

Trong 3 cách này, thuận tiện nhất là cách có sẵn của SpringBoot, bạn không cần tự làm gì cả, có thể dùng ngay.
Đặc biệt nhất là Jib, không yêu cầu cài Docker trên máy cục bộ, có thể đẩy trực tiếp lên kho chỉ định, hơn nữa cách sử dụng cũng rất đơn giản.
Có vẻ phiền phức nhất là plugin dockerfile-maven-plugin này, vừa phải viết Dockerfile, vừa phải thêm cấu hình,Nhưng,thực ra đây là công cụ dễ dùng nhất, vì 2 công cụ trước có liên quan đến môi trường mạng (bạn hiểu mà), ngay cả khi đã cấu hình image Docker, vẫn sẽ báo lỗi, bạn có thể thử xem.
