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ó version
và services
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.