Hướng dẫn Docker – Khám phá Docker Compose

4 min read

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.

Avatar photo

Clean Code: Nguyên tắc viết hàm trong lập trình…

Trong quá trình phát triển phần mềm, việc viết mã nguồn dễ đọc, dễ hiểu là yếu tố then chốt để đảm bảo code...
Avatar photo Dat Tran Thanh
3 min read

Leave a Reply

Your email address will not be published. Required fields are marked *