Giới thiệu
Trong bài viết này, chúng ta sẽ cùng nhau thực hiện đóng gói Docker Compose
cho một ứng dụng Java Spring Boot API
, có kết hợp sử dụng cơ sở dữ liệu MYSQL
.
Mục tiêu
- Viết và hiểu về cấu trúc của tệp tin
compose
- Hiểu về các lệnh trong
docker
docker-compose up
docker-compose ps
docker-compose down
- Biết cách thao tác với
compose
trênDocker Desktop
- Hiểu được cách một ứng dụng
Java Spring
được đóng gói và tạo thànhDocker Image
- Hiểu cách
Java Spring Boot
tham chiếu ghi đề tệp tinapplication.properties
khi khởi động - Sử dụng biến môi trường trong
compose file
Chuẩn bị
- Máy tính cài đặt sẵn
Docker
trên hệ điều hànhUbuntu
và có mạng - Tải về
source code
tạigit repo
https://github.com/dothiengiang0001/java-spring-api
- Đọc các nội dung sau trong
source code
:Dockerfile
config/application.properties
Nội dung
Cách 1. Triển khai compose với image tạo trước
1. Viết Docker Compose file
Tại thư mục source code
, tạo tệp tin docker-compose.yaml
(Đã tạo sẵn trong source code
)
version: "3"
services:
# Tên của service
db:
# Khai báo image sử dụng cho service
image: mysql:5.7
volumes:
# Đồng bộ tệp tin setup.sql vào trong thư mục docker-entrypoint-initdb.db để khởi tạo db và dữ liệu
- ./db/script/setup.sql:/docker-entrypoint-initdb.d/setup.sql
# - .\db\script\setup.sql:/docker-entrypoint-initdb.d/setup.sql
# Đồng bộ dữ liệu của MySQL ra bên ngoài docker volume
- api_db:/var/lib/mysql
# Liệt kê danh sách biến môi trường
environment:
MYSQL_ROOT_PASSWORD: root123
java-api:
image: java-api:v3
restart: always
# Khi đè lệnh khi khởi chạy conatiner từ image java-api:v3
command: ["java", "-Dspring.config.location=/configs/application.properties","-jar","spring-boot-api-tutorial.jar"]
volumes:
# Đồng bộ tệp tin cấ hình application.properties vào trong container
- ./config/:/configs/
# Khai báo phụ thuộc, dịch vụ java-api sẽ chạy sau dịch vụ db
depends_on:
- db
# Tạo kết nối cổng từ host vào container, 3080 trên host đối ứng với cổng 8080 trong container
ports:
- 3080:8080
# Khai báo danh sách biến môi trường mà container sử dụng, các biến này sẽ được sử dụng trong tệp tin config/aplication.properties
environment:
DB_HOST: db:3306
DB_USERNAME: root
DB_PASSWORD: root123
# Khai báo danh sách các volumes
volumes:
api_db:
# networks:
# php_network:
2. Triển khai compose
Mở CMD tại đường dẫn thư mục source code
, chạy lệnh sau để đóng gói image với tên image java-api:v3
được khai báo trong docker compose file
:
docker build -t java-api:v3 -f Dockerfile .
Sau khi đóng gói image, thực hiện chạy compose up:
docker-compose -f docker-compose.yaml up -d
-f <compose_file>
: Chỉ định compose file
-d
: Thực hiện chạy ngầm các service
trong compose
3. Kiểm tra kết quả
Thực hiện câu lệnh sau để kiểm tra trạng thái của các container
trong compose
:
docker-compose -f docker-compose.yaml ps
Cuối cùng, mở trình duyệt tại địa chỉ: localhost:3080/users
để lấy về danh sách user
từ ứng dụng.
curl localhost:3080/users
4. Stop triển khai compose
Thực hiện lệnh
docker-compose -f docker-compose.yaml down
Cách 2. Triển khai compose với option build image
1. Tạo compose file
Trong thư mục source code
, tạo tệp tin docker-compose-build.yaml
(đã có sẵn trong source code
) với nội dung sau:
version: "3"
services:
db:
image: mysql:5.7
volumes:
- ./db/script/setup.sql:/docker-entrypoint-initdb.d/setup.sql
# - .\db\script\setup.sql:/docker-entrypoint-initdb.d/setup.sql
- api_db_2:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root123
java-api:
# Image chưa có sẵn, sẽ được tạo ra trong quá trình triển khai compose
image: java-api:v4
restart: always
# Cấu hình thông tin để build image, Dockerfile và context build
build:
dockerfile: Dockerfile
context: .
command: ["java", "-Dspring.config.location=/configs/","-jar","spring-boot-api-tutorial.jar"]
volumes:
- ./config/:/configs/
depends_on:
- db
ports:
- 3090:8080
environment:
DB_HOST: db:3306
DB_USERNAME: root
DB_PASSWORD: root123
volumes:
api_db_2:
2. Thực hiện triển khai compose
docker-compose -f docker-compose-build.yaml up -d --build
Trong đó:
--build
: yêu cầu tạoimage
nếu có yêu cầu từcompose file
Trong quá trình triển khai, docker compose
sẽ đóng gói và tạo ra Image
tên là java-api:v4
như trong yêu cầu từ cấu hình:
...
build:
dockerfile: Dockerfile
context: .
...
3. Kiểm tra kết quả
Kiểm tra image java-api:v4
trong docker
.
Thực hiện câu lệnh sau để kiểm tra trạng thái của các container
trong compose
:
docker-compose -f docker-compose.yaml ps
Cuối cùng, mở trình duyệt tại địa chỉ: localhost:3090/users
để lấy về danh sách user từ ứng dụng.
Tác giả: Đỗ Thiên Giang
Chú ý: Tất cả các bài viết trên TEDU.COM.VN đều thuộc bản quyền TEDU, yêu cầu dẫn nguồn khi trích lại trên website khác.