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:alpineservices:
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 Docker | Trường Compose | Ý nghĩa |
|---|---|---|
IMAGE | image | Giữ image và tag |
--name | container_name | Tên container được chỉ định |
-p, --publish | ports | Ánh xạ cổng máy chủ và container |
-e, --env | environment | Giá trị bỏ trống được lấy từ môi trường chạy |
-v, --volume / --mount | volumes | Bind mount, volume có tên hoặc ẩn danh |
--network | networks / network_mode | Tên mạng hoặc chế độ mạng |
--restart | restart | Chính sách khởi động lại |
IMAGE [COMMAND] [ARG…] | command | Giữ đố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 · $$
