docker container stop 명령어를 사용하여 컨테이너를 안전하게 중지하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker container stop 명령어를 사용하여 Docker 컨테이너를 안전하게 중지하는 방법을 배우게 됩니다. 먼저 간단한 컨테이너를 생성하고 실행하는 것으로 시작합니다. 그런 다음, 기본 신호와 타임아웃을 사용하여 컨테이너를 중지하는 방법을 살펴보고, 이어서 컨테이너 중지에 사용되는 타임아웃과 신호를 사용자 정의하는 방법을 배우게 됩니다. 이 실습을 통해 Docker 컨테이너의 라이프사이클을 효과적으로 관리하는 실질적인 기술을 습득할 수 있습니다.

간단한 컨테이너 생성 및 실행

이 단계에서는 간단한 Docker 컨테이너를 생성하고 실행하는 방법을 배우게 됩니다. 컨테이너는 코드와 모든 종속성을 패키징하여 애플리케이션이 한 컴퓨팅 환경에서 다른 환경으로 빠르고 안정적으로 실행되도록 하는 표준 소프트웨어 단위입니다.

먼저, Docker Hub 에서 간단한 이미지를 가져와 보겠습니다. 메시지를 출력하고 종료하는 매우 작은 이미지인 hello-world 이미지를 사용합니다.

docker pull hello-world

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

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

이제 이미지가 있으므로 이 이미지를 기반으로 컨테이너를 실행할 수 있습니다. docker run 명령어를 사용합니다.

docker run hello-world

이 명령어를 실행하면 Docker 는 hello-world 이미지에서 새 컨테이너를 생성합니다. 컨테이너는 이미지에 정의된 명령을 실행하며, 이 경우 콘솔에 메시지를 출력하는 것입니다.

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

이 출력은 Docker 설치가 작동하고 첫 번째 컨테이너를 성공적으로 실행했음을 확인합니다. 컨테이너는 hello-world 프로그램을 실행한 다음 종료되었습니다.

실행된 컨테이너 (종료된 컨테이너 포함) 를 보려면 docker ps -a 명령어를 사용할 수 있습니다.

docker ps -a

hello-world 컨테이너가 Exited 상태로 나열된 것을 볼 수 있습니다.

CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                      PORTS     NAMES
<container_id>   hello-world   "/hello"   About a minute ago   Exited (0) About a minute ago             <container_name>

출력은 컨테이너 ID, 기반이 된 이미지, 실행된 명령어, 생성 시기, 현재 상태 및 할당된 이름을 보여줍니다.

기본 신호 및 타임아웃을 사용하여 컨테이너 중지

이 단계에서는 기본 신호와 타임아웃을 사용하여 실행 중인 Docker 컨테이너를 중지하는 방법을 배우게 됩니다. 컨테이너를 중지하면 Docker 는 컨테이너 내에서 실행 중인 주 프로세스에 신호를 보냅니다. 기본적으로 Docker 는 SIGTERM 신호를 보내 프로세스에 안전하게 종료하도록 지시합니다. 프로세스가 기본 타임아웃 기간 (일반적으로 10 초) 내에 종료되지 않으면 Docker 는 SIGKILL 신호를 보내 프로세스를 강제로 종료합니다.

먼저, 계속 실행될 컨테이너를 실행해 보겠습니다. ubuntu 이미지를 사용하고 컨테이너를 계속 활성 상태로 유지하는 간단한 명령을 실행합니다.

docker pull ubuntu

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

Using default tag: latest
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

이제 백그라운드에서 실행되도록 detached 모드 (-d) 로 ubuntu 컨테이너를 실행하고, 무기한으로 실행되도록 하는 명령 (예: tail -f /dev/null) 을 실행합니다.

docker run -d ubuntu tail -f /dev/null

이 명령어는 컨테이너 ID 를 출력합니다.

<container_id>

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

docker ps

ubuntu 컨테이너가 Up 상태로 나열된 것을 볼 수 있습니다.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Up About a minute ago             <container_name>

이제 docker stop 명령어를 사용하여 이 실행 중인 컨테이너를 중지해 보겠습니다. 컨테이너 ID 또는 컨테이너 이름을 사용할 수 있습니다. <container_id>를 실행 중인 컨테이너의 실제 ID 로 바꿉니다.

docker stop <container_id>

이 명령어는 중지된 컨테이너 ID 를 출력합니다.

<container_id>

docker stop 명령어를 실행한 후 컨테이너는 SIGTERM 신호를 받습니다. Docker 는 컨테이너가 안전하게 중지될 때까지 기본 타임아웃 (10 초) 을 기다립니다. 해당 시간 내에 중지되지 않으면 SIGKILL을 보냅니다.

docker ps를 다시 실행하여 컨테이너가 중지되었는지 확인할 수 있습니다.

docker ps

ubuntu 컨테이너는 docker ps의 출력 (실행 중인 컨테이너만 표시) 에 더 이상 나열되지 않아야 합니다. 중지된 컨테이너를 포함한 모든 컨테이너를 보려면 docker ps -a를 사용합니다.

docker ps -a

ubuntu 컨테이너가 Exited 상태로 나열된 것을 볼 수 있습니다.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Exited (0) About a minute ago             <container_name>

이것은 기본 신호 및 타임아웃을 사용하여 컨테이너가 성공적으로 중지되었음을 확인합니다.

