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 docker
    • docker-compose up
    • docker-compose ps
    • docker-compose down
  • Biết cách thao tác với compose trên Docker Desktop
  • Hiểu được cách một ứng dụng Java Spring được đóng gói và tạo thành Docker Image
  • Hiểu cách Java Spring Boot tham chiếu ghi đề tệp tin application.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ành Ubuntu và có mạng
  • Tải về source code tại git 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ạo image 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.

Lên trên