docker compose wait 명령어를 사용하여 서비스 중지 시까지 블록하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker compose wait 명령어를 효과적으로 사용하여 Docker Compose 서비스의 라이프사이클을 관리하는 방법을 배우게 됩니다. 먼저 여러 서비스가 포함된 기본적인 docker-compose.yml 파일을 설정하고, 시작 후 초기 상태를 관찰하는 것으로 시작합니다.

이어서, 프로젝트 내의 모든 서비스가 중지될 때까지 실행을 블록하는 docker compose wait의 핵심 기능을 탐구할 것입니다. 그런 다음, 이 명령어를 사용하여 특정 서비스가 중지될 때까지 대기하는 방법과 마지막으로, 완전한 프로젝트 종료 및 대기 작업을 위해 docker compose wait--down-project 옵션과 결합하는 방법을 시연할 것입니다.

여러 서비스를 포함하는 간단한 docker-compose.yml 파일 생성

이 단계에서는 두 개의 서비스를 정의하는 간단한 docker-compose.yml 파일을 생성합니다. 시작하기 전에, 이 환경에는 Docker Compose 가 미리 설치되어 있지 않으므로 Docker Compose 를 설치해야 합니다.

먼저, Docker Compose 바이너리를 다운로드합니다. 설치된 Docker 버전과 호환되는 버전 v2.20.2를 다운로드합니다.

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

이 명령어는 공식 GitHub 릴리스 페이지에서 Docker Compose 바이너리를 다운로드하여 /usr/local/bin/docker-compose에 저장합니다. $(uname -s)$(uname -m) 부분은 운영 체제와 아키텍처를 자동으로 감지합니다.

다음으로, 다운로드한 바이너리에 실행 권한을 부여해야 합니다.

sudo chmod +x /usr/local/bin/docker-compose

이제 Docker Compose 가 올바르게 설치되었는지 버전을 확인하여 확인해 보겠습니다.

docker-compose version

설치된 Docker Compose 의 버전을 나타내는 출력을 볼 수 있습니다.

Docker Compose 가 설치되었으므로 docker-compose.yml 파일을 생성할 수 있습니다. 이 파일은 YAML 형식을 사용하여 애플리케이션의 서비스, 네트워크 및 볼륨을 정의합니다. 웹 서버와 데이터베이스의 두 가지 서비스가 있는 간단한 파일을 생성합니다.

프로젝트 디렉토리로 이동합니다.

cd ~/project

이제 nano 편집기를 사용하여 docker-compose.yml이라는 파일을 생성합니다.

nano docker-compose.yml

다음 내용을 편집기에 붙여넣습니다.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: mysecretpassword

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

  • version: '3.8'은 Docker Compose 파일 형식 버전을 지정합니다.
  • services:는 애플리케이션을 구성하는 다양한 서비스를 정의합니다.
  • web:web이라는 서비스를 정의합니다.
    • image: nginx:latest는 이 서비스가 Docker Hub 에서 최신 nginx 이미지를 사용하도록 지정합니다.
    • ports:는 호스트 머신의 포트 80 을 web 컨테이너의 포트 80 에 매핑하여 브라우저에서 웹 서버에 액세스할 수 있도록 합니다.
  • db:db라는 서비스를 정의합니다.
    • image: postgres:latest는 이 서비스가 Docker Hub 에서 최신 postgres 이미지를 사용하도록 지정합니다.
    • environment:는 컨테이너 내부에 환경 변수를 설정합니다. 여기서는 PostgreSQL 이미지에 필요한 POSTGRES_PASSWORD를 설정합니다.

Ctrl + X, Y, Enter를 차례로 눌러 파일을 저장합니다.

이제 두 개의 서비스를 정의하는 docker-compose.yml 파일을 성공적으로 생성했습니다.

서비스 시작 및 상태 관찰

이 단계에서는 docker-compose.yml 파일에 정의된 서비스를 시작하고 상태를 관찰합니다.

먼저, docker-compose.yml 파일을 생성한 ~/project 디렉토리에 있는지 확인합니다.

cd ~/project

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

docker-compose up -d

이 명령어를 처음 실행하면, Docker Compose 는 시스템에 이미 존재하지 않는 경우 필요한 이미지 (nginx:latestpostgres:latest) 를 다운로드합니다. 인터넷 연결 상태에 따라 시간이 걸릴 수 있습니다. 다운로드 후, webdb 서비스에 대한 컨테이너를 생성하고 시작합니다.

네트워크, 볼륨 (정의된 경우, 간단한 예제에서는 없지만) 및 컨테이너가 생성되고 시작되고 있음을 나타내는 출력을 볼 수 있습니다.

실행 중인 서비스의 상태를 확인하려면 docker-compose ps 명령어를 사용합니다.

docker-compose ps

