docker compose pause 명령으로 서비스 일시 중지하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker compose pause 명령을 사용하여 docker-compose.yml 파일에 정의된 실행 중인 서비스를 일시적으로 중지하는 방법을 배우게 됩니다. 먼저 Nginx 이미지를 사용하여 웹 서비스를 정의하는 간단한 docker-compose.yml 파일을 생성하는 것으로 시작합니다.

docker-compose.yml 파일을 생성한 후, docker compose up을 사용하여 서비스를 시작하고, docker compose pause를 사용하여 특정 실행 중인 서비스를 일시 중지하며, 서비스가 실제로 일시 중지되었는지 확인하고, 마지막으로 docker compose unpause를 사용하여 서비스를 다시 시작하는 방법을 배우게 됩니다. 이 실습을 통해 Docker Compose 서비스의 라이프사이클을 관리하는 실질적인 경험을 얻을 수 있습니다.

간단한 docker-compose.yml 파일 생성

이 단계에서는 간단한 docker-compose.yml 파일을 생성합니다. 시작하기 전에 Docker Compose 를 설치해야 합니다. Docker Compose 는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구입니다. Compose 를 사용하면 YAML 파일을 사용하여 애플리케이션의 서비스를 구성합니다. 그런 다음, 단일 명령으로 구성에서 모든 서비스를 생성하고 시작합니다.

먼저 Docker Compose 를 설치해 보겠습니다. Docker Compose 바이너리를 다운로드하여 실행 가능하게 만듭니다.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

설치 후, Docker Compose 의 버전을 확인하여 설치를 확인할 수 있습니다.

docker-compose --version

Docker Compose version v2.20.2와 유사한 출력을 볼 수 있습니다.

이제 프로젝트 디렉토리를 생성하고 해당 디렉토리로 이동해 보겠습니다.

mkdir my-docker-app
cd my-docker-app

my-docker-app 디렉토리 내에서 docker-compose.yml이라는 파일을 생성합니다. 이 파일은 애플리케이션의 서비스를 정의합니다. nano 편집기를 사용하여 이 파일을 생성하고 편집합니다.

nano docker-compose.yml

nano 편집기에서 다음 내용을 붙여넣습니다. 이 docker-compose.yml 파일은 nginx:latest 이미지를 사용하는 web이라는 단일 서비스를 정의합니다.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

이 파일을 자세히 살펴보겠습니다.

  • version: '3.8'은 Docker Compose 파일 형식 버전을 지정합니다.
  • services:는 애플리케이션을 구성하는 서비스를 정의합니다.
  • web:은 서비스의 이름입니다.
  • image: nginx:latest는 이 서비스에 사용할 Docker 이미지를 지정합니다. 이 경우, 최신 버전의 Nginx 이미지를 사용하고 있습니다.
  • ports:는 호스트와 컨테이너 간의 포트를 매핑합니다. "80:80"은 호스트의 포트 80 을 컨테이너의 포트 80 에 매핑합니다.

내용을 붙여넣은 후, Ctrl + X, Y, 마지막으로 Enter를 눌러 파일을 저장합니다.

서비스를 시작하기 전에, nginx:latest 이미지가 로컬에서 사용 가능한지 확인해야 합니다. 그렇지 않은 경우, Docker Compose 는 서비스를 시작할 때 자동으로 이미지를 가져옵니다. 그러나 docker pull 명령을 사용하여 수동으로 이미지를 가져올 수도 있습니다.

docker pull nginx:latest

이 명령은 Docker Hub 에서 nginx:latest 이미지를 다운로드합니다.

docker-compose.yml 에 정의된 서비스 시작

이 단계에서는 docker-compose.yml 파일에 정의된 서비스를 시작합니다. docker-compose up 명령을 사용하여 서비스를 빌드, 생성 및 시작합니다.

이전 단계에서 docker-compose.yml 파일을 생성한 ~/project/my-docker-app 디렉토리에 있는지 확인하십시오.

cd ~/project/my-docker-app

이제 다음 명령을 실행하여 서비스를 시작합니다. -d 플래그는 컨테이너를 분리된 모드 (detached mode) 로 실행합니다. 즉, 백그라운드에서 실행됩니다.

docker-compose up -d

이 명령은 docker-compose.yml 파일을 읽고, 서비스 정의를 기반으로 필요한 컨테이너를 생성하고 시작합니다. nginx:latest 이미지가 시스템에 아직 없는 경우, Docker Compose 는 컨테이너를 시작하기 전에 자동으로 이미지를 가져옵니다.

네트워크, 볼륨 (있는 경우) 및 서비스 컨테이너가 생성되고 시작되고 있음을 나타내는 출력을 볼 수 있습니다. 예를 들어:

[+] Running 1/1
 ⠿ Container my-docker-app-web-1  Started

서비스가 실행 중인지 확인하려면 docker-compose ps 명령을 사용할 수 있습니다. 이 명령은 현재 디렉토리에서 Docker Compose 가 관리하는 컨테이너를 나열합니다.

docker-compose ps

다음과 유사한 출력을 볼 수 있으며, web 서비스 컨테이너가 running 상태로 표시됩니다.

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       2 minutes ago  running       0.0.0.0:80->80/tcp, :::80->80/tcp

또한 curl 명령을 사용하여 포트 80 에서 localhost에 액세스하여 Nginx 웹 서버에 액세스할 수 있는지 확인할 수 있습니다.

curl localhost:80

웹 서버가 실행 중이고 액세스할 수 있음을 나타내는 기본 Nginx 환영 페이지 HTML 출력을 볼 수 있습니다.

실행 중인 서비스 일시 중지

