Docker Desktop stop 명령어 사용법: 컨테이너 관리 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker stop 명령어를 사용하여 Docker 컨테이너를 효과적으로 관리하는 방법을 배우게 됩니다. 실행 중인 컨테이너를 중지하는 기본적인 사용법을 다루고, 컨테이너 강제 중지 방법 및 중지 작업에 대한 타임아웃 설정 방법을 포함하여 중지 프로세스를 제어하기 위한 다양한 옵션을 살펴봅니다. 이 랩을 마치면 docker stop을 사용하여 Docker 컨테이너를 정상적으로 그리고 강제적으로 종료하는 데 능숙해질 것입니다.

Docker Desktop stop 기본 사용법 이해

이 단계에서는 docker stop 명령의 기본 사용법을 배우겠습니다. docker stop 명령어는 하나 이상의 실행 중인 컨테이너를 중지하는 데 사용됩니다. 기본적으로 이 명령어는 컨테이너에 SIGTERM 신호를 보내고, 유예 기간 (grace period) 후에 컨테이너가 중지되지 않으면 SIGKILL 신호를 보냅니다.

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

docker run -d ubuntu sleep infinity

-d 플래그는 컨테이너를 detached 모드로 실행합니다. 즉, 백그라운드에서 실행됩니다. sleep infinity는 컨테이너를 무한정 실행 상태로 유지하는 명령어입니다.

이제 실행 중인 컨테이너를 나열하여 컨테이너 ID 를 얻어보겠습니다.

docker ps

다음과 유사한 출력이 표시되어 실행 중인 ubuntu 컨테이너를 보여줍니다.

CONTAINER ID   IMAGE          COMMAND           CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu         "sleep infinity"   X seconds ago   Up X seconds             <container_name>

<container_id>docker ps의 출력에서 얻은 실행 중인 컨테이너의 실제 ID 로 바꿉니다. 이제 컨테이너 ID 를 사용하여 docker stop 명령으로 컨테이너를 중지합니다.

docker stop <container_id>

이 명령을 실행하면 컨테이너가 중지됩니다. 실행 중인 컨테이너를 다시 나열하여 이를 확인할 수 있습니다.

docker ps

이번에는 docker ps 명령어가 방금 중지한 컨테이너를 표시하지 않아야 합니다.

중지된 컨테이너를 포함한 모든 컨테이너를 보려면 docker ps와 함께 -a 플래그를 사용할 수 있습니다.

docker ps -a

이렇게 하면 Exited 상태의 중지된 컨테이너가 표시됩니다.

detach 옵션을 사용하여 Docker Desktop 중지

이 단계에서는 detach 옵션을 사용하여 컨테이너를 중지하는 방법을 살펴보겠습니다. docker stop 자체는 docker run과 같은 방식으로 detach 옵션을 가지고 있지 않지만, docker stop을 터미널에서 실행할 때 detach 의 개념이 내재되어 있습니다. 이 명령어는 중지 신호가 전송되면 실행되고 터미널로 제어권을 반환하여 다른 작업을 계속할 수 있도록 합니다.

중지할 다른 컨테이너를 실행하는 것으로 시작해 보겠습니다. 이번에는 nginx 이미지를 사용합니다. 먼저, 로컬에 nginx 이미지가 없는 경우 이미지를 pull 합니다.

docker pull nginx

이제 nginx 컨테이너를 detached 모드로 실행합니다.

docker run -d nginx

실행 중인 nginx 컨테이너의 컨테이너 ID 를 가져옵니다.

docker ps

이전 ubuntu 컨테이너 (제거하지 않은 경우) 와 새로운 nginx 컨테이너를 모두 보여주는 다음과 유사한 출력을 볼 수 있습니다.

CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
<nginx_container_id>   nginx          "nginx -g 'daemon off"   X seconds ago   Up X seconds   80/tcp    <nginx_container_name>
<ubuntu_container_id>   ubuntu         "sleep infinity"         Y minutes ago   Exited Y minutes ago             <ubuntu_container_name>

이제 ID 를 사용하여 nginx 컨테이너를 중지합니다.

docker stop <nginx_container_id>

docker stop을 실행하면 이 명령은 중지 신호를 보내고 즉시 터미널로 제어권을 반환합니다. 이것이 터미널 세션의 관점에서 "detached" 동작입니다. 다른 명령을 입력하기 전에 컨테이너가 완전히 중지될 때까지 기다릴 필요가 없습니다.

nginx 컨테이너가 중지되었는지 확인합니다.

docker ps

nginx 컨테이너는 더 이상 실행 중인 컨테이너 목록에 나타나지 않아야 합니다.

강제 종료 Docker Desktop

이 단계에서는 docker stop 명령을 사용하여 컨테이너를 강제로 중지하는 방법을 배우겠습니다. docker stop은 기본적으로 정상적인 중지 신호 (SIGTERM) 를 보내지만, 때로는 컨테이너가 이 신호에 응답하지 않아 강제로 중지해야 할 수 있습니다. 이는 docker stop의 기본 동작으로, 타임아웃 후에 SIGKILL 신호를 보내는 방식으로 수행됩니다.

정상적으로 중지하기 어려울 수 있는 컨테이너를 실행해 보겠습니다. 다시 간단한 ubuntu 컨테이너를 사용하지만, 이번에는 SIGTERM 신호를 무시하는 프로세스를 시뮬레이션합니다.

docker run -d ubuntu sh -c 'trap "" SIGTERM; sleep infinity'

