Skip to content

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.

Tham khảo