Giới thiệu
Bây giờ bạn đã có thể chạy Docker container với image của mình. Trong thực tế, sẽ có nhiều dịch vụ liên quan đến phát triển phần mềm. Bạn có thể có dịch vụ cốt lõi, cơ sở dữ liệu, bộ đệm và nhiều hơn nữa khi xây dựng backend. Chúng ta có thể chạy Docker container với CLI và kết nối các thành phần, nhưng điều này có thể phức tạp. Docker cung cấp công cụ Compose
để chạy nhiều container một cách dễ dàng.
YAML là gì?
Compose sử dụng tệp YAML để cấu hình nhiều container. YAML là một trong các DSL và thường được sử dụng cho mục đích cấu hình.
Cú pháp cơ bản
Compose cung cấp khá nhiều cú pháp nhưng tôi sẽ chỉ đề cập đến những cú pháp được sử dụng nhiều nhất từ kinh nghiệm của tôi.
services:
frontend:
image: awesome/webapp
ports:
- "443:8043"
networks:
- front-tier
- back-tier
configs:
- httpd-config
secrets:
- server-certificate
backend:
image: awesome/database
volumes:
- db-data:/etc/data
networks:
- back-tier
volumes:
db-data:
driver: flocker
driver_opts:
size: "10GiB"
configs:
httpd-config:
external: true
secrets:
server-certificate:
external: true
networks:
# Chỉ cần có các đối tượng này là đủ để xác định chúng
front-tier: {}
back-tier: {}
Theo tài liệu chính thức, một tệp Compose phải khai báo phần tử hàng đầu services
. Các giá trị sẽ là định nghĩa dịch vụ và dịch vụ chứa cấu hình sẽ được áp dụng cho mỗi container. Trong trường hợp của chúng ta, có các dịch vụ frontend và backend. Một tệp Compose có thể có volumes
như một phần tử hàng đầu, đóng vai trò như một lớp lưu trữ liên tục. Một tệp Compose cũng có thể có networks
như một phần tử hàng đầu. Bất kỳ container nào thuộc về mạng có thể giao tiếp với nhau. Ví dụ, các dịch vụ frontend và backend có thể giao tiếp qua mạng back-tier. Configs và secrets là các phần tử chỉ đọc cho mục đích cấu hình.
Giải thích thêm về services
Trong hầu hết các trường hợp, services
sẽ là mối quan tâm chính của chúng ta. Hãy tìm hiểu kỹ hơn về nó.
web:
build: .
image: awesome/web
ports:
- "3000:3000"
networks:
- front-tier
- back-tier
depends_on:
- db:
condition: service_healthy
environment:
- SERVER_ENVIRONMENT: development
configs:
- httpd-config
secrets:
- server-certificate
volumes:
- db-data:/etc/data
build
chỉ định hướng dẫn xây dựng. .
yêu cầu compose tìm Dockerfile trong thư mục hiện tại. Nếu build
tồn tại, có thể bỏ qua khai báo image
.
image
chỉ định image để khởi động container. Compose sẽ cố gắng cài đặt image trước nếu chưa tồn tại. Sau đó, nó sẽ chạy các hướng dẫn khác.
ports
chỉ định các cổng được mở. Cú pháp là HOST[ip:]port:CONTAINER's port
. 3000:3000
có nghĩa là ánh xạ cổng 3000 trong máy với cổng 3000 trong container.
depends_on
chỉ định các phụ thuộc trong khởi động và tắt. Trong ví dụ trên, Compose sẽ tạo db trước. Sau đó, nó sẽ đợi đến khi db khỏe mạnh trước khi tạo web. Điều này hữu ích khi chúng ta có các phụ thuộc và dịch vụ cần tạo theo thứ tự.
environment
chỉ định các biến được đặt trong container. Bạn cũng có thể chỉ định các biến với env_file
. Nếu cả hai đều tồn tại, environment
sẽ được ưu tiên.
volumes
chỉ định hướng dẫn về cách gắn volume để lưu trữ dữ liệu. Cú pháp là [SOURCE VOLUME:]CONTAINER_PATH
. Nếu volume nguồn trống, compose sẽ tạo một thư mục. Sau đó, nó sẽ gắn nó như một volume vào đường dẫn mục tiêu bên trong container.
Theo kinh nghiệm của tôi, các chỉ định này đã bao phủ hầu hết các trường hợp sử dụng.
Xây dựng với lệnh compose
Quy trình làm việc điển hình cho phát triển sẽ là code, build, test và push. Bạn có thể tận dụng compose để tăng tốc quá trình phát triển của mình. Tôi thấy điều này khá hữu ích khi một đội ngũ tham gia vào dự án mới. Compose có thể tiết kiệm thời gian thiết lập cho người mới khi họ chưa quen với hệ thống.
Dưới đây là một vài lệnh CLI hữu ích.
docker-compose up
tạo và khởi động container. Nếu thêm tham số -d
, bạn có thể chạy chúng trong chế độ nền.docker-compose down
dừng và gỡ bỏ container, mạng, image và volume.docker-compose stop
dừng các dịch vụ mà không có bất kỳ thao tác phá hủy nào.docker-compose logs
hiển thị nhật ký từ container.docker-compose exec
thực thi một lệnh trong một container đang chạy.
Với các lệnh này, bạn có thể quản lý nhiều container mà không gặp rắc rối.
Kết luận
Tôi đã trình bày về khái niệm docker-compose và các lệnh hữu ích. Hãy thử chạy nhiều container của bạn. Tôi sẽ trình bày các lệnh hữu ích và alias mà bạn có thể áp dụng vào quy trình làm việc trong bài viết tiếp theo.
Để xem bài viết gốc, vui lòng truy cập link này.