이 명령어는 현재 디렉토리에서 Docker Compose 가 관리하는 컨테이너를 나열합니다. webdb 서비스가 모두 상태와 함께 나열되어야 하며, 상태는 Up이어야 합니다.

표준 docker ps 명령어를 사용하여 Docker Compose 가 시작한 컨테이너를 포함하여 시스템에서 실행 중인 모든 컨테이너를 볼 수도 있습니다.

docker ps

디렉토리 이름 (project의 경우) 으로 시작하고 서비스 이름 (예: project-web-1, project-db-1) 이 뒤따르는 컨테이너를 찾습니다.

서비스의 로그를 보려면 docker-compose logs 명령어를 사용할 수 있습니다. 예를 들어, web 서비스의 로그를 보려면:

docker-compose logs web

그리고 db 서비스의 경우:

docker-compose logs db

이것은 컨테이너 내부에서 무슨 일이 일어나고 있는지 디버깅하고 이해하는 데 유용합니다.

이제 docker-compose.yml 파일에 정의된 서비스를 성공적으로 시작하고 docker-compose ps를 사용하여 상태를 관찰했습니다.

docker compose wait 를 사용하여 서비스 중지 대기

이 단계에서는 서비스가 특정 상태에 도달할 때까지 블록하는 데 사용되는 docker compose wait 명령어를 살펴봅니다. 기본적으로 docker compose wait는 서비스가 중지될 때까지 대기합니다.

먼저, 이전 단계에서 서비스가 실행 중인지 확인합니다. docker-compose ps를 사용하여 확인할 수 있습니다.

cd ~/project
docker-compose ps

webdb 서비스가 모두 상태 Up으로 나열되어야 합니다.

이제 새 터미널 창 또는 탭을 엽니다. 나중에 서비스를 중지하는 데 사용할 것이므로 현재 터미널 창을 열어 둡니다.

새 터미널 창에서 ~/project 디렉토리로 이동합니다.

cd ~/project

docker compose wait 명령어를 실행합니다. 이 명령어는 현재 디렉토리의 docker-compose.yml 파일에 정의된 모든 서비스가 중지될 때까지 블록하고 대기합니다.

docker compose wait

이 명령어가 멈춘 것처럼 보일 것입니다. 서비스가 현재 실행 중이므로 이는 예상된 동작입니다. docker compose wait 명령어는 서비스가 중지될 때까지 대기하고 있습니다.

이제 서비스가 실행 중인 원래 터미널 창으로 다시 전환합니다. docker-compose down 명령어를 사용하여 서비스를 중지합니다. 이 명령어는 docker-compose up으로 생성된 컨테이너, 네트워크 및 볼륨을 중지하고 제거합니다.

cd ~/project
docker-compose down

원래 터미널 창에서 출력을 관찰합니다. 컨테이너가 중지되고 제거되고 있음을 나타내는 메시지가 표시됩니다.

이제 docker compose wait를 실행한 새 터미널 창으로 다시 전환합니다. 다른 터미널에서 docker-compose down 명령어로 서비스가 중지되면, 이 창의 docker compose wait 명령어는 서비스가 중지되었음을 감지하고 종료됩니다.

새 터미널 창에서 명령 프롬프트가 반환되는 것을 볼 수 있습니다. 이것은 docker compose wait가 지정된 서비스 (기본적으로 모든 서비스) 가 중지될 때까지 블록하는 방법을 보여줍니다.

프로젝트의 모든 서비스가 중지될 때까지 블록하도록 docker compose wait를 성공적으로 사용했습니다.

특정 서비스와 함께 docker compose wait 사용

이전 단계에서는 docker compose wait를 사용하여 모든 서비스가 중지될 때까지 대기했습니다. 이 단계에서는 docker compose wait를 사용하여 특정 서비스가 특정 상태에 도달할 때까지 대기하는 방법을 배웁니다.

먼저, docker-compose up -d를 사용하여 서비스를 다시 시작해 보겠습니다. ~/project 디렉토리에 있는지 확인합니다.

cd ~/project
docker-compose up -d

docker-compose ps를 사용하여 두 서비스가 모두 실행 중인지 확인합니다.

docker-compose ps

이제 새 터미널 창 또는 탭을 엽니다. 이 새 터미널을 사용하여 특정 서비스 대기를 시연합니다.

새 터미널 창에서 ~/project 디렉토리로 이동합니다.

cd ~/project

docker compose wait 명령어 뒤에 서비스 이름을 제공하여 대기할 서비스를 지정할 수 있습니다. 예를 들어, web 서비스만 중지될 때까지 대기하려면:

docker compose wait web

이전 단계와 마찬가지로, web 서비스가 현재 실행 중이므로 이 명령어는 블록됩니다.

이제 원래 터미널 창으로 다시 전환합니다. web 서비스만 중지합니다. 이렇게 하려면 컨테이너 이름과 함께 docker stop 명령어를 사용할 수 있습니다. docker ps를 사용하여 컨테이너 이름을 찾을 수 있습니다. 아마도 project-web-1과 같은 형태일 것입니다.

