Docker Compose¶
Compose mô tả một hệ nhiều container (service, mạng, volume) trong một file YAML và điều khiển cả hệ bằng vài lệnh. Hữu ích khi môi trường phát triển cần nhiều dịch vụ chạy cùng nhau. Khái niệm Docker cơ bản xem Docker.
Cú pháp lệnh¶
Bản hiện tại là plugin của Docker CLI, gọi bằng docker compose (có dấu cách). Lệnh docker-compose (gạch nối) là bản cũ.
File mẫu¶
# compose.yaml
services:
build-env:
image: ubuntu-petalinux-20212:20.04
user: "${UID}:${GID}"
working_dir: /work
volumes:
- ./:/work
- sstate:/cache/sstate
command: sleep infinity # giữ container sống để docker compose exec vào
images:
image: nginx:alpine # phục vụ thư mục image qua HTTP
ports:
- "8080:80"
volumes:
- ./images:/usr/share/nginx/html:ro
volumes:
sstate:
Các khóa hay dùng:
| Khóa | Ý nghĩa |
|---|---|
image / build |
Dùng image có sẵn hoặc build từ Dockerfile |
ports |
Map cổng host:container |
volumes |
Bind mount hoặc named volume |
environment / env_file |
Biến môi trường |
depends_on |
Thứ tự khởi động, có thể chờ healthcheck |
networks |
Mạng riêng giữa các service (mặc định các service cùng mạng và gọi nhau bằng tên service) |
profiles |
Chỉ chạy service khi bật profile tương ứng |
Biến ${UID} và ${GID} không tự có trong mọi shell, cần export UID GID hoặc đặt trong file .env.
Lệnh thường dùng¶
docker compose up -d # tạo và chạy ở chế độ nền
docker compose ps # trạng thái các service
docker compose logs -f images # xem log
docker compose exec build-env bash
docker compose down # dừng và xóa container, mạng (giữ volume)
docker compose down -v # xóa cả volume
Khi nào dùng¶
- Dựng môi trường phát triển nhiều thành phần (build container, server phục vụ image/firmware cho board, database cho công cụ).
- Cho CI, dựng nhanh các dịch vụ phụ thuộc.
- Chỉ nên coi là công cụ trên một máy. Khi cần chạy trên nhiều node, tự phục hồi, scale, dùng orchestrator như Kubernetes.