Docker 서비스 재시작 방법

DockerBeginner
지금 연습하기

소개

Docker 는 개발자가 애플리케이션을 효율적으로 배포하고 관리할 수 있도록 지원하는 강력한 컨테이너화 플랫폼입니다. Docker 서비스를 재시작하는 방법을 이해하는 것은 시스템 안정성을 유지하고 잠재적인 구성 또는 성능 문제를 해결하는 데 매우 중요합니다. 이 튜토리얼은 다양한 시나리오와 운영 체제에서 Docker 서비스를 재시작하는 방법에 대한 포괄적인 지침을 제공합니다. 이 랩에서는 Docker 데몬과 개별 컨테이너를 재시작하는 방법을 배우고, 다양한 재시작 방법의 영향을 이해하게 됩니다.

Docker 데몬 재시작

Docker 데몬은 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 관리하는 백그라운드 프로세스입니다. Docker 데몬을 재시작하는 것은 구성 변경을 수행하거나 전체 Docker 환경에 영향을 미치는 문제를 해결한 후에 종종 필요합니다.

이 단계에서는 systemd 명령을 사용하여 Docker 데몬을 재시작하는 방법을 배웁니다.

먼저, Docker 서비스의 현재 상태를 확인해 보겠습니다.

sudo systemctl status docker

Docker 서비스가 활성 상태로 실행 중인지 여부를 나타내는 출력을 볼 수 있습니다.

Docker 서비스 상태 확인 출력

이제 Docker 서비스를 재시작해 보겠습니다. 이렇게 하면 데몬에서 관리하는 모든 실행 중인 컨테이너가 중지된 다음 데몬이 다시 시작됩니다.

sudo systemctl restart docker

명령이 완료된 후, Docker 서비스가 성공적으로 재시작되었는지 확인하기 위해 상태를 다시 확인합니다.

sudo systemctl status docker

서비스가 재시작되었고 활성 상태임을 확인할 수 있습니다.

또는 Docker 서비스를 개별적으로 중지하고 시작할 수 있습니다. 먼저 서비스를 중지합니다.

sudo systemctl stop docker

상태를 확인하여 비활성 상태인지 확인합니다.

sudo systemctl status docker

그런 다음 서비스를 시작합니다.

sudo systemctl start docker

마지막으로, 활성 상태인지 확인하기 위해 상태를 다시 한 번 확인합니다.

sudo systemctl status docker

Docker 데몬을 재시작하는 것은 Docker 환경을 관리하기 위한 기본적인 작업입니다. 이 작업이 모든 실행 중인 컨테이너를 중지한다는 점을 인지하는 것이 중요합니다.

개별 컨테이너 재시작

전체 Docker 데몬을 재시작하면 모든 컨테이너에 영향을 미치는 반면, 특정 컨테이너만 재시작해야 하는 경우가 많습니다. 이는 컨테이너별 구성 변경 사항을 적용하거나, 단일 애플리케이션의 문제를 해결하거나, 컨테이너에서 실행 중인 서비스를 단순히 재시작하는 데 유용합니다.

이 단계에서는 개별 Docker 컨테이너를 재시작하는 방법을 배웁니다.

먼저, 간단한 Nginx 이미지를 가져와 컨테이너를 실행해 보겠습니다.

docker pull nginx
docker run -d --name my-nginx -p 80:80 nginx

이 명령은 nginx 이미지를 가져와, my-nginx라는 이름의 컨테이너를 detached 모드 (-d) 로 실행하고, 호스트의 포트 80 을 컨테이너의 포트 80 에 매핑합니다 (-p 80:80).

컨테이너가 실행 중인지 확인합니다.

docker ps

my-nginx 컨테이너가 Up 상태로 나열되어야 합니다.

이제 my-nginx 컨테이너를 재시작해 보겠습니다.

docker restart my-nginx

이 명령은 컨테이너에 중지 신호를 보내고, 컨테이너가 정상적으로 중지될 때까지 기다린 다음 다시 시작합니다. 기본적으로 Docker 는 컨테이너를 강제로 종료하기 전에 컨테이너가 중지될 때까지 10 초 동안 기다립니다.

컨테이너 상태를 다시 확인합니다.

docker ps

컨테이너는 여전히 Up으로 나열되어야 하지만, STATUS 열에는 재시작되었음이 표시됩니다 (예: Up X seconds).

