docker-compose 종속성 해결을 위해 자주 사용되는 2가지 상태 검사 레시피

5449 단어 dockercomposedocker
요즘 많은 개발자들이 docker-compose를 사용하여 로컬 시스템에 시스템을 구축하고 있습니다. 각 컨테이너가 서로 의존하지 않으면 시스템이 간단합니다. 그러나 일반적으로 docker-compose 네트워크 내에 종속 및 종속 컨테이너가 있습니다. 종속 종속 패턴의 가장 기본적인 사례와 예상 순서대로 컨테이너를 부팅하는 방법을 공유하고 있습니다.

기본 사항: 도커 상태 확인



Docker에는 healthcheck 기능이 있습니다. 규칙은 Dockerfile 또는 docker-compose에 작성할 수 있습니다. docker-compose에서는 다음과 같이 작성합니다. server 컨테이너는 db 컨테이너에 의존합니다. db에는 healthcheck 섹션과 조건이 있어야 합니다. serverdbdepends_on가 있어야 하고 그 아래에는 db 컨테이너가 상태가 된 후 부팅되도록 조건이 있어야 합니다.

services:
  server:
    image: your_server_image
    depends_on:
      db: 
        condition: service_healthy
  db:
    image: your_db_image
    healthcheck:
      test: ... # Command to check health.
      interval: 5s # Interval between health checks.
      timeout: 5s # Timeout for each health checking.
      retries: 20 # Hou many times retries.
      start_period: 10s # Estimated time to boot.


사례 1: 서버가 MySQL에 의존함



동일한 docker-compose 런타임에서 서버 및 MySQL 컨테이너를 유지하는 것은 매우 일반적인 패턴입니다. 서버 컨테이너가 부팅될 때 테이블 마이그레이션과 같은 작업을 수행하려면 MySQL 컨테이너가 준비된 후 서버를 부팅해야 합니다. db 컨테이너의 MySQL 서버에 mysqladmin로 Ping하면 MySQL이 준비되었는지 확인할 수 있습니다. MySQL 서버는 contianer의 localhost에서 실행되며 호스트-h 매개변수는 localhost 여야 합니다. 비밀번호는 environment 매개변수로 MYSQL_ROOT_PASSWORD 섹션에서 설정한 비밀번호입니다.

  db:
    image: mysql:8.0.26
    ports:
      - 3316:3306
    environment:
      MYSQL_DATABASE: yourdb
      MYSQL_ROOT_PASSWORD: pass
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-uroot", "-ppass"]
      interval: 5s
      timeout: 5s
      retries: 20


사례 2: 서버가 다른 서버에 종속됨



서버가 두 개 이상인 경우 서버가 다른 서버에 종속될 수 있습니다. 예를 들어 이미지 감지 서비스 시스템에서 하나는 사용자 액세스를 위한 메인 서버이고 다른 하나는 기계 학습에 의한 이미지 감지를 위한 서버입니다. 이 경우 셀프 핑이 가장 간단한 솔루션이어야 합니다. 서버가 컨테이너의 localhost8080 포트에서 실행되는 경우 curl ping 명령은 다음과 같아야 합니다.

  image_detection:
    image: your_image
    ports:
      - 8082:8080
    healthcheck:
      test: "curl -f localhost:8080"
      interval: 5s
      timeout: 5s
      retries: 20

좋은 웹페이지 즐겨찾기