Docker와 같은 오케스트레이션 기능들을 개발하다가 Upgrade 관련 기능을 개발할 일이 있어서
본 내용을 정리해봅니다.
Docker Engine의 업그레이드 방법
1. Graceful Restart
Docker engine은 업그레이드 시 자동으로 실행 중인 컨테이너들을 중지하고, 업그레이드가 완료되면 다시 시작하는 방식입니다.
이 과정에서 컨테이너의 상태는 유지되며, 업그레이드가 끝나면 이전 상태로 복원됩니다.
2. Manual Stop and Start
업그레이드 전에 수동으로 컨테이너들을 중지하고, 업그레이드 후 다시 시작하는 방법도 있습니다.
아래와 같은 커맨드를 실행하면 가능합니다.
docker stop my_container
sudo apt-get update
sudo apt-get install --only-upgrade docker-ce
docker start my_container
3. Live Restore
세번째로 핵심 기능에 가깝고, 제 프로젝트에서 지원해야하는 기능입니다.
live restore라는 기능이 있습니다.
이 기능을 통해 Docker 데몬이 중단되어도 컨테이너가 계속 실행됩니다.
이 기능은 Docker Engine을 업그레이드하는 동안 컨테이너의 중단을 방지합니다.
Live Restore 기능을 활성화 하려면 Docker 설정 파일에 /etc/docker/daemon.json에 아래 내용을 추가해야합니다.
{
"live-restore": true
}
그리고 Docker를 재시작합니다.
sudo systemctl restart docker
설정이 제대로 완료되었는지를 보려면 아래 명령어를 사용할 수 있습니다.
docker info | grep "Live Restore Enabled"
생각해보니 저희 프로젝트의 일부가 Docker Daemon을 사용하고 있어서 혹시나 모를 Docker Daemon의 업그레이드에 대비하여 Live Restore 기능은 반드시 Enable 시켜야 하네요.
Live Restore 사용시 고려사항
1. 도커 데몬 종속성 감소
Live Restore 기능은 컨테이너가 Docker 데몬의 직접적인 제어 없이도 실행 될 수 있게 합니다.
이는 데몬이 예상치 않게 종료되더라도 컨테이너가 계속 실행 될 수 있도록 합니다.
2. 컨테이너 상태 관리
데몬이 종료된 동안에는 새로운 컨테이너를 시작하거나 중지 할 수 없으며, 데몬지 재시작 된 후에야 이런 작업이 가능합니다.
3. 리소스 사용량
Live Restore 기능은 추가적인 메모리와 CPU를 소비할 수 있으므로 시스템의 리소스 여유를 고려해야합니다.
4. 호환성
모든 Docker 버전이 Live Restore를 지원하는것은 아니므로 이 기능을 지원하는 버전인지 확인이 필요합니다.
Live restore allows you to keep containers running across Docker daemon updates, but is only supported when installing patch releases (YY.MM.x), not for major (YY.MM) daemon upgrades.
If you skip releases during an upgrade, the daemon may not restore its connection to the containers. If the daemon can't restore the connection, it can't manage the running containers and you must stop them manually.
공식 Documentation에서는 major 버전 릴리즈를 제외한 patch release만 지원한다고 되어 있네요.
참고
개발 및 IT 관련 포스팅을 작성 하는 블로그입니다.
IT 기술 및 개인 개발에 대한 내용을 작성하는 블로그입니다. 많은 분들과 소통하며 의견을 나누고 싶습니다.