1. 개요
이 사용방법(예제)에서는 Docker Compose 와 함께 다시 시작 정책을 사용하는 방법을 배웁니다 .
먼저 다시 시작 정책으로 Docker 컨테이너를 다시 시작하는 방법을 다룹니다. 그런 다음 Docker Compose가 일반 모드 및 스웜 모드에서 다시 시작 정책을 다중 컨테이너 Docker 애플리케이션의 구성으로 정의하는 방법을 다룰 것입니다.
2. 도커 재시작 정책
다시 시작 정책은 Docker 컨테이너를 자동으로 다시 시작하고 수명 주기를 관리하는 데 사용할 수 있는 전략입니다.
컨테이너가 예기치 않게 실패할 수 있다는 점을 감안할 때 Docker에는 서비스가 다시 시작 루프로 실행되는 것을 방지하는 보호 장치가 있습니다 . 실패 시 컨테이너가 10초 이상 성공적으로 실행되지 않으면 다시 시작 정책이 적용되지 않습니다.
컨테이너를 수동으로 중지하면 다시 시작 정책이 제공될 때 Docker가 서비스를 자동으로 다시 시작한다고 가정할 수도 있습니다. 그러나 이러한 정책은 컨테이너가 임의로 중지된 후 다시 시작되는 것을 방지하기 위해 이 경우 무시됩니다.
다시 시작 정책을 사용하기 위해 Docker는 다음 옵션을 제공합니다.
- no : 컨테이너가 자동으로 다시 시작되지 않습니다.
- on-failure[:max-retries] : 컨테이너가 0이 아닌 종료 코드로 종료되면 컨테이너를 다시 시작하고 Docker 데몬이 컨테이너를 다시 시작하도록 최대 시도 횟수를 제공합니다.
- 항상 : 컨테이너가 중지되면 항상 다시 시작합니다.
- if-stopped : 컨테이너가 임의로 또는 Docker 데몬에 의해 중지되지 않는 한 항상 컨테이너를 다시 시작합니다.
이제 단일 컨테이너에 대해 Docker CLI를 사용하여 다시 시작 정책을 설정하는 방법의 예를 살펴보겠습니다.
docker run --restart always my-service
위의 예 에서 컨테이너 실행이 중지되면 my-service 가 항상 다시 시작됩니다. 그러나 컨테이너를 명시적으로 중지하면 Docker 데몬이 다시 시작되거나 restart 명령 을 사용할 때만 다시 시작 정책이 적용됩니다 .
이전 예는 다시 시작 플래그가 단일 컨테이너를 자동으로 다시 시작하도록 전략을 구성하는 방법을 보여줍니다. 그러나 Docker Compose를 사용하면 일반 모드 또는 스웜 모드에서 restart 또는 restart_policy 속성을 사용하여 여러 컨테이너를 관리하도록 다시 시작 정책을 구성할 수 있습니다.
3. 설정
Docker Compose를 사용한 재시작 정책 구현에 대해 알아보기 전에 작업 환경을 설정해 보겠습니다.
지정할 다시 시작 정책을 테스트하려면 실행 중인 Docker 컨테이너가 있어야 합니다. Docker화된 Spring Boot 애플리케이션인 이전 기사 spring-cloud-docker 프로젝트를 사용합니다. 이 프로젝트에는 Docker Compose로 다양한 다시 시작 전략을 구현하는 데 사용할 두 개의 Docker 서비스가 있습니다.
먼저 프로젝트 루트에서 다음 명령을 실행하여 두 컨테이너를 모두 실행할 수 있는지 확인해야 합니다.
docker-compose up --detach --build
이제 docker-compose ps 를 실행하여 두 서비스가 모두 실행되는 것을 볼 수 있어야 합니다 .
$ docker ps
Name Command State Ports
--------------------------------------------------------------------------------
message-server java -jar /message-server.jar Up 0.0.0.0:18888->8888/tcp
product-server java -jar /product-server.jar Up 0.0.0.0:19999->9999/tcp
또는 브라우저에서 localhost:18888 또는 localhost:19999 로 이동하여 애플리케이션 서비스에서 표시되는 메시지를 확인할 수 있습니다.
4. Docker Compose의 재시작 정책
restart Docker 명령 과 마찬가지로 Docker Compose에는 컨테이너를 자동으로 다시 시작하는 restart 속성이 포함되어 있습니다.
docker-compose.yml 파일 에서 서비스에 다시 시작 속성을 제공하여 Docker Compose에서 다시 시작 정책을 정의할 수도 있습니다 . Docker Compose는 Docker CLI restart 명령에서 제공하는 것과 동일한 값을 사용하여 다시 시작 전략을 정의합니다.
이제 컨테이너에 대한 다시 시작 정책을 생성해 보겠습니다. spring-cloud-docker 프로젝트에서 재시작 정책 속성을 추가하여 docker-compose.yml 구성 파일을 변경 해야 합니다 .
message-server:
container_name: message-server
build:
context: docker-message-server
dockerfile: Dockerfile
image: message-server:latest
ports:
- 18888:8888
networks:
- spring-cloud-network
restart: no
product-server:
container_name: product-server
build:
context: docker-product-server
dockerfile: Dockerfile
image: product-server:latest
ports:
- 19999:9999
networks:
- spring-cloud-network
restart: on-failure
두 서비스에 다시 시작 속성을 추가한 방법에 주목 하세요. 이 경우 메시지 서버 는 자동으로 다시 시작되지 않습니다. 제품 서버 는 실패 시 값 에 지정된 대로 0이 아닌 코드로 종료되는 경우에만 다시 시작됩니다 .
다음으로 Swarm 모드에서 Docker Compose를 사용하여 동일한 정책을 선언하는 방법을 살펴보겠습니다.
5. Docker Compose Swarm 모드의 재시작 정책
Swarm 모드의 Docker Compose는 컨테이너가 자동으로 다시 시작되는 방식을 지정할 때 더 많은 옵션을 제공합니다. 그러나 다음 구현은 구성에 배포 키-값 쌍 을 도입하는 Docker Compose v3에서만 작동 합니다 .
아래에서 스웜 모드에서 다시 시작 정책에 대한 구성을 추가로 확장하기 위한 다양한 속성을 찾을 수 있습니다.
- 조건 : 없음 , 실패 시 또는 모두 (기본값)
- delay : 재시작 시도 사이의 시간
- max_attempts : 재시작 창 외의 최대 시도 횟수
- window : 재시작 성공 여부를 판단하는 시간
이제 다시 시작 정책을 정의해 보겠습니다. 먼저 버전 속성 을 변경하여 Docker Compose v3를 사용하고 있는지 확인해야 합니다 .
version: '3'
버전을 변경하면 restart_policy 속성을 서비스에 추가할 수 있습니다. 이전 섹션과 마찬가지로 메시지 서버 컨테이너는 조건 에 any 값을 제공하여 항상 자동으로 다시 시작됩니다 .
deploy:
restart_policy:
condition: any
delay: 5s
max_attempts: 3
window: 120s
마찬가지로 product-server 에 오류 발생 시 다시 시작 정책을 추가합니다 .
deploy:
restart_policy:
condition: on-failure
delay: 3s
max_attempts: 5
window: 60s
재시작 정책이 스웜 모드에서 컨테이너 클러스터를 관리하기 위해 제공하는 배포 구성임을 나타내는 배포 키 내에 restart_policy 속성이 어떻게 있는지 확인 합니다.
또한 두 서비스의 다시 시작 정책에는 컨테이너에 대한 정책을 보다 강력한 다시 시작 전략으로 만드는 추가 구성 메타데이터가 포함됩니다.
6. 결론
이 문서에서는 Docker Compose를 사용하여 다시 시작 정책을 정의하는 방법을 배웠습니다. Docker 재시작 정책을 도입한 후 이전 Baeldung 프로젝트를 사용하여 컨테이너에 대한 재시작 전략을 구성하는 두 가지 방법을 보여주었습니다.
먼저 Docker CLI 의 기본 다시 시작 명령 과 동일한 옵션이 포함된 Docker Compose 다시 시작 속성 구성을 사용했습니다. 그런 다음 다시 시작 정책을 정의하는 다른 구성 값과 함께 swarm 모드 및 Docker Compose 버전 3에서만 사용할 수 있는 restart_policy 속성을 사용했습니다.
항상 그렇듯이 이 기사에 사용된 모든 샘플 코드는 GitHub에서 사용할 수 있습니다 .