Cách tạo Docker Soạn Chờ cho Vùng chứa Phụ thuộc

Docker Compose cho phép bạn khởi động nhiều vùng chứa bằng cách chạy một lệnh duy nhất. Điều này giúp đơn giản hóa việc đưa ra các dịch vụ phức tạp được hình thành từ một số thành phần độc lập.

Tuy nhiên, điều này không phải lúc nào cũng đủ tốt. Một số vùng chứa của bạn có thể có sự phụ thuộc vào nhau làm hỏng ứng dụng nếu chúng không thể thực hiện được. Trong hướng dẫn này, chúng tôi sẽ chỉ ra cách bạn có thể định cấu hình các dịch vụ Soạn thư của mình để đáp ứng các phần phụ thuộc này, giúp bạn có thể khởi động các vùng chứa theo thứ tự.

Bạn Đang Xem: Cách tạo Docker Soạn Chờ cho Vùng chứa Phụ thuộc

Những thứ cơ bản

Docker Compose hỗ trợ một depends_on lĩnh vực trong docker.compose.yml các tập tin. Các dịch vụ có thể bao gồm tên của anh chị em của họ trong depends_on. Điều này ngăn không cho vùng chứa khởi động cho đến khi các dịch vụ phụ thuộc hoạt động.

services:
  api:
    image: example.com/api:latest
    depends_on:
      - db
  web-app:
    image: example.com/web-app:latest
    depends_on:
      - api
  db:
    image: mysql:8.0

Trong ví dụ này, depends_on các trường làm cho các dịch vụ bắt đầu theo thứ tự sau:

Các phụ thuộc của mỗi dịch vụ được giải quyết một cách đệ quy. Dịch vụ xác định từng depends_on trường được bắt đầu sau cùng, ở cuối chuỗi. Khi một dịch vụ phụ thuộc vào nhiều vùng chứa khác, chúng sẽ được bắt đầu theo thứ tự được liệt kê trong depends_on đồng ruộng.

Chuỗi dịch vụ được sử dụng ngược lại khi bạn dừng ngăn xếp với docker-compose stop. Với ví dụ trên, web-app vùng chứa sẽ bị xóa trước, sau đó apidb. Điều này ngăn cản các yêu cầu đến web-app thùng chứa không bị hỏng khi bắt đầu hoạt động xé nhỏ.

Chờ đợi sự sẵn sàng

Xem Thêm : Có phải âm lượng YouTube quá thấp trên Windows 10/11 không?

Mặc định depends_on cấu hình chỉ đợi các vùng chứa phụ thuộc bắt đầu. Trong ví dụ trên, Soạn có thể tạo api container càng sớm càng tốt db đang chạy, ngay cả khi máy chủ cơ sở dữ liệu bên trong vùng chứa không sẵn sàng nhận kết nối. Điều này có nghĩa là depends_on hiếm khi tự nó đủ.

Bạn có thể kết hợp tính năng này với kiểm tra sức khỏe để ngăn các vùng chứa khởi động cho đến khi các phần phụ thuộc của chúng thực sự sẵn sàng. Để sử dụng khả năng này, hãy lồng một condition lĩnh vực dưới depends_on với service_healthy như giá trị của nó:

services:
  api:
    image: example.com/api:latest
    depends_on:
      - db
    healthcheck:
      test: curl --fail http://127.0.0.1 || exit 1
      interval: 10s
      retries: 5
      start_period: 5s
      timeout: 10s
  web-app:
    image: example.com/web-app:latest
    depends_on:
      api:
        condition: service_healthy
  db:
    image: mysql:8.0

Bây giờ api vùng chứa có một lệnh kiểm tra sức khỏe được đính kèm. Các web-app dịch vụ được hướng dẫn không bắt đầu cho đến khi api đã được tạo với kết quả kiểm tra sức khỏe thành công. Điều này sẽ xảy ra khi API bắt đầu phản hồi các yêu cầu và curl lệnh thoát với mã trạng thái bằng không.

Chờ một lần thoát container thành công

Trong một số trường hợp, phần phụ thuộc của bạn có thể là một vùng chứa sử dụng một lần mà bạn muốn chạy đến khi hoàn thành. Bạn có thể chờ đợi loại phụ thuộc này bằng cách đặt condition lĩnh vực để service_completed_successfully. Điều này hữu ích khi bạn có một tập lệnh thiết lập lần chạy đầu tiên thực thi trong một vùng chứa khác.

