Docker 컨테이너 재시작 명령어 사용법: 컨테이너 관리

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker restart 명령어를 사용하여 Docker 컨테이너를 효과적으로 관리하는 방법을 배우게 됩니다. 먼저, 실행 중인 컨테이너를 다시 시작하는 기본적인 프로세스를 이해하는 것으로 시작합니다. 이는 변경 사항을 적용하거나 문제를 해결하는 데 필수적인 작업입니다.

이를 바탕으로, 더 고급적인 재시작 옵션을 탐구할 것입니다. 여기에는 재시작 프로세스에 대한 사용자 지정 타임아웃을 지정하는 것이 포함됩니다. 이를 통해 Docker 가 컨테이너가 강제 종료되기 전에 정상적으로 중지될 때까지 대기하는 시간을 제어할 수 있습니다. 마지막으로, 특정 신호를 사용하여 컨테이너를 다시 시작하는 방법을 배우게 됩니다. 이를 통해 재시작 중에 컨테이너의 종료 동작을 세밀하게 제어할 수 있습니다.

실행 중인 컨테이너 재시작

이 단계에서는 실행 중인 Docker 컨테이너를 다시 시작하는 방법을 배우게 됩니다. 컨테이너를 다시 시작하는 것은 구성 변경 사항을 적용하거나, 문제를 해결하거나, 단순히 컨테이너의 상태를 새로 고쳐야 할 때 일반적인 작업입니다.

먼저, 예제에 사용할 간단한 Nginx 이미지를 가져오겠습니다. nginx:latest 이미지를 사용합니다.

docker pull nginx:latest

이미지가 가져와지고 추출되고 있음을 나타내는 출력을 볼 수 있습니다.

다음으로, 이 이미지를 기반으로 컨테이너를 실행합니다. 백그라운드에서 실행되도록 분리 모드 (-d) 로 실행하고 이름을 할당합니다 (--name my-nginx).

docker run -d --name my-nginx nginx:latest

이 명령은 Nginx 컨테이너를 시작하고 컨테이너 ID 를 출력합니다.

컨테이너가 실행 중인지 확인하려면 docker ps 명령을 사용할 수 있습니다.

docker ps

my-nginx 컨테이너가 Up 상태로 나열되는 것을 볼 수 있습니다.

이제 컨테이너 이름을 사용하여 docker restart 명령을 사용하여 실행 중인 컨테이너를 다시 시작해 보겠습니다.

docker restart my-nginx

이 명령은 컨테이너를 중지한 다음 다시 시작합니다.

컨테이너가 다시 시작되어 다시 실행 중인지 확인하려면 docker ps를 다시 사용하십시오.

docker ps

my-nginx 컨테이너가 다시 나열되고 STATUS 열에 최근에 시작되었음을 나타내는 시간이 표시된 Up이 표시됩니다.

특정 타임아웃으로 컨테이너 재시작

이 단계에서는 특정 타임아웃으로 Docker 컨테이너를 다시 시작하는 방법을 배우게 됩니다. 컨테이너를 다시 시작하면 Docker 는 컨테이너의 주 프로세스에 중지 신호 (기본적으로 SIGTERM) 를 보냅니다. 프로세스가 특정 기간 내에 종료되지 않으면 Docker 는 강제로 중지하기 위해 kill 신호 (SIGKILL) 를 보냅니다. 기본 타임아웃은 10 초입니다. docker restart 명령과 함께 -t 또는 --time 플래그를 사용하여 이 타임아웃을 조정할 수 있습니다.

이전 단계에서 생성한 my-nginx 컨테이너를 사용해 보겠습니다. 먼저, 컨테이너가 실행 중인지 확인합니다.

docker ps

컨테이너가 실행 중이지 않으면 다시 시작합니다.

docker start my-nginx

이제 5 초의 타임아웃으로 컨테이너를 다시 시작합니다. 즉, Docker 는 중지 신호를 보낸 후 kill 신호를 보내기 전에 5 초 동안 대기합니다.

docker restart -t 5 my-nginx

재시작 명령이 실행되었음을 나타내는 컨테이너 이름이 출력되는 것을 볼 수 있습니다.

