[docker] 모든 컨테이너에 --restart unless-stopped 부여하기

[docker] 모든 컨테이너에 --restart unless-stopped 부여하기

태그
docker
linux
shell
cli
생성 일시
Oct 22, 2024 09:09 PM
최종 편집 일시
Last updated October 22, 2024
Date

개요

클라우드 및 서버 환경에서 Docker는 경량화된 가상화 기술로 널리 사용되고 있으며, 이를 통해 응용 프로그램을 격리된 환경에서 실행할 수 있다. 그러나 Docker 컨테이너는 기본적으로 시스템 재부팅 시 자동으로 재시작되지 않기 때문에, 지속적 서비스 운영을 위해 재시작 정책을 설정하는 것이 필수적이다. 본 포스팅에서는 Docker 컨테이너의 재시작 정책을 설정하여, 시스템 재부팅 이후에도 지속적으로 컨테이너가 자동으로 실행될 수 있도록 구성하는 방법에 대해 알아본다.

Docker 컨테이너의 상태 및 재시작 정책

Docker 컨테이너는 기본적으로 docker run 명령어를 통해 시작되며, 별도의 설정이 없는 경우 시스템 재부팅이나 컨테이너가 중지될 때 자동으로 재실행되지 않는다. 이는 단기적인 개발 및 테스트 환경에서는 문제가 되지 않지만, 프로덕션 환경에서는 장애 복구 및 운영 안정성 측면에서 치명적인 약점이 될 수 있다. 이러한 문제를 해결하기 위해 Docker는 restart 정책을 제공하며, 이를 통해 컨테이너가 예기치 않은 상황에서도 자동으로 재시작될 수 있도록 설정할 수 있다.

재시작 정책의 유형

Docker는 다양한 재시작 정책을 통해 컨테이너의 상태를 관리할 수 있다. 대표적인 정책 유형은 다음과 같다.
  • no: 재시작하지 않음. 컨테이너가 중지되면 다시 시작되지 않으며, 수동으로 재실행해야 한다.
  • on-failure: 컨테이너가 비정상 종료(에러 코드 반환)된 경우에만 재시작한다.
  • always: 컨테이너가 중지될 경우 항상 재시작하며, 시스템 재부팅 시에도 자동으로 재시작된다.
  • unless-stopped: 수동으로 중지되지 않은 경우 컨테이너를 항상 재시작하며, 시스템 재부팅 시에도 동일하게 동작한다.
이 중 unless-stopped수동으로 중지되지 않는 한 자동으로 재시작되므로, 대부분의 프로덕션 환경에서 권장되는 설정이다.

실행 중인 컨테이너에 재시작 정책 적용 방법

이미 실행 중인 컨테이너에 대해 재시작 정책을 추가하려면 docker update 명령어를 사용하여 정책을 변경할 수 있다. 예를 들어, unless-stopped 정책을 설정하는 명령어는 다음과 같다.
docker update --restart unless-stopped <container_name_or_id>
이 명령어는 특정 컨테이너가 재부팅되거나 비정상 종료된 경우에도 자동으로 재시작되도록 설정한다. 만약 다수의 컨테이너에 동일한 정책을 적용하려면, 다음과 같이 현재 실행 중인 모든 컨테이너에 대해 일괄 적용할 수 있다.
docker update --restart unless-stopped $(docker ps -q)
이 명령어는 현재 실행 중인 모든 컨테이너의 ID를 가져와, 각 컨테이너에 unless-stopped 재시작 정책을 적용한다. 아래 설정으로 적용이 됐는지 확인이 가능하다.
docker inspect -f '{{.Name}}: {{.HostConfig.RestartPolicy.Name}}' $(docker ps -q)

Docker Compose를 활용한 재시작 정책 설정

Docker Compose를 사용하는 경우, 각 서비스에 대해 재시작 정책을 쉽게 설정할 수 있다. compose.yml 파일에 restart 옵션을 추가하여 다음과 같이 구성할 수 있다.
services: my-service: image: my-image restart: unless-stopped
이와 같이 설정된 compose.yml 파일을 사용하면, docker compose up -d 명령을 통해 실행된 모든 컨테이너가 재부팅 후 자동으로 재시작된다.

재시작 정책의 중요성

재시작 정책을 올바르게 설정하는 것은 컨테이너 기반의 애플리케이션이 항상 가용 상태를 유지할 수 있도록 하는 중요한 방법 중 하나이다. 이는 특히 지속적인 가용성이 요구되는 웹 서비스나 DB같은 중요한 시스템에서 더욱 필수적이다. 시스템 재부팅이나 컨테이너의 비정상 종료와 같은 예기치 않은 상황에서도 컨테이너가 자동으로 다시 시작됨으로써, 서비스 중단을 최소화할 수 있다.

결론

Docker 컨테이너의 재시작 정책 설정은 시스템의 가용성을 높이고, 운영 효율성을 향상시키는 데 중요한 역할을 한다. --restart 옵션을 사용하거나 Docker Compose를 활용하여 재시작 정책을 명시적으로 설정함으로써, 시스템 재부팅 시에도 컨테이너가 자동으로 재시작되도록 구성할 수 있다. 이러한 설정은 장애 복구 시간을 줄이고, 서비스 연속성을 보장하는 데 필수적이다. 프로덕션 환경에서 Docker 컨테이너를 사용한다면, 반드시 재시작 정책을 설정하여 시스템의 안정성을 극대화하는 것이 권장된다.

참고문헌