사용자 지정 타임아웃으로 컨테이너 중지

이 단계에서는 실행 중인 Docker 컨테이너를 중지하고 안전한 종료 기간에 대한 사용자 지정 타임아웃을 지정하는 방법을 배우게 됩니다. Docker 가 강제로 종료하기 전에 애플리케이션에 더 많은 시간 또는 더 적은 시간을 안전하게 종료해야 할 때 유용합니다.

이전 단계와 동일한 ubuntu 이미지와 명령을 사용하여 계속 활성 상태로 유지되는 컨테이너를 실행합니다.

먼저, tail -f /dev/null 명령을 사용하여 detached 모드 (-d) 로 ubuntu 컨테이너를 실행합니다.

docker run -d ubuntu tail -f /dev/null

이 명령어는 컨테이너 ID 를 출력합니다.

<container_id>

docker ps를 사용하여 컨테이너가 실행 중인지 확인합니다.

docker ps

ubuntu 컨테이너가 Up 상태로 나열된 것을 볼 수 있습니다.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Up About a minute ago             <container_name>

이제 docker stop 명령어를 사용하여 컨테이너를 중지하지만, 이번에는 -t 또는 --time 플래그를 사용하여 타임아웃을 지정합니다. 타임아웃을 5 초로 설정해 보겠습니다. <container_id>를 실행 중인 컨테이너의 실제 ID 로 바꿉니다.

docker stop -t 5 <container_id>

이 명령어는 중지된 컨테이너 ID 를 출력합니다.

<container_id>

docker stop -t 5를 사용하면 Docker 는 SIGTERM 신호를 보내고 컨테이너가 중지될 때까지 5 초를 기다립니다. 컨테이너가 5 초 후에도 계속 실행 중이면 Docker 는 SIGKILL 신호를 보냅니다.

docker ps -a를 실행하여 컨테이너가 중지되었는지 확인합니다.

docker ps -a

ubuntu 컨테이너가 Exited 상태로 나열된 것을 볼 수 있습니다.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Exited (0) About a minute ago             <container_name>

5 초의 사용자 지정 타임아웃으로 컨테이너를 성공적으로 중지했습니다.

사용자 지정 신호로 컨테이너 중지

이 단계에서는 기본 SIGTERM 이외의 특정 신호를 보내 실행 중인 Docker 컨테이너를 중지하는 방법을 배우게 됩니다. 이는 안전한 종료 또는 기타 작업에 대해 다른 신호에 응답하도록 구성된 애플리케이션에 유용할 수 있습니다.

다시 ubuntu 이미지와 tail -f /dev/null 명령을 사용하여 컨테이너를 계속 실행합니다.

detached 모드 (-d) 로 ubuntu 컨테이너를 실행합니다.

docker run -d ubuntu tail -f /dev/null

이 명령어는 컨테이너 ID 를 출력합니다.

<container_id>

docker ps를 사용하여 컨테이너가 실행 중인지 확인합니다.

docker ps

ubuntu 컨테이너가 Up 상태로 나열된 것을 볼 수 있습니다.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Up About a minute ago             <container_name>

이제 docker stop 명령어를 사용하여 컨테이너를 중지하고, --signal 플래그를 사용하여 사용자 지정 신호를 지정합니다. 예를 들어, SIGKILL 신호를 직접 보내 보겠습니다. <container_id>를 실행 중인 컨테이너의 실제 ID 로 바꿉니다.

docker stop --signal SIGKILL <container_id>

이 명령어는 중지된 컨테이너 ID 를 출력합니다.

<container_id>

docker stop --signal SIGKILL을 사용하면 Docker 는 컨테이너의 주 프로세스에 즉시 SIGKILL 신호를 보냅니다. 이 신호는 프로세스에서 잡거나 무시할 수 없으므로 안전한 종료 기간 없이 강제로 종료됩니다.

docker ps -a를 실행하여 컨테이너가 중지되었는지 확인합니다.

docker ps -a

ubuntu 컨테이너가 Exited 상태로 나열된 것을 볼 수 있습니다.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Exited (137) About a minute ago             <container_name>

컨테이너가 SIGKILL로 중지되면 종료 코드가 다를 수 있습니다 (예: 137). 이는 안전하지 않은 종료를 나타냅니다.

사용자 지정 신호를 보내 컨테이너를 성공적으로 중지했습니다.

요약

이 Lab 에서는 Docker 컨테이너 작업의 기본적인 단계를 배웠습니다. Docker Hub 에서 간단한 이미지 (hello-world) 를 가져오는 것으로 시작하여 해당 이미지를 기반으로 컨테이너를 실행했습니다. 이는 컨테이너 생성 및 실행의 기본 프로세스를 보여주었으며, docker ps -a를 사용하여 컨테이너 상태를 확인하여 성공적인 완료를 확인했습니다.

제공된 내용에 자세히 설명되어 있지는 않지만, 후속 단계에서는 docker container stop 명령을 사용하여 실행 중인 컨테이너를 중지하는 과정을 안내했을 것입니다. 여기에는 중지에 사용되는 기본 신호 및 타임아웃을 이해하고, 안전한 종료를 위해 타임아웃 기간과 컨테이너에 전송되는 신호를 모두 사용자 지정하는 방법을 탐색하는 것이 포함되었을 것입니다.