타임아웃의 효과를 관찰하려면 일반적으로 기본 10 초보다 더 오래 걸려 정상적으로 종료되는 컨테이너가 필요합니다. 그러나 이 연습에서는 명령 구문에 중점을 둡니다.

20 초와 같이 더 긴 타임아웃으로 다시 시작해 보겠습니다.

docker restart --time 20 my-nginx

다시, 컨테이너 이름이 출력되는 것을 볼 수 있습니다.

-t 또는 --time 옵션은 종료 전에 정리 작업을 수행하는 데 더 많은 시간이 필요한 컨테이너에서 실행되는 애플리케이션이 있는 경우 유용합니다.

재시작 후 컨테이너가 여전히 실행 중인지 확인하려면 docker ps를 사용하십시오.

docker ps

my-nginxUp 상태로 나열되는 것을 볼 수 있습니다.

특정 시그널로 컨테이너 재시작

이 단계에서는 컨테이너의 주 프로세스에 특정 신호를 보내 Docker 컨테이너를 다시 시작하는 방법을 배우게 됩니다. docker restart는 기본 중지 신호 (SIGTERM) 를 보낸 후 타임아웃 후에 kill 신호 (SIGKILL) 를 보내지만, 컨테이너 내에서 실행되는 애플리케이션에 따라 다른 신호를 보내야 할 수 있습니다. docker stop을 사용하여 특정 신호로 컨테이너를 먼저 중지한 다음 docker start를 사용하여 다시 시작하여 이를 수행할 수 있습니다.

my-nginx 컨테이너를 다시 사용해 보겠습니다. 컨테이너가 실행 중인지 확인합니다.

docker ps

실행 중이지 않으면 시작합니다.

docker start my-nginx

이제 SIGKILL 신호를 보내 컨테이너를 중지합니다. 이 신호는 정리 작업을 수행할 수 없도록 하고 프로세스를 즉시 종료합니다.

docker stop -s SIGKILL my-nginx

컨테이너 이름이 출력되는 것을 볼 수 있으며, docker ps를 실행하면 컨테이너가 더 이상 나열되지 않아야 합니다.

docker ps

이제 컨테이너가 중지되었습니다. 다시 시작하려면 다시 시작하면 됩니다.

docker start my-nginx

이제 컨테이너가 다시 실행되어야 합니다. docker ps로 확인합니다.

docker ps

my-nginxUp 상태로 나열되는 것을 볼 수 있습니다.

SIGKILL은 강제 중지이지만, 애플리케이션이 정상적인 종료 또는 재로드를 위해 처리하도록 구성된 경우 SIGHUP 또는 SIGINT와 같은 다른 신호도 보낼 수 있습니다. 그러나 nginx 컨테이너의 기본 구성은 SIGTERM을 정상적으로 처리합니다.

다시 컨테이너를 중지해 보겠습니다. 이번에는 기본 SIGTERM 신호를 사용합니다 (신호가 지정되지 않은 경우 docker stop의 기본값).

docker stop my-nginx

중지되었는지 확인합니다.

docker ps

이제 마지막으로 시작합니다.

docker start my-nginx

실행 중인지 확인합니다.

docker ps

docker stop -s <signal>docker start를 결합하여 다시 시작하기 전에 컨테이너를 중지하는 방법에 대해 더 세분화된 제어를 할 수 있습니다.

요약

이 랩에서는 docker restart 명령을 사용하여 실행 중인 Docker 컨테이너를 다시 시작하는 기본적인 프로세스를 배웠습니다. Docker 이미지를 가져오고, 분리 모드 (detached mode) 로 컨테이너를 실행하고, 상태를 확인한 다음 성공적으로 다시 시작하는 연습을 했습니다.

또한, -t 또는 --time 플래그를 사용하여 타임아웃 기간을 지정하여 재시작 프로세스를 제어하는 방법을 탐구했습니다. 이를 통해 Docker 가 컨테이너를 강제로 종료하기 전에 정상적으로 중지될 때까지 대기하는 시간을 조정할 수 있습니다.