-t 플래그를 사용하여 재시작 작업에 대한 시간 초과를 지정할 수도 있습니다. 예를 들어, 5 초 동안 대기하려면 다음과 같이 합니다.

docker restart -t 5 my-nginx

이는 애플리케이션에 더 많은 또는 더 적은 시간을 할당하여 깔끔하게 종료해야 할 경우 유용합니다.

개별 컨테이너를 재시작하면 다른 실행 중인 컨테이너나 Docker 데몬 자체에 영향을 주지 않고 애플리케이션을 세밀하게 제어할 수 있습니다.

컨테이너 재시작 정책 구성

Docker 를 사용하면 컨테이너에 대한 재시작 정책을 구성할 수 있습니다. 재시작 정책은 컨테이너가 종료된 후 Docker 데몬이 자동으로 재시작해야 하는지 여부를 결정합니다. 이는 애플리케이션의 가용성을 보장하는 데 중요한 기능입니다.

이 단계에서는 Docker 컨테이너에 대한 재시작 정책을 구성하는 방법을 배웁니다.

먼저, 이전 my-nginx 컨테이너를 중지하고 제거하여 새로 시작해 보겠습니다.

docker stop my-nginx
docker rm my-nginx

이제 always의 재시작 정책으로 새 Nginx 컨테이너를 실행해 보겠습니다.

docker run -d --name my-nginx-always --restart=always -p 80:80 nginx

--restart=always 플래그는 Docker 에게 종료 코드에 관계없이 컨테이너가 중지되면 항상 재시작하도록 지시합니다. 또한 Docker 데몬이 시작될 때 컨테이너를 재시작합니다.

컨테이너가 실행 중인지 확인합니다.

docker ps

이제 수동으로 중지하여 컨테이너 실패를 시뮬레이션해 보겠습니다.

docker stop my-nginx-always

몇 초 동안 기다린 다음 컨테이너 상태를 다시 확인합니다.

docker ps

my-nginx-always 컨테이너가 Docker 데몬에 의해 자동으로 재시작되었음을 확인할 수 있습니다. STATUS 열은 짧은 시간 동안 Up 상태였음을 나타냅니다.

다른 일반적인 재시작 정책은 다음과 같습니다.

  • no: 컨테이너를 자동으로 재시작하지 않습니다 (기본값).
  • on-failure: 0 이 아닌 종료 코드로 종료되는 경우에만 컨테이너를 재시작합니다 (오류를 나타냄). 선택적으로 최대 재시작 시도 횟수를 지정할 수 있습니다 (예: on-failure:5).
  • unless-stopped: 사용자가 명시적으로 중지하거나 Docker 데몬이 중지되지 않는 한 항상 컨테이너를 재시작합니다.

on-failure 정책을 시도해 보겠습니다. 현재 컨테이너를 중지하고 제거합니다.

docker stop my-nginx-always
docker rm my-nginx-always

on-failure 정책으로 새 컨테이너를 실행합니다.

docker run -d --name my-nginx-on-failure --restart=on-failure -p 80:80 nginx

실행 중인지 확인합니다.

docker ps

이제 실패를 시뮬레이션해 보겠습니다. 0 이 아닌 상태로 종료되는 명령을 컨테이너 내에서 실행하여 이 작업을 수행할 수 있습니다.

docker exec my-nginx-on-failure sh -c "exit 1"

몇 초 후에 컨테이너 상태를 확인합니다.

docker ps

0 이 아닌 상태로 종료되었으므로 컨테이너가 자동으로 재시작되었어야 합니다.

재시작 정책은 컨테이너화된 애플리케이션의 복원력을 보장하는 강력한 도구입니다. 적절한 정책을 구성하여 예기치 않게 중지되는 컨테이너의 복구를 자동화할 수 있습니다.

요약

이 Lab 에서는 Docker 데몬과 개별 컨테이너를 재시작하는 방법을 배웠습니다. systemd 명령을 사용하여 데몬을 재시작하는 다양한 방법을 살펴보고 docker restart 명령을 사용하여 특정 컨테이너를 재시작하는 방법을 배웠습니다. 또한 Docker 의 재시작 정책과 다양한 조건에 따라 컨테이너를 자동으로 재시작하도록 구성하여 애플리케이션의 가용성을 향상시키는 방법을 배웠습니다. 이러한 기술은 Docker 환경을 효과적으로 관리하고 문제 해결하는 데 필수적입니다.