cd ~/project
docker stop project-web-1

project-web-1을 실제 컨테이너 이름으로 바꾸십시오 (다른 경우).

원래 터미널 창에서 출력을 관찰합니다. web 컨테이너가 중지되고 있음을 나타내는 메시지가 표시됩니다.

이제 docker compose wait web을 실행한 새 터미널 창으로 다시 전환합니다. web 서비스가 중지되면 docker compose wait web 명령어가 이를 감지하고 종료됩니다.

새 터미널 창에서 명령 프롬프트가 반환되는 것을 볼 수 있습니다. db 서비스가 여전히 실행 중임에도 불구하고 docker compose wait web 명령어가 종료되었음을 확인하십시오.

db 서비스가 여전히 실행 중인지 확인하려면 원래 터미널로 다시 전환하고 docker-compose ps를 실행합니다.

cd ~/project
docker-compose ps

web 서비스가 더 이상 나열되지 않거나 중지된 상태를 표시하는 반면, db 서비스가 상태 Up으로 나열되어야 합니다.

마지막으로, 나머지 db 서비스를 중지해 보겠습니다.

cd ~/project
docker-compose down

특정 서비스가 중지될 때까지 블록하도록 docker compose wait를 성공적으로 사용했습니다.

--down-project 옵션과 함께 docker compose wait 사용

이 마지막 단계에서는 docker compose wait와 함께 --down-project 옵션을 살펴봅니다. 이 옵션은 서비스가 중지될 때까지 대기한 다음 전체 프로젝트를 자동으로 종료하려는 경우에 유용합니다.

먼저, 이전 단계에서 서비스가 중지되었는지 확인합니다. docker-compose ps를 사용하여 확인할 수 있습니다.

cd ~/project
docker-compose ps

서비스가 아직 실행 중인 경우 docker-compose down을 사용하여 중지합니다.

docker-compose down

이제 분리된 모드로 서비스를 다시 시작해 보겠습니다.

cd ~/project
docker-compose up -d

두 서비스가 모두 실행 중인지 확인합니다.

docker-compose ps

이제 --down-project 옵션과 함께 docker compose wait 명령어를 사용합니다. 이 명령어는 모든 서비스가 중지될 때까지 대기한 다음 자동으로 docker-compose down을 실행합니다.

docker compose wait --down-project

이전의 docker compose wait 사용과 마찬가지로, 이 명령어는 서비스가 현재 실행 중이므로 블록됩니다.

이제 새 터미널 창 또는 탭을 엽니다. 이 새 터미널에서 서비스를 수동으로 중지합니다.

새 터미널 창에서 ~/project 디렉토리로 이동합니다.

cd ~/project

docker-compose down을 사용하여 서비스를 중지합니다.

docker-compose down

새 터미널 창에서 출력을 관찰합니다. 컨테이너가 중지되고 제거되고 있음을 나타내는 메시지가 표시됩니다.

이제 docker compose wait --down-project를 실행한 원래 터미널 창으로 다시 전환합니다. 다른 터미널에서 docker-compose down 명령어로 서비스가 중지되면, docker compose wait 명령어가 이를 감지합니다. --down-project 옵션이 사용되었으므로, 이 경우 컨테이너, 네트워크 및 볼륨을 제거하는 것을 의미하는 프로젝트를 자동으로 종료하는 작업을 진행합니다.

원래 터미널 창에서 수동으로 docker-compose down을 실행했을 때와 유사한 출력을 볼 수 있습니다. 프로젝트가 종료된 후 docker compose wait 명령어가 종료됩니다.

서비스가 중지될 때까지 대기한 다음 프로젝트를 자동으로 종료하기 위해 --down-project 옵션과 함께 docker compose wait를 성공적으로 사용했습니다.

요약

이 랩에서는 docker compose wait 명령어를 사용하여 서비스가 중지될 때까지 블록하는 방법을 배웠습니다. Docker Compose 를 설치하고 webdb 두 서비스를 정의하는 간단한 docker-compose.yml 파일을 생성하는 것으로 시작했습니다. 이 설정은 wait 명령의 기능을 시연하는 데 필요한 환경을 제공했습니다.

그런 다음 docker-compose.yml 파일에 정의된 모든 서비스가 중지될 때까지 블록하도록 docker compose wait를 사용하는 방법을 살펴보았습니다. 또한 특정 서비스 이름과 함께 명령어를 사용하여 해당 서비스만 중지될 때까지 대기하는 방법과 --down-project 옵션을 사용하여 전체 프로젝트가 종료될 때까지 대기하는 방법을 배웠습니다. 이러한 단계는 Docker Compose 서비스의 수명 주기를 관리하기 위한 docker compose wait 명령어의 유연성과 유용성을 보여주었습니다.