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
dockerdocker-compose updocker-compose psdocker-compose down
- Biết cách thao tác với
composetrê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 Boottham chiếu ghi đề tệp tinapplication.propertieskhi 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
Dockertrên hệ điều hànhUbuntuvà có mạng - Tải về
source codetạigit repohttps://github.com/dothiengiang0001/java-spring-api - Đọc các nội dung sau trong
source code:Dockerfileconfig/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ạoimagenế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.