1. 개요
<Docker 가상 환경 구축 입문>의 <Chapter 9-8. Rolling Update>를 읽고 정리한 내용입니다.
2. Rolling Update
- 롤링 업데이트란, 서비스의 각 태스크를 한 번에 업데이트하지 않고, 지연 시간을 설정하여 태스크를 순차적으로 업데이트할 수 있는 기능.
- 이 기능을 통해, 실행중인 컨테이너는 사용자 요청을 처리하고, 나머지 컨테이너는 업데이트를 진행하는 것.
3. Rolling Update의 옵션
- 서비스 생성 시에 롤링 업데이트 관련 옵션을 설정할 수 있음.
-
--update-delay
- 태스크 간의 지연 시간을 설정하는 것으로, 단위는 초.
- 한 태스크의 업데이트가 종료되면, 설정한 지연시간 만큼 기다린 후, 다음 태스크의 업데이트를 진행.
- 별도로 지연 시간을 설정하지 않으면, 한 태스크의 업데이트와 기동이 완료된 후 지연 시간 없이 바로 다음 태스크의 업데이트를 진행.
- 컨테이너가 기동된 후, 초기화에 시간이 오래 소요되는 경우에 원활한 운영을 위해 지연 시간을 두고 순차적으로 업데이트할 수 있음.
-
--update-parallelism
- 여러개의 태스크를 병렬로 업데이트하도록 설정하는 것.
- 업데이트에 시간이 오래 걸리는 경우에는 여러개의 태스크에 대한 업데이트를 병렬로, 동시에 진행할 수 있음.
4. Rolling Update 예제
-
redis 3.0.6 이미지를 redis 3.0.7로 업데이트하는 예제
$ docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6 kw7xj2a7ikoi63k9h17xheelt overall progress: 3 out of 3 tasks 1/3: running [==================================================>] 2/3: running [==================================================>] 3/3: running [==================================================>] verify: Service converged $ docker service inspect --pretty redis ID: kw7xj2a7ikoi63k9h17xheelt Name: redis Service Mode: Replicated Replicas: 3 Placement: UpdateConfig: Parallelism: 1 Delay: 10s On failure: pause Monitoring Period: 5s Max failure ratio: 0 Update order: stop-first RollbackConfig: Parallelism: 1 On failure: pause Monitoring Period: 5s Max failure ratio: 0 Rollback order: stop-first ContainerSpec: Image: redis:3.0.6@sha256:6a692a76c2081888b589e26e6ec835743119fe453d67ecf03df7de5b73d69842 Init: false Resources: Endpoint Mode: vip $ docker service update --image redis:3.0.7 --detach=false redis redis overall progress: 3 out of 3 tasks 1/3: running [==================================================>] 2/3: running [==================================================>] 3/3: running [==================================================>] verify: Service converged
- 서비스를 create할 때, --update-delay 옵션을 통해 지연 시간을 설정하면, inspect에서 Delay: 10s로 적용된 것을 확인할 수 있음.
- docker service update 명령어를 실행하면 한 태스크의 업데이트가 끝나고 10초간 기다린 후, 다음 태스크의 업데이트가 진행됨.