services:
  app:
    image: example.com/app:latest
    depends_on:
      config_builder:
        condition: service_completed_successfully
    volumes:
      - config:/opt/app/config
  config_builder:
    image: example.com/config_builder:latest
    env:
      - EXAMPLE_KEY
      - ANOTHER_KEY
    volumes:
      - config:/output
volumes:
  config:

Ví dụ này cho thấy cách một hình ảnh phụ thuộc có thể chạy lệnh ghi tệp cấu hình vào ổ đĩa được chia sẻ bởi app. Sau khi dữ liệu được ghi, config_builder vùng chứa dừng với mã lối ra bằng không. Soạn sau đó tự động bắt đầu app dịch vụ vì điều kiện phụ thuộc của nó đã được đáp ứng.

Trong vài trường hợp depends_on với một condition có thể vẫn không đủ để đáp ứng trường hợp sử dụng của bạn. Bạn có thể thêm các công cụ bên ngoài để thực hiện thủ công kiểm tra sức khỏe và xử lý các liên kết giữa các vùng chứa.

Xem Thêm : 5 cách nhanh chóng để sửa lỗi nội dung bị hỏng [Firefox, Gmail]

Wait-for-It là một tập lệnh tiện ích bao bọc một quy trình khác. Nó sẽ chạy lệnh bạn chỉ định sau khi một điều kiện nhất định được đáp ứng. Điều này có thể được sử dụng để xác định các quy trình kiểm tra sức khỏe độc ​​lập với hỗ trợ tích hợp của Docker.

Đây là cách sử dụng healthcheck để đợi một cổng container được liên kết có thể truy cập được:

services:
  api:
    image: example.com/api:latest
    depends_on:
      - db
  web-app:
    image: example.com/web-app:latest
    depends_on:
      - api
    command: ["./wait-for-it.sh", "api:8080", "--", "node", "app.js"]
  db:
    image: mysql:8.0

Ở đây, chúng tôi đã hoàn nguyên để chỉ làm cho Docker Compose đợi api thùng chứa đến bắt đầu. Các web-app dịch vụ nhận trách nhiệm kiểm tra xem api là khỏe mạnh. Nó sử dụng tập lệnh Wait-for-It để phát hiện khi nào vùng chứa có thể truy cập được trên cổng 8080. Sau đó, Wait-for-It sẽ khởi chạy lệnh thực của vùng chứa ứng dụng web, được định nghĩa là node app.js.

Cách tiếp cận này tốt nhất dành riêng cho các tình huống cụ thể mà bạn không thể thiết lập kiểm tra sức khỏe thích hợp với Docker. Nó có thể cần thiết khi bạn đang sử dụng hình ảnh của bên thứ ba không thể được định cấu hình để chạy lệnh kiểm tra sức khỏe. Wait-for-It cung cấp một cách để phát hiện xem một cổng đang phục vụ lưu lượng truy cập như một sự thay thế dự phòng hay không. Mặc dù không phải là sai lầm, nhưng đây thường là một chỉ báo tốt về độ lành mạnh của vật chứa.

Bản tóm tắt

Docker Compose mặc định khởi động đồng thời tất cả các dịch vụ trong ngăn xếp của bạn. Điều này thường không được mong muốn khi các liên kết giữa các dịch vụ tạo ra các mối quan hệ phụ thuộc cha-con.

Các depends_on trường cho phép bạn xác định trình tự khởi động cho các dịch vụ của mình. Soạn sẽ tạo từng vùng chứa mới theo thứ tự, đảm bảo rằng vùng chứa trước đó đã bắt đầu trước khi vùng chứa tiếp theo được thêm vào.

Bạn có thể đợi vùng chứa trước đó thoát ra hoặc báo cáo kiểm tra sức khỏe tích cực bằng cách thêm condition vào định nghĩa phụ thuộc. Trong các tình huống không thể sử dụng kiểm tra sức khỏe, bạn có thể trì hoãn các công cụ như Wait-for-It để các vùng chứa mẹ phát hiện khi các phần phụ thuộc của chúng đã sẵn sàng.


Nguồn: https://maytinhvang.com
Danh mục: TIN HỌC

Bài viết liên quan

0903064855
chat-active-icon