이 명령어에서:

  • trap "" SIGTERM은 쉘에게 SIGTERM 신호를 무시하도록 지시합니다.
  • sleep infinity는 컨테이너를 계속 실행 상태로 유지합니다.

이 새로운 ubuntu 컨테이너의 컨테이너 ID 를 가져옵니다.

docker ps

새로운 ubuntu 컨테이너가 실행 중인 것을 볼 수 있습니다.

CONTAINER ID   IMAGE          COMMAND                        CREATED         STATUS         PORTS     NAMES
<force_stop_container_id>   ubuntu         "sh -c 'trap \"\" SIGT…"   X seconds ago   Up X seconds             <container_name>
<nginx_container_id>   nginx          "nginx -g 'daemon off"   Y minutes ago   Exited Y minutes ago   80/tcp    <nginx_container_name>
<ubuntu_container_id>   ubuntu         "sleep infinity"         Z minutes ago   Exited Z minutes ago             <ubuntu_container_name>

이제 ID 를 사용하여 표준 docker stop 명령으로 이 컨테이너를 중지해 보십시오.

docker stop <force_stop_container_id>

컨테이너가 SIGTERM 신호를 무시하고 있으므로, docker stop은 기본 유예 기간 (일반적으로 10 초) 동안 대기한 다음 무시할 수 없는 SIGKILL 신호를 보냅니다. 이렇게 하면 컨테이너가 강제로 중지됩니다. 명령이 완료되기 전에 약간의 지연을 느낄 수 있습니다.

컨테이너가 중지되었는지 확인합니다.

docker ps

컨테이너는 더 이상 실행 중인 것으로 나열되지 않아야 합니다.

또한 -t 플래그를 사용하여 0 초의 타임아웃을 명시적으로 지정하여 유예 기간을 기다리지 않고 즉시 SIGKILL 신호를 보내 강제로 중지할 수도 있습니다. 다음 단계에서 -t 플래그를 살펴보겠습니다.

타임아웃으로 Docker Desktop 중지

이 단계에서는 docker stop 명령과 함께 -t 또는 --time 플래그를 사용하여 특정 타임아웃으로 컨테이너를 중지하는 방법을 배우겠습니다. 이를 통해 SIGTERM 신호를 보낸 후 SIGKILL로 강제로 중지하기 전에 Docker 가 컨테이너가 정상적으로 종료될 때까지 얼마나 오래 기다려야 하는지 지정할 수 있습니다.

타임아웃으로 중지할 컨테이너를 실행해 보겠습니다. ubuntu 이미지를 사용하고 종료되기 전에 신호를 기다리는 스크립트를 사용합니다.

docker run -d ubuntu sh -c 'trap "exit 0" SIGTERM; sleep infinity'

이 명령어는 detached 모드로 ubuntu 컨테이너를 실행합니다. trap "exit 0" SIGTERM 부분은 SIGTERM 신호를 받으면 스크립트가 정상적으로 종료되도록 하는 트랩을 설정합니다. sleep infinity는 신호를 받을 때까지 컨테이너를 계속 실행 상태로 유지합니다.

이 새로운 ubuntu 컨테이너의 컨테이너 ID 를 가져옵니다.

docker ps

새로운 ubuntu 컨테이너가 실행 중인 것을 볼 수 있습니다.

CONTAINER ID   IMAGE          COMMAND                        CREATED         STATUS         PORTS     NAMES
<timeout_container_id>   ubuntu         "sh -c 'trap \"exit 0\"…"   X seconds ago   Up X seconds             <container_name>
<force_stop_container_id>   ubuntu         "sh -c 'trap \"\" SIGT…"   Y minutes ago   Exited Y minutes ago             <container_name>
<nginx_container_id>   nginx          "nginx -g 'daemon off"   Z minutes ago   Exited Z minutes ago   80/tcp    <nginx_container_name>
<ubuntu_container_id>   ubuntu         "sleep infinity"         A minutes ago   Exited A minutes ago             <ubuntu_container_name>

이제 -t 플래그를 사용하여 이 컨테이너를 5 초의 타임아웃으로 중지합니다.

docker stop -t 5 <timeout_container_id>

Docker 는 SIGTERM 신호를 보내고 5 초 동안 대기합니다. 컨테이너가 SIGTERM에서 정상적으로 종료되도록 설정되어 있으므로 이 타임아웃 기간 내에 중지되어야 합니다. 5 초 이내에 중지되지 않으면 Docker 는 SIGKILL을 보냅니다.

컨테이너가 중지되었는지 확인합니다.

docker ps

컨테이너는 더 이상 실행 중인 것으로 나열되지 않아야 합니다.

-t 플래그를 사용하는 것은 강제로 중지되기 전에 컨테이너에 정리 작업을 수행할 특정 시간을 제공하려는 경우 유용합니다.

요약

이 Lab 에서는 실행 중인 컨테이너를 관리하기 위한 docker stop 명령의 기본적인 사용법을 배웠습니다. 먼저 docker stop이 유예 기간 후에 SIGTERM 신호를 보내고 그 다음에 SIGKILL을 보낸다는 것을 이해했습니다. docker ps를 사용하여 컨테이너 ID 를 식별한 다음 docker stop <container_id>를 실행하여 detached 모드에서 실행 중인 간단한 ubuntu 컨테이너를 중지하는 연습을 했습니다. 실행 중인 컨테이너를 다시 나열하여 컨테이너의 중지 상태를 확인했으며, docker ps -a를 사용하여 중지된 컨테이너를 포함한 모든 컨테이너를 보는 방법도 배웠습니다.