가동 중지 시간 없이 docker 스택 배포

가동 중지 시간 없이 docker 스택 배포

Docker 튜토리얼을 따르고 있으며 내 버전에서 수행하고 있습니다.

version: "3.1"
services:
    web:
        image: registry.gitlab.com/xxxx/xxxx:latest
        deploy:
             replicas: 2
        ports:
             - "8888:80"
    mysql:
        image: mysql:latest
        environment:
           MYSQL_ROOT_PASSWORD: password
           MYSQL_USER: user
           MYSQL_PASS: password
        ports:
             - "8889:3306"
        volumes: 
           - mysql-data:/var/lib/mysql
volumes:
   mysql-data:

일부 코드를 변경할 때마다 새 도커 이미지를 다시 빌드하고 업데이트를 실행합니다.

docker stack deploy --compose-file docker-compose.yml xxxx-learn 

그러다가 가동 중지 시간을 발견했습니다. 한 번에 하나씩 새 컨테이너를 시작하고 한 번에 하나씩 이전 컨테이너를 중지합니다. 그렇다면 문제는 새 이미지를 다운로드하는 데 몇 분이 걸리고 웹 서버가 실행되는 데 시간이 걸린다는 것입니다.

제가 생각한 한 가지 해결책은 두 웹 서버 복제본 앞에서 Nginx 로드 밸런싱을 실행하는 것입니다. 하지만 더 좋은 해결책이 있을까요?

답변1

작성 파일에 다시 시작 정책과 stop_grace_기간을 입력해야 합니다.

version: "3.1"
services:
    web:
        stop_grace_period: 10s
        deploy:
             replicas: 2
             restart_policy:
               condition: on-failure

답변2

그러다가 가동 중지 시간을 발견했습니다. 한 번에 하나씩 새 컨테이너를 시작하고 한 번에 하나씩 이전 컨테이너를 중지합니다. 그렇다면 문제는 새 이미지를 다운로드하는 데 몇 분이 걸리고 웹 서버가 실행되는 데 시간이 걸린다는 것입니다.

이미지/컨테이너에 대한 상태 확인을 정의해야 합니다. 그렇지 않으면 docker는 애플리케이션이 언제 요청을 처리할 준비가 되었는지 알 수 없으며 "아직 준비되지 않음" 컨테이너에 요청을 보내고 첫 번째 컨테이너를 교체한 직후 나머지 실행 중인 컨테이너를 종료합니다.

healthcheck는 애플리케이션이 정상인지 확인하기 위해 컨테이너 내부에서 실행되는 명령을 정의합니다. 보다이 문서이미지 내에서 상태 확인을 구성하는 방법을 알아보세요.

관련 정보