문제없이 Docker 컨테이너 중지하기

도커 컨테이너를 중지하는 데 문제가 있습니까? 다양한 컨테이너를 생성할 수 있는 기능으로 인해 올바른 방법을 찾기 어려울 수 있습니다. 이 문서에서는 컨테이너를 중지하는 데 사용하는 도커 명령어를 배우게 됩니다.

계속해서 읽어보세요!

사전 요구 사항

이 튜토리얼을 따라하기 위해 다음 사항이 필요합니다:

  • Windows 10 – 이 튜토리얼은 Windows에서 도커를 실행하기 위해 사용되었지만, Linux 또는 macOS에서도 동일한 일반적인 단계를 적용할 수 있습니다.
  • Docker Desktop – 이 튜토리얼은 버전 3.5.2를 사용합니다. GUI가 없는 경우 Linux에서는 Docker 엔진을 사용할 수 있습니다.
  • A running Docker container or containers.

docker stop 컨테이너 명령으로 컨테이너 중지

첫 번째 명령어로 시작해 보겠습니다: docker stop 컨테이너 명령어 및 해당 명령이 컨테이너를 중지하는 방법을 수행하는지 알아보겠습니다.

예를 들어, mystifying_hofstadter라는 이름과 fb66ed502096라는 ID를 가진 실행 중인 컨테이너를 중지해야 한다고 가정해 보겠습니다. 아래 예시에서 보여지는 대로, docker stop 컨테이너 명령을 사용하여 컨테이너를 중지하세요.

# 컨테이너 이름으로 중지
docker stop mystifying_hofstadter
# 동일한 컨테이너의 ID로 중지
docker stop fb66ed50209
Stopping a single Docker container via the container name or container ID.

여러 실행 중인 컨테이너가 있고 이를 중지하려면 docker stop 컨테이너 명령은 한 번에 하나의 컨테이너 ID를 중지하는 것을 지원합니다.

먼저 모든 컨테이너를 docker ps 명령을 사용하여 나열하고 아래와 같이 컨테이너 ID를 docker stop 컨테이너 명령에 전달합니다.

# 모든 실행 중인 컨테이너 나열
docker ps
# 다음 Docker 컨테이너를 컨테이너 ID를 사용하여 중지
docker stop a427a21c5558 e9dbd816f24c 31269ef5999e
Listing all running containers and then stopping them

만약 수동으로 컨테이너 ID를 검색하고 docker stop에 수동으로 전달하지 않고 모든 실행 중인 컨테이너를 중지하려면 docker ps -q 명령을 사용하면 됩니다. docker ps 명령의 -q 매개변수는 컨테이너의 ID만 출력합니다.

# 세 개의 컨테이너 생성. 세미콜론으로 각 명령 구분
docker run -d -t ubuntu; docker run -d -t ubuntu; docker run -d -t ubuntu
# 모든 실행 중인 컨테이너 나열
docker ps -q
# 모든 실행 중인 컨테이너 ID를 검색하고 해당 ID를 docker stop에 전달
docker stop $(docker ps -q)
Stopping multiple Docker containers at once.

위의 $(docker ps -q) 구조는 리눅스의 Bash와 윈도우의 PowerShell에서 모두 하위 표현식입니다. 하위 표현식은 쉘에게 명령 세트 docker ps -q를 먼저 처리하고 원래 명령 docker stop에 결과 세트를 반환하도록 지시합니다.

다음 예제에서는 --stop-signal 플래그가 SIGQUIT 값을 취하며, 이는 Docker가 컨테이너를 중지할 시그널로 SIGQUIT 시그널을 보내라는 것을 알려줍니다. 이 예제는 또한 다음 매개변수를 사용합니다:

  • d – Runs the container in detached (background) mode. The detached mode will not allow the container to be immediately interacted with by the user since the process is running in the background.
  • t – allocates a Pseudo-TTY (PTY) console, which emulates a real terminal console in the container and stops the Ubuntu container from immediately exiting. The Ubuntu container in the example requires a PTY console to stay active in the background.
  • “이미지 이름” – 어떤 Docker 이미지를 사용하여 컨테이너를 프로비저닝할지, 이 경우에는 ubuntu 이미지입니다.
docker run -d -t --stop-signal SIGQUIT ubuntu
Specifying SIGQUIT as the signal when starting and then stopping a Docker container.

Dockerfile을 사용하여 중지 신호를 지정할 수도 있으며, 이는 Docker에게 컨테이너를 빌드하는 방법을 알려줍니다. Dockerfile에 중지 신호를 지정하는 항목을 추가할 수 있으며, 예를 들어 STOPSIGNAL SIGQUIT를 사용할 수 있습니다. 원하는 중지 신호로 SIGQUIT를 바꿀 수 있습니다.

docker kill을 사용하여 즉시 컨테이너 종료

어떤 경우에는 컨테이너에 대기 기간을 허용하지 않고 즉시 종료하고 싶을 때가 있습니다. docker kill 명령은 컨테이너를 즉시 중지합니다.

다음 예제에서는 컨테이너 ID 2aa318273db5docker kill에 전달합니다. 컨테이너는 즉시 SIGKILL 시그널을 통해 종료됩니다. 컨테이너는 우아한 종료를 허용받지 못할 것입니다. 명령의 결과로 컨테이너가 종료되고 컨테이너의 ID가 표시됩니다.

docker kill 2aa318273db5

