CodeGym /Các khóa học /Docker SELF /Cấu hình docker-compose.yml để khởi chạy tất cả các servi...

Cấu hình docker-compose.yml để khởi chạy tất cả các service

Docker SELF
Mức độ , Bài học
Có sẵn

4.1 Khởi tạo

Trong bước này, tụi mình sẽ cấu hình file compose.yaml để khởi chạy tất cả các dịch vụ trong ứng dụng đa container. File compose.yaml sẽ bao gồm cấu hình cho frontend, backend và cơ sở dữ liệu, cũng như định nghĩa network và volume.

Xác định phiên bản Docker Compose

Bắt đầu bằng cách chỉ ra phiên bản của Docker Compose. Trong ví dụ này sử dụng phiên bản 3:

Yaml

version: '3'

4.2 Định nghĩa dịch vụ

Dịch vụ 1: Frontend (ReactJS)

Định nghĩa một dịch vụ cho frontend, được build từ thư mục frontend và sẽ có sẵn tại cổng 3000:

Yaml

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - task-network

Dịch vụ 2: Backend (Flask)

Định nghĩa một dịch vụ cho backend, được build từ thư mục backend. Nó phụ thuộc vào dịch vụ cơ sở dữ liệu và sẽ có sẵn tại cổng 5000:

Yaml

  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - database
    networks:
      - task-network
    environment:
      - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb

Trong đó:

  • depends_on: chỉ ra rằng dịch vụ backend phụ thuộc vào dịch vụ database. Điều này có nghĩa là cơ sở dữ liệu sẽ được khởi động trước khi backend khởi động.
  • environment: cấu hình biến môi trường để kết nối với cơ sở dữ liệu.

Dịch vụ 3: Database (PostgreSQL)

Định nghĩa một dịch vụ cho cơ sở dữ liệu, sử dụng image chính thức postgres:13. Cấu hình các biến môi trường để tạo cơ sở dữ liệu và thông tin tài khoản người dùng:

Yaml

  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=taskdb
      - POSTGRES_USER=taskuser
      - POSTGRES_PASSWORD=taskpassword
    networks:
      - task-network
    volumes:
      - db-data:/var/lib/postgresql/data

Trong đó:

  • environment: cấu hình các biến môi trường để tạo cơ sở dữ liệu và người dùng khi container khởi động.
  • volumes: gắn volume db-data để lưu trữ dữ liệu vĩnh viễn.

4.3 Cấu hình mạng và volumes

Xác định mạng và volumes sẽ được sử dụng bởi các dịch vụ của chúng ta:

Yaml

networks:
  task-network:
    driver: bridge
      
volumes:
  db-data:

Ở đây:

  • networks: định nghĩa mạng task-network với loại driver bridge, cái này sẽ được sử dụng để kết nối giữa các containers.
  • volumes: định nghĩa volume db-data để lưu trữ dữ liệu của cơ sở dữ liệu.

4.4 Tệp đầy đủ docker-compose.yml

Bây giờ chúng ta sẽ kết hợp tất cả các phần vào một tệp docker-compose.yml:

Yaml

version: '3'

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - task-network
        
  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - database
    networks:
      - task-network
    environment:
      - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
        
  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=taskdb
      - POSTGRES_USER=taskuser
      - POSTGRES_PASSWORD=taskpassword
    networks:
      - task-network
    volumes:
      - db-data:/var/lib/postgresql/data
        
networks:
  task-network:
    driver: bridge
        
volumes:
  db-data:

Giải thích cấu hình

  • build: chỉ định đường dẫn tới thư mục chứa Dockerfile để xây dựng image.
  • ports: mở các cổng trên host để truy cập vào các dịch vụ.
  • depends_on: cho biết dịch vụ phụ thuộc vào dịch vụ khác để đảm bảo thứ tự khởi chạy.
  • environment: cấu hình các biến môi trường cho dịch vụ.
  • networks: xác định mạng để các container liên lạc với nhau.
  • volumes: xác định volumes để lưu trữ dữ liệu lâu dài.

4.5 Khởi chạy ứng dụng

Giờ đây, khi file compose.yaml đã được cài đặt, mình có thể khởi chạy tất cả các dịch vụ chỉ với một lệnh duy nhất:

Terminal

docker compose up

Lệnh này sẽ tạo và khởi chạy các container cho frontend, backend và cơ sở dữ liệu, sử dụng các thiết lập đã được định nghĩa trong compose.yaml.

Kiểm tra việc khởi chạy

Sau khi các container được khởi động, hãy đảm bảo tất cả dịch vụ hoạt động bình thường:

  1. Frontend: mở trình duyệt và truy cập địa chỉ http://localhost:3000, để kiểm tra hoạt động của frontend.
  2. Backend: mở trình duyệt và truy cập địa chỉ http://localhost:5000, để kiểm tra hoạt động của backend.
  3. Database: đảm bảo container cơ sở dữ liệu đã được khởi động và có thể truy cập thông qua kết nối mạng với backend.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION