Từ lệnh chạy đến cấu hình có thể quản lý

Chuyển docker run sang Compose

Đưa lệnh khởi chạy dài thành tệp cấu hình dễ đọc và dùng lại. Dán docker run để tạo YAML, đồng thời kiểm tra cách giữ volume và mạng đang dùng.

docker runcompose.yaml
Xử lý trong trình duyệt
01

Dán một lệnh. Hỗ trợ dấu nháy và nối dòng bằng dấu gạch chéo ngược. Kết quả cập nhật khi nhập.

02

compose.yaml

services:
  web:
    image: "nginx:alpine"
    container_name: "web"
    ports:
      - "8080:80"
    volumes:
      - "./html:/usr/share/nginx/html:ro"
    restart: "unless-stopped"
    network_mode: "bridge"

5 tùy chọn · 1 dịch vụYAML

Trước khi chạy

  • Chế độ chạy nền được chọn khi khởi động bằng docker compose up -d.
  • Đường dẫn tương đối tính từ compose.yaml. Kiểm tra vị trí tệp hoặc dùng đường dẫn tuyệt đối.
  • network_mode: bridge giữ mạng mặc định của docker run. Bỏ trường này để Compose tạo mạng dự án.
Kiểm tra trên máydocker compose config

Không cần tài khoản, không thực thi lệnh. Nội dung được xử lý trong trình duyệt.

Giữ cấu hình triển khai thay vì tìm lại lệnh cũ

Một lệnh docker run có thể đủ cho lần thử đầu tiên. Khi cài lại môi trường hoặc chuyển máy chủ, bạn còn cần đúng cổng, đường dẫn và biến môi trường. Tệp compose.yaml tách các thiết lập thành từng trường để dễ đọc, so sánh thay đổi và lưu cùng mã nguồn.

Mỗi lệnh được chuyển thành một dịch vụ. Công cụ không đọc cấu hình container đang chạy, không thay đổi máy chủ và không tự suy ra quan hệ phụ thuộc giữa các dịch vụ. Hãy coi kết quả là cấu hình cần rà soát trước khi dùng.

Cách tạo và kiểm tra compose.yaml

Dán lệnh bắt đầu bằng docker run hoặc docker container run. Giữ dấu nháy cho giá trị có khoảng trắng và dấu gạch chéo ngược ở cuối dòng nối tiếp. Tên dịch vụ tùy chọn chỉ đổi khóa trong services; tên đặt bằng --name vẫn nằm ở container_name.

Đọc các lưu ý, lưu tệp và kiểm tra vị trí thư mục hoặc tệp được tham chiếu. Chạy docker compose config trước khi khởi động. Với dịch vụ chạy thường trực, dùng docker compose up -d. Tác vụ chạy một lần có --rm cần cách gọi riêng.

Ví dụ Nginx: ánh xạ cổng và chính sách khởi động lại

Cổng 8080 của máy chủ được ánh xạ đến cổng 80 trong container. unless-stopped được giữ trong YAML. Riêng -d là lựa chọn chạy nền khi gọi Compose, không phải trường cấu hình dịch vụ.

docker run -d --name web -p 8080:80 \
  --restart unless-stopped nginx:alpine
services:
  web:
    image: "nginx:alpine"
    container_name: "web"
    ports:
      - "8080:80"
    restart: "unless-stopped"
    network_mode: "bridge"

Đừng vô tình trỏ sang volume mới

Volume có tên được giữ nguyên tên và khai báo external: true. Cách này tham chiếu volume hiện có thay vì tạo một volume mới mang tiền tố dự án Compose. Khi cài mới, hãy tạo volume trước hoặc bỏ khai báo bên ngoài. Công cụ không sao chép dữ liệu.

Đường dẫn tương đối tính từ thư mục chứa tệp Compose. Mạng tùy chỉnh cũng phải tồn tại sẵn. Nếu lệnh không chọn mạng, đầu ra giữ network_mode: bridge. Bỏ trường này nếu muốn dùng mạng dự án Compose và phân giải tên dịch vụ.

Những giá trị phải xử lý trước trong shell

Công cụ nhận cú pháp POSIX với dấu nháy, ký tự thoát và nối dòng. Không hỗ trợ PowerShell, CMD, pipeline, nhiều lệnh hoặc tùy chọn Docker toàn cục. Thay biến và $(pwd) bằng giá trị thực. Muốn giữ nguyên dấu đô la, dùng nháy đơn hoặc ký tự thoát; đầu ra Compose dùng $$.

--env-file được ghi với format: raw, yêu cầu Docker Compose 2.30.0 trở lên. Công cụ không mở tệp, kiểm tra image hay dò cổng đang bận. Kiểm tra cấu hình thành công không đồng nghĩa ứng dụng chắc chắn chạy được.

Đối chiếu tùy chọn Docker với trường Compose

Tùy chọn DockerTrường ComposeÝ nghĩa
IMAGEimageGiữ image và tag
--namecontainer_nameTên container được chỉ định
-p, --publishportsÁnh xạ cổng máy chủ và container
-e, --envenvironmentGiá trị bỏ trống được lấy từ môi trường chạy
-v, --volume / --mountvolumesBind mount, volume có tên hoặc ẩn danh
--networknetworks / network_modeTên mạng hoặc chế độ mạng
--restartrestartChính sách khởi động lại
IMAGE [COMMAND] [ARG…]commandGiữ đối số dưới dạng danh sách

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

Vì sao không có version?

Tệp theo Compose Specification với services ở cấp cao nhất. Công cụ không thêm trường version cũ. Dùng lệnh hiện hành docker compose để kiểm tra.

Chuyển --rm như thế nào?

Với tác vụ chạy một lần, dùng docker compose run --rm --service-ports SERVICE và thay SERVICE bằng tên dịch vụ. --service-ports áp dụng ánh xạ cổng trong tệp.

Tùy chọn không hỗ trợ có bị bỏ qua không?

Không. Các tùy chọn như --gpus, --link và một số thiết lập mount nâng cao sẽ dừng chuyển đổi để bạn cấu hình thủ công, tránh tạo kết quả thiếu tham số.

Có thể gộp nhiều lệnh không?

Chuyển từng lệnh rồi ghép các định nghĩa dịch vụ. Cần tự rà soát volume dùng chung, mạng và quan hệ phụ thuộc.

Mật khẩu có được gửi lên máy chủ không?

Lệnh không được tải lên; việc chuyển đổi diễn ra trong trình duyệt. Tuy nhiên, giá trị đã nhập vẫn có trong tệp kết quả. Hãy kiểm tra trước khi đưa vào kho mã nguồn.

Container đang chạy có bị thay thế không?

Chuyển đổi không thực hiện thao tác Docker. Khi khởi động Compose, cần xử lý tên container trùng hoặc cổng đã được sử dụng.

Tài liệu Docker chính thức: docker run · Compose · $$