이 단계에서는 실행 중인 web 서비스 컨테이너를 일시 중지합니다. 컨테이너를 일시 중지하면 컨테이너의 모든 프로세스가 일시 중단됩니다. 이는 컨테이너의 프로세스를 종료하는 컨테이너 중지와는 다릅니다. 컨테이너가 일시 중지되면 상태가 고정되고 최소한의 CPU 리소스를 소비합니다.

~/project/my-docker-app 디렉토리에 있는지 확인하십시오.

cd ~/project/my-docker-app

web 서비스를 일시 중지하려면 docker-compose pause 명령 다음에 서비스 이름을 사용합니다.

docker-compose pause web

서비스가 일시 중지되고 있음을 나타내는 출력을 볼 수 있습니다.

[+] Paused 1/1
 ⠿ Container my-docker-app-web-1  Paused

이제 docker-compose ps를 사용하여 서비스의 상태를 확인해 보겠습니다.

docker-compose ps

출력은 web 서비스 컨테이너가 paused 상태로 표시되어야 합니다.

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       5 minutes ago  paused        0.0.0.0:80->80/tcp, :::80->80/tcp

컨테이너가 일시 중지되면 요청에 응답할 수 없어야 합니다. curl을 사용하여 Nginx 웹 서버에 다시 액세스해 보겠습니다.

curl localhost:80

이 명령은 서비스가 일시 중지되어 응답하지 않음을 나타내는 오류를 반환하거나 멈출 수 있습니다. 이는 컨테이너의 프로세스가 일시 중단되었음을 확인합니다.

서비스 일시 중지 확인

이 단계에서는 web 서비스 컨테이너가 일시 중지된 상태인지 명시적으로 확인합니다. 이전 단계에서 docker-compose ps를 사용하여 상태를 확인했지만, Docker 명령을 직접 사용하여 상태를 확인하는 것도 좋은 방법입니다.

먼저, ~/project/my-docker-app 디렉토리에 있는지 확인하십시오.

cd ~/project/my-docker-app

docker ps 명령을 사용하여 실행 중인 (일시 중지된 컨테이너 포함) 모든 컨테이너를 나열할 수 있습니다. web 서비스 컨테이너를 찾고 상태를 확인하기 위해 출력을 필터링합니다.

docker ps --filter "name=my-docker-app-web-1"

이 명령의 출력은 STATUS 열에 Paused가 표시된 컨테이너를 보여야 합니다.

또는 docker inspect 명령을 사용하여 상태를 포함한 컨테이너에 대한 자세한 정보를 얻을 수 있습니다. grep을 사용하여 출력 내에서 "Paused" 상태를 구체적으로 찾습니다.

docker inspect my-docker-app-web-1 | grep Paused

이 명령은 "Paused": true,`와 유사한 줄을 출력하여 컨테이너가 실제로 일시 중지되었음을 확인해야 합니다.

이전 단계에서 설명한 것처럼, curl을 통해 서비스에 액세스하려는 시도는 실패하거나 멈춰야 하며, 이는 컨테이너가 요청을 적극적으로 처리하지 않음을 추가로 나타냅니다.

curl localhost:80

이 명령은 Nginx 환영 페이지를 반환하지 않아야 합니다.

서비스 재개

이 단계에서는 이전 단계에서 일시 중지한 web 서비스 컨테이너의 일시 중지를 해제합니다. 컨테이너의 일시 중지를 해제하면 컨테이너가 일시 중지되었을 때 중단되었던 모든 프로세스가 다시 시작됩니다.

~/project/my-docker-app 디렉토리에 있는지 확인하십시오.

cd ~/project/my-docker-app

web 서비스의 일시 중지를 해제하려면 docker-compose unpause 명령 다음에 서비스 이름을 사용합니다.

docker-compose unpause web

서비스의 일시 중지가 해제되고 있음을 나타내는 출력을 볼 수 있습니다.

[+] Unpaused 1/1
 ⠿ Container my-docker-app-web-1  Unpaused

이제 docker-compose ps를 사용하여 서비스의 상태를 다시 확인해 보겠습니다.

docker-compose ps

출력은 이제 web 서비스 컨테이너가 running 상태로 표시되어야 합니다.

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       8 minutes ago  running       0.0.0.0:80->80/tcp, :::80->80/tcp

컨테이너가 이제 실행 중이므로 다시 요청에 응답할 수 있어야 합니다. curl을 사용하여 Nginx 웹 서버에 액세스해 보겠습니다.

curl localhost:80

이제 기본 Nginx 환영 페이지 HTML 출력을 볼 수 있으며, 이는 서비스가 다시 실행 중이고 액세스할 수 있음을 확인합니다.

마지막으로, 이 랩에서 생성된 리소스를 정리하려면 docker-compose down 명령을 사용하여 docker-compose.yml 파일에 정의된 컨테이너, 네트워크 및 볼륨을 중지하고 제거할 수 있습니다.

docker-compose down

이 명령은 실행 중인 컨테이너를 중지하고 컨테이너, 네트워크 및 볼륨을 제거합니다.

요약

이 랩에서는 docker compose pause 명령을 사용하여 docker-compose.yml 파일에 정의된 서비스의 상태를 관리하는 방법을 배웠습니다. 먼저 Docker Compose 를 설치하고 Nginx 이미지를 사용하는 웹 서비스를 정의하는 간단한 docker-compose.yml 파일을 만들었습니다.

설정 후, docker compose up -d를 사용하여 서비스를 시작하고, docker compose pause web으로 실행 중인 서비스를 일시 중지했으며, 일시 중지된 상태를 확인한 다음, docker compose unpause web을 사용하여 일시 중지를 해제했습니다. 이 실습을 통해 Docker Compose 서비스의 일시 중단 및 재개를 위한 pauseunpause 명령의 실제 적용을 보여주었습니다.