명령 docker kill $(docker ps -q)를 사용하여 모든 컨테이너를 즉시 종료합니다. 여기서 (docker ps -q)는 하위 표현식임에 유의하십시오.

docker rm을 사용하여 컨테이너 중지 및 제거

기본적으로 컨테이너를 생성할 때, 해당 컨테이너는 이전과 동일하게 생성됩니다: 이러한 컨테이너는 멱등성을 갖습니다. 컨테이너를 제거하는 것은 최소한의 영향을 미치며, 이를 위해 docker rm 명령은 컨테이너를 강제로 중지하고 제거합니다. Docker는 주 프로세스에 SIGKILL 시그널을 보내고 해당 컨테이너를 Docker 설치에서 사용 가능한 컨테이너 목록에서 제거합니다.

컨테이너 내부 파일의 변경 내용을 유지해야 하거나 상태를 유지해야 하는 경우, 컨테이너를 제거하면 이러한 변경 내용이 손실됩니다. 잠재적인 문제에 유의하세요!

다음 예제에서는 컨테이너에 kind_galileo라는 이름이 할당된 경우를 가정합니다. 컨테이너를 제거하기 전에 아래와 같이 컨테이너를 중지해야 합니다. docker ps -a 명령은 예제 컨테이너의 상태를 Exited로 표시합니다.

Listing all containers, including stopped containers.

이제 컨테이너가 중지되었으므로 docker rm 명령을 사용하여 컨테이너를 완전히 제거할 수 있습니다.

docker rm kind_galileo

컨테이너를 중지한 다음 컨테이너를 제거하는 대신, --forcedocker rm의 조합은 한 번에 컨테이너를 중지하고 제거합니다. 컨테이너인 laughing_elion은 더 이상 실행할 수 없게 됩니다.

docker rm --force laughing_elion

--force 명령을 지정하지 않으면, 다음과 같은 오류 메시지가 발생합니다.Error response from daemon: You cannot remove a running container...

Stopping and removing a container.

Docker Compose를 사용하여 Docker 컨테이너 중지하기

Docker 명령은 일반적으로 단일 컨테이너에서 사용되지만 여러 컨테이너로 구성된 서비스를 만들 수도 있습니다. Docker Compose 도구를 사용하면 여러 컨테이너로 구성된 서비스를 설정할 수 있습니다.

서비스 내의 컨테이너는 함께 작동하도록 설계되었기 때문에 개별 컨테이너가 아닌 서비스 전체를 정상적으로 중지하는 것이 좋습니다.

여러 컨테이너가 실행 중인 서비스가 있다면 [docker-compose stop]을 사용하여 컨테이너나 서비스를 제거하지 않고 서비스를 중지할 수 있습니다. 아래에서 Docker Compose 서비스를 생성하고 서비스를 시작하며 최종적으로 정상적으로 서비스를 중지하는 방법을 찾아보세요.

1. 구성 파일을 저장할 디렉토리를 생성하세요. 이 예제에서는 디렉토리 C:\Articles\Ubuntu에 파일을 저장합니다.

mkdir C:\Articles\Ubuntu

2. 그런 다음 다음 구성을 포함하는 파일 docker-compose.yml을 생성하세요. 아래 Docker Compose 파일은 두 개의 Ubuntu 컨테이너를 사용하는 서비스를 생성하며, 컨테이너가 즉시 종료되지 않도록 합니다.

# docker-compose의 사양 버전
version: "3.9"
# 이 서비스를 구성하는 응용 프로그램 모음
services:
  # 첫 번째 Ubuntu 컨테이너
  container1:
    image: ubuntu
    # -t 옵션과 동일하며 Pseudo-TTY를 할당하여 컨테이너가 즉시 종료되지 않도록 합니다.
    tty: true
  # 두 번째 Ubuntu 컨테이너
  container2:
    image: ubuntu
    tty: true

3. 터미널 세션에서 사용자 정의 Docker 구성 파일 디렉토리로 이동하십시오. 이 예에서는 C:\Articles\Ubuntu입니다. docker-compose up -d 명령을 실행하여 앞서 생성한 서비스를 -d 옵션에 의해 백그라운드에서 생성 및 시작합니다.

Starting a Docker Compose service.

4. 동일한 터미널 세션 및 디렉토리에서 docker-compose stop 명령을 사용하여 서비스 및 컨테이너를 정상적으로 종료합니다.

Stopping a Docker Compose service.

docker-compose 명령은 docker 명령과 마찬가지로 rm --forcekill 매개변수도 포함하고 있습니다. docker-compose 매개변수는 단일 컨테이너 대신 서비스에 작동합니다. docker-compose kill 명령에는 -s 옵션을 사용하여 중지 신호를 지정할 수 있습니다.

결론

Docker 컨테이너는 개발 및 프로덕션 사용을 위한 독특하고 분리된 환경을 만드는 강력한 도구입니다. 이 글에서는 Docker가 하나 이상의 컨테이너를 중지하는 여러 방법을 배웠습니다. 또한 Docker가 사용하는 기본 중지 신호와 그것을 변경하는 방법에 대해 알아보았습니다.

이 지식을 바탕으로 Docker 컨테이너를 중지하는 방법을 완벽하게 알게 되었습니다. 이 새로 얻은 지식을 가지고 앞으로 어떻게 컨테이너를 중지할 계획이신가요?

Source:
https://adamtheautomator.com/docker-stop-containers/