Bài 17. Xây dựng Docker Compose Java Spring Boot Và MySQL
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.
Bài viết liên quan
Hiểu về AI, LLM, RAG và Agentic RAG trong 15 phút
Trong vài năm gần đây, trí tuệ nhân tạo (AI) đã bùng nổ mạnh mẽ và trở thành tâm điểm của cả thế giới công nghệ. Nhưng đi kèm với nó là hàng loạt khái niệm mới như LLM, RAG, hay Agentic RAG khiến nhiều người mới bắt đầu cảm thấy lúng túng.
Đọc thêm
Hướng dẫn tự triển khai N8N trên CentOS bằng Docker Compose và NGINX
N8N là công cụ mã nguồn mở cho phép bạn tự động hóa quy trình làm việc (workflow automation) và tích hợp nhiều dịch vụ khác nhau mà không cần phải lập trình.
Đọc thêm
Hướng dẫn phân tích độ phức tạp thuật toán chi tiết
Độ phức tạp của giải thuật là một cách để đánh giá hiệu quả của một giải thuật dựa trên hai yếu tố chính là độ phức tạp thời gian và độ phức tạp không gian.
Đọc thêm
Bài 6. Các thao tác với XPath và Selector trong Selenium
Bài viết này hướng dẫn bạn làm việc XPath và Css Selector trong Selenium.
Đọc thêm
Bài 5. Các thao tác với Web Browser trong Selenium
Bài viết này hướng dẫn bạn làm việc sâu Web Browser trong Selenium.
Đọc thêm
Bài 4. Thực thi Javascript trong Selenium
Bài viết này hướng dẫn bạn thực thi lệnh Javascript trong Selenium.
Đọc thêm
Bài 3. Làm việc với Element trong Selenium
Bài viết này hướng dẫn bạn làm việc với Element trong Selenium.
Đọc thêm
Bài 2. Các thao tác cơ bản về Selenium
Bài viết này hướng dẫn bạn tạo dự án Selenium C# và thực hiện thao tác cơ bản.
Đọc thêm
Bài 1. Giới thiệu về Selenium
Bài viết giới thiệu sơ lược về chuỗi bài Selenium.
Đọc thêm
Bài 18. Xây dựng Docker Compose .NET Core Và SQL Server
Hướng dẫn xây dựng Docker Compose .NET Core Và SQL Server
Đọc thêm