Docker 사용시 재시작되거나 문제가 생길 때 컨테이너가 자동으로 시작되도록 설정하는 것은 매우 중요합니다. 이를 통해 시스템 관리의 효율성을 높이고 서비스의 안정적인 제공을 보장할 수 있습니다. 이번 포스팅에서는 Docker 컨테이너의 자동 시작 옵션에 대해 자세히 알아보겠습니다.

Docker 컨테이너 자동 시작 옵션이란?

Docker의 자동 시작 옵션은 컨테이너를 특정 조건에 맞춰 자동으로 실행하도록 설정하는 기능입니다. 서버 재부팅 등 예상치 못한 상황에서도 컨테이너가 지속적으로 실행되도록 보장하는 방법으로, 시스템 관리자가 수동으로 컨테이너를 다시 시작해야 하는 번거로움을 줄여줍니다.

Docker에서는 --restart 옵션을 통해 다양한 자동 시작 정책을 설정할 수 있습니다. 이 옵션은 컨테이너가 예상치 못하게 중단되었을 때, 혹은 호스트 머신이 재부팅되었을 때 컨테이너를 어떻게 처리할지 지정합니다. 이 옵션에는 다음과 같은 값들이 있습니다.

no

기본 설정으로, 자동 재시작을 하지 않습니다. 컨테이너가 종료되면 그대로 멈춘 상태로 남아있게 됩니다. 서버 관리자가 수동으로 다시 시작해야 합니다.

always

컨테이너가 중단되었을 때, 이유와 관계없이 항상 다시 시작하도록 설정합니다. 호스트 머신이 재부팅되더라도 컨테이너는 자동으로 재시작됩니다. 서비스의 가용성을 최대한 보장하고자 할 때 사용합니다.

docker run --restart always your_container_image

Docker Compose를 사용하는 경우, docker-compose.yml 파일에 다음과 같이 설정할 수 있습니다:

version: '3'
services:
  your_service:
    image: your_container_image
    restart: always

이 설정은 서비스가 중단 없이 지속적으로 제공되어야 할 때 유용합니다. 예를 들어 웹 서버나 데이터베이스 서버와 같이 상시 운영이 필요한 경우에 적합합니다.

unless-stopped

이 옵션은 컨테이너가 수동으로 중단되지 않는 한, 호스트 재부팅 등의 상황에서 자동으로 다시 시작됩니다. 만약 사용자가 컨테이너를 명시적으로 중지시켰다면 이후에는 자동으로 시작되지 않습니다.

docker run --restart unless-stopped your_container_image

Docker Compose를 사용하는 경우, docker-compose.yml 파일에 다음과 같이 설정할 수 있습니다:

version: '3'
services:
  your_service:
    image: your_container_image
    restart: unless-stopped

이 옵션은 컨테이너를 명시적으로 중지한 경우 이후에 재시작되지 않기를 원할 때 유용합니다. 사용자의 의도에 따라 재시작 여부가 결정되므로 운영 환경에서 유연하게 사용할 수 있습니다.

on-failure[:max-retries]

컨테이너가 비정상적으로 종료되었을 경우(예를 들어, 오류 코드가 0이 아닌 값으로 종료된 경우) 자동으로 재시작합니다. max-retries 옵션을 통해 최대 재시도 횟수를 지정할 수 있습니다. 기본적으로 재시작을 무한정 시도하는 것이 아니라 특정 횟수만큼 시도하게 설정할 수 있어, 오류가 반복되는 상황에서 무한 재시작을 방지할 수 있습니다.

docker run --restart on-failure:5 your_container_image

Docker Compose를 사용하는 경우, docker-compose.yml 파일에 다음과 같이 설정할 수 있습니다:

version: '3'
services:
  your_service:
    image: your_container_image
    restart: on-failure:5

이 설정은 컨테이너 내부의 오류로 인한 비정상 종료 상황에만 반응하며, 주기적인 문제가 발생할 경우에는 일정 횟수 이후 재시작을 멈춤으로써 시스템의 자원 낭비를 줄일 수 있습니다.

자동 시작 옵션 설정 방법

이미 실행 중인 컨테이너에 자동 시작 옵션을 설정하고자 한다면, docker update 명령어를 사용할 수 있습니다.

docker update --restart always your_container_name

이 명령어를 통해 기존의 컨테이너에도 자동 시작 설정을 쉽게 추가할 수 있습니다. 이를 통해 컨테이너 운영 중간에 정책을 변경하고, 더 높은 가용성을 보장할 수 있습니다.

언제 어떤 옵션을 선택해야 할까?

  • no: 테스트용 컨테이너 등에서 자동 시작이 필요 없는 경우.
  • always: 중요한 서비스가 지속적으로 제공되어야 할 때, 예를 들어 프로덕션 웹 서버.
  • unless-stopped: 일반적인 운영 환경에서 사용자가 명시적으로 중단하지 않는 한 서비스가 항상 재시작되길 원할 때.
  • on-failure: 오류로 인해 비정상 종료된 컨테이너에 대해 재시작을 시도해야 하는 경우, 특히 특정 횟수까지만 재시작을 시도하고 싶은 경우.

결론

Docker의 자동 시작 옵션은 컨테이너 운영의 편리함을 극대화하고 서비스의 안정성을 보장하는 데 매우 중요한 기능입니다. 올바른 옵션을 선택하여 컨테이너가 예기치 못한 상황에서도 안정적으로 실행될 수 있도록 설정하는 것이 필요합니다. 각 옵션을 적절히 활용하여 관리 부담을 줄이고, 서비스 가용성을 극대화해 보세요.

[참고자료]

댓글남기기