(Docker P.5) Chạy nhiều service với Docker Compose

3 min read

Vấn đề

Docker Run là một cách tuyệt vời để chạy một container, nhưng nếu bạn muốn chạy nhiều container cùng một lúc, bạn sẽ phải chạy nhiều lệnh docker run và quản lý chúng một cách thủ công. Điều này không hiệu quả và dễ gây lỗi.

Docker Compose giúp bạn giải quyết vấn đề này. Nó lưu một tập các container và cấu hình của chúng trong một file docker-compose.yml và cho phép bạn chạy tất cả các container đó bằng một lệnh duy nhất.

Docker Compose

Docker Compose là một công cụ giúp bạn chạy nhiều container cùng một lúc. Bạn chỉ cần tạo một file docker-compose.yml mô tả các container bạn muốn chạy, sau đó chạy lệnh docker-compose up để chạy tất cả các container đó.

Giả sử bạn cần khỏi động 2 services là Node.JS và MySQL, bạn có thể tạo một file docker-compose.yml như sau:

version: '3'

services:
  web:
    image: my-node-app
    ports:
      - "3000:3000"
    networks:
      - my-network
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql

networks:
  my-network:

Sau khi bạn đã tạo file docker-compose.yml, bạn có thể chạy lệnh docker-compose up để chạy tất cả các container đó. Docker Compose sẽ tải các image cần thiết, khởi động các container và kết nối chúng với nhau. Nếu bạn muốn dừng các container, bạn chỉ cần chạy lệnh docker-compose down.

Thành phần

Một file docker-compose.yml thường có versionservices là 2 thành phần chính. Version xác định phiên bản của Docker Compose mà file này sử dụng. Services chứa một danh sách các container bạn muốn chạy. Ngoài ra, bạn cũng có thể sử dụng các thành phần khác như networks, volumes, secrets,…

Cụ thể về các thành phần:

  • version: Xác định phiên bản của Docker Compose mà file này sử dụng. Hiện tại, phiên bản mới nhất là 3.
  • services: Chứa một danh sách các container bạn muốn chạy. Mỗi container được mô tả bởi một block YAML. Mỗi block này có một key là tên của container và một value là một danh sách các cấu hình của container đó.
  • networks: Chứa một danh sách các network mà các container sử dụng.
  • volumes: Chứa một danh sách các volume mà các container sử dụng.
  • environment: Chứa một danh sách các biến môi trường mà container sử dụng.
  • depends_on: Chứa một danh sách các container mà container hiện tại phụ thuộc vào. Docker Compose sẽ khởi động các container phụ thuộc trước khi khởi động container hiện tại.
  • ports: Chứa một danh sách các cổng mà container expose ra ngoài.
  • image: Chứa tên của image mà container sử dụng.

Bên cạnh các thành phần trên, Docker Compose còn hỗ trợ nhiều thành phần khác như secrets, configs, deploy,… Bạn có thể tìm hiểu thêm về các thành phần này trong tài liệu chính thức của Docker Compose.

Lưu ý

  • Docker Compose không phải là một công cụ quản lý container trong môi trường sản phẩm. Nó chỉ giúp bạn chạy nhiều container cùng một lúc trong môi trường phát triển.
  • Để dễ dàng quản lý các container, bạn nên đặt tên đặt tên cho chúng. Điều này giúp bạn xác định rõ ràng các container và dễ dàng thao tác với chúng.
  • Bạn cũng nên sử dụng các biến môi trường để cấu hình các container. Điều này giúp bạn dễ dàng cấu hình các container mà không cần sửa trực tiếp vào file docker-compose.yml.
  • Sử dụng mạng riêng để các container có thể giao tiếp với nhau một cách dễ dàng.

Kết luận

Trên đây là bài viết giới thiệu về Docker Compose. Tôi hi vọng bạn đã hiểu được cách sử dụng Docker Compose để chạy nhiều container cùng một lúc. Nếu bạn có bất kỳ câu hỏi hoặc góp ý nào, hãy để lại comment bên dưới. Cảm ơn bạn đã đọc bài viết này.

Tài liệu tham khảo

Avatar photo

Clean Code: Nguyên tắc viết hàm trong lập trình…

Trong quá trình phát triển phần mềm, việc viết mã nguồn dễ đọc, dễ hiểu là yếu tố then chốt để đảm bảo code...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc comment trong lập trình

Trong lập trình, code không chỉ là một tập hợp các câu lệnh để máy tính thực thi, mà còn là một hình thức...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc xử lý lỗi (Error Handling)

Trong quá trình phát triển phần mềm, việc xử lý lỗi không chỉ là một phần quan trọng mà còn ảnh hưởng trực tiếp...
Avatar photo Dat Tran Thanh
4 min read

Leave a Reply

Your email address will not be published. Required fields are marked *