Trình tạo Docker Compose

Viết docker-compose.yml bằng tay nghĩa là phải nhớ chính xác thụt lề, đặt dấu ngoặc kép cho mọi ánh xạ cổng và biết chuỗi phiên bản nào mà chương trình Compose của bạn hiểu được. Trình tạo này cho phép bạn định nghĩa service qua các trường đơn giản: tên, image, ánh xạ cổng host:container và volume. Kết quả là một file YAML hợp lệ theo đặc tả Compose hiện đại (không có khóa version) cùng các mặc định hợp lý.

Cách xây file Compose

  1. 1

    Thêm service

    Đặt tên, image, ánh xạ cổng host:container và volume cho từng service. Đã có sẵn hai service mẫu.

  2. 2

    Chỉnh sửa hoặc xóa dòng

    Sửa trực tiếp mọi trường, thêm service khác bằng nút + Service hoặc xóa dòng không cần thiết.

  3. 3

    Kiểm tra YAML được tạo

    Bản xem trước cập nhật khi bạn gõ: các ánh xạ cổng được đặt trong ngoặc kép và khóa version được lược bỏ, đúng như đặc tả Compose hiện đại.

  4. 4

    Sao chép file

    Sao chép docker-compose.yml đã tạo và dán vào thư mục gốc dự án của bạn.

Đặc tả Compose hiện đại

Compose V2 (plugin đi kèm Docker Desktop và Docker Engine hiện đại) tuân theo Compose Specification. Khóa version: đã bị loại bỏ; trình tạo sẽ lược bỏ nó. Các khóa cấp cao nhất là services, networks, volumes, configssecrets.

Cấu trúc của một service

Một service hướng tới vận hành trông như thế này:

services:
  web:
    image: nginx:1.27-alpine
    restart: unless-stopped
    ports:
      - "80:80"
    volumes:
      - ./public:/usr/share/nginx/html:ro
    depends_on:
      app:
        condition: service_healthy
    networks:
      - frontend
      - backend
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost/health"]
      interval: 30s
      timeout: 5s
      retries: 3

Volume: bind mount so với volume đặt tên

  • Bind mount (./app:/var/www) gắn container với một đường dẫn trên máy chủ; rất tốt cho phát triển cục bộ vì thay đổi phản ánh ngay lập tức.
  • Volume đặt tên (pgdata:/var/lib/postgresql/data) do Docker quản lý và tồn tại độc lập với mọi đường dẫn trên máy chủ; lựa chọn đúng cho cơ sở dữ liệu và những gì bạn không muốn xóa nhầm bằng rm -rf.
  • Volume ẩn danh - tránh dùng. Nó sống sót qua các lần khởi động lại nhưng biến mất không báo trước khi chạy docker compose down -v.

Mạng

Theo mặc định, Compose tạo một mạng mang tên dự án và kết nối mọi service với nó. Khai báo mạng tường minh hữu ích khi:

  • Bạn muốn tách cơ sở dữ liệu khỏi service hướng ra công chúng.
  • Bạn cần một bridge với subnet tùy chỉnh để khớp với hạ tầng hiện có.
  • Bạn muốn gắn container vào một mạng ngoài đã tồn tại (external: true).

Lỗi thường gặp nên tránh

  • Xung đột khóa version. version: "3.8" ở đầu file ngăn các tính năng mới như start_interval của healthcheck hoạt động trên Compose cũ; trình tạo lược bỏ khóa version.
  • Ngoặc kép cho cổng. 8080:80 trong một số trường hợp biên được phân tích như số YAML hệ đếm 60; trình tạo luôn đặt ánh xạ cổng trong ngoặc kép.
  • Bí mật viết cứng. Bí mật viết trực tiếp vào compose.yml sẽ bị commit vào git. Hãy giữ chúng trong env_file hoặc kho bí mật của nền tảng.
  • depends_on thiếu điều kiện. depends_on: [db] đơn giản chỉ chờ container khởi động chứ không phải service sẵn sàng. Hãy dùng condition: service_healthy và thêm healthcheck cho service phụ thuộc.

Câu hỏi thường gặp

Compose Specification hiện tại (khớp với Docker Compose V2). File lược bỏ khóa version:, đây là cách viết file Compose hiện đại. Hoạt động với Docker Compose V2.22 trở lên.

Không qua biểu mẫu trong phiên bản này. Trình tạo tập trung vào định nghĩa service với image, port và volume. Bạn có thể tự thêm mạng, biến môi trường, healthcheck và các khóa khác vào YAML đã tạo trước khi dùng.

Không, công cụ này tập trung vào compose.yml. Với Dockerfile, hãy dùng Trình tạo Dockerfile, nơi xử lý việc chọn image gốc và thứ tự COPY/RUN cho năm công nghệ.

Không. Các định nghĩa service chỉ dùng để tạo YAML trên trang này. Chúng không được lưu, tải lên hay chia sẻ.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác