docker stack ps 명령으로 스택 작업 목록 확인 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker stack ps 명령어를 효과적으로 사용하여 Docker 스택 내의 작업을 나열하고 관리하는 방법을 배우게 됩니다. 먼저, 다중 컨테이너 애플리케이션을 정의하고 실행하기 위한 강력한 도구인 Docker Compose 를 사용하여 샘플 스택을 배포하는 것으로 시작합니다.

스택 배포 후, docker stack ps의 다양한 기능을 탐색할 것입니다. 여기에는 스택의 모든 작업 나열, 이름 기반 작업 필터링, 관심 있는 특정 필드를 표시하도록 출력 형식 지정, 마지막으로 간결한 보기를 위해 작업 ID 만 표시하는 것이 포함됩니다. 이 실습 경험을 통해 Docker 스택 작업의 상태를 모니터링하고 이해하는 데 필요한 기술을 습득할 수 있습니다.

샘플 스택 배포

이 단계에서는 Docker Compose 를 사용하여 샘플 스택을 배포하는 방법을 배우게 됩니다. Docker Compose 는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구입니다. Compose 를 사용하면 YAML 파일을 사용하여 애플리케이션의 서비스를 구성합니다. 그런 다음, 단일 명령으로 구성에서 모든 서비스를 생성하고 시작합니다.

LabEx 환경에는 Docker Compose 가 사전 설치되어 있지 않으므로 먼저 설치해야 합니다. 설치된 Docker 버전과 호환되는 Docker Compose 버전 1.29.2 를 설치합니다.

먼저, Docker Compose 바이너리를 다운로드합니다.

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.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 version 1.29.2, build 5becea4c와 유사한 출력을 볼 수 있습니다.

이제 Docker Compose 가 설치되었으므로 스택을 정의하기 위해 간단한 Docker Compose 파일을 만들어 보겠습니다. ~/project 디렉토리에 docker-compose.yml이라는 파일을 생성합니다.

nano 편집기를 사용하여 파일을 생성하고 편집합니다.

nano ~/project/docker-compose.yml

다음 내용을 docker-compose.yml 파일에 붙여넣습니다.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: alpine:latest
    command: echo "Hello from Alpine"

docker-compose.yml 파일은 두 개의 서비스를 정의합니다.

  • web: nginx:latest 이미지를 사용하고 호스트의 포트 80 을 컨테이너의 포트 80 에 매핑합니다.
  • app: alpine:latest 이미지를 사용하고 간단한 echo 명령을 실행합니다.

Ctrl + S를 눌러 파일을 저장하고 Ctrl + X를 눌러 편집기를 종료합니다.

스택을 배포하기 전에 필요한 이미지를 가져오겠습니다. Docker Compose 는 배포 중에 자동으로 이미지를 가져올 수 있지만, 미리 명시적으로 가져오는 것이 도움이 될 수 있습니다.

nginx:latest 이미지를 가져옵니다.

docker pull nginx:latest

alpine:latest 이미지를 가져옵니다.

docker pull alpine:latest

이제 docker-compose up 명령을 사용하여 스택을 배포합니다. -d 플래그는 컨테이너를 분리된 모드 (백그라운드) 에서 실행합니다.

docker-compose.yml 파일을 생성한 ~/project 디렉토리로 이동합니다.

cd ~/project

그런 다음, 다음 명령을 실행합니다.

docker-compose up -d

이 명령어는 docker-compose.yml 파일을 읽고 정의된 서비스를 생성하고 시작합니다. webapp 서비스의 생성 및 시작을 나타내는 출력을 볼 수 있습니다.

서비스가 실행 중인지 확인하려면 실행 중인 컨테이너를 나열할 수 있습니다.

docker ps

web 서비스 ( nginx 기반) 와 app 서비스 ( alpine 기반) 에 대한 두 개의 컨테이너가 실행 중인 것을 볼 수 있습니다.

스택 내 모든 작업 목록 확인

이 단계에서는 이전 단계에서 배포한 스택과 관련된 모든 작업 (컨테이너) 을 나열하는 방법을 배우게 됩니다. Docker Swarm 또는 Kubernetes 에서 "작업 (task)"이라는 용어는 종종 서비스의 실행 중인 인스턴스를 지칭하는 데 사용됩니다. 여기서는 Swarm 과 동일한 방식으로 "작업" 개념을 기술적으로 사용하지 않는 Docker Compose 를 사용하고 있지만, 배포된 스택을 구성하는 컨테이너를 여전히 나열할 수 있습니다.

docker-compose ps 명령은 현재 프로젝트 ( docker-compose.yml 파일이 포함된 디렉토리) 에 대해 Docker Compose 가 관리하는 컨테이너를 나열하는 데 사용됩니다.

docker-compose.yml 파일이 있는 ~/project 디렉토리에 있는지 확인합니다.

cd ~/project

이제 docker-compose ps 명령을 실행합니다.

docker-compose ps

이 명령은 docker-compose.yml 파일에 정의된 컨테이너 목록과 현재 상태, 명령 및 포트를 표시합니다.

다음과 유사한 출력을 볼 수 있습니다 (컨테이너 이름과 ID 는 다를 수 있음).

      Name                     Command               State          Ports
--------------------------------------------------------------------------------
project_app_1       /bin/sh -c echo "Hello fr ...   Exit 0
project_web_1       /docker-entrypoint.sh ngin ...   Up      0.0.0.0:80->80/tcp

이 출력은 docker-compose.yml에 정의된 두 개의 서비스인 appweb을 보여줍니다. State 열은 컨테이너가 실행 중인지 (Up) 또는 종료되었는지 (Exit 0) 를 나타냅니다. Ports 열은 web 서비스의 포트 매핑을 보여줍니다.

app 컨테이너는 명령 echo "Hello from Alpine"의 실행이 완료되었기 때문에 종료되었습니다. Nginx 서버는 지속적으로 실행되도록 설계되었기 때문에 web 컨테이너는 계속 실행 중입니다.

이 명령은 스택에서 실행 중인 서비스와 기본 상태를 빠르게 확인하는 데 유용합니다.

이름으로 작업 필터링

이 단계에서는 Docker Compose 가 관리하는 컨테이너 목록을 서비스 이름을 기준으로 필터링하는 방법을 배우게 됩니다. 이는 많은 서비스가 있는 대규모 스택이 있고 특정 서비스의 상태만 확인하려는 경우 유용합니다.

docker-compose ps 명령을 사용하면 출력을 필터링하기 위해 서비스 이름을 인수로 지정할 수 있습니다.

~/project 디렉토리에 있는지 확인합니다.

cd ~/project

web 서비스의 컨테이너만 나열하려면 다음 명령을 실행합니다.

docker-compose ps web

이 명령은 docker-compose.yml에 정의된 web 서비스와 관련된 컨테이너에 대한 정보만 표시합니다.

다음과 유사한 출력을 볼 수 있습니다.

      Name                     Command               State          Ports
--------------------------------------------------------------------------------
project_web_1       /docker-entrypoint.sh ngin ...   Up      0.0.0.0:80->80/tcp

마찬가지로, app 서비스의 컨테이너만 나열하려면 다음을 실행합니다.

docker-compose ps app

그러면 app 컨테이너에 대한 정보가 표시됩니다.

      Name                     Command               State          Ports
--------------------------------------------------------------------------------
project_app_1       /bin/sh -c echo "Hello fr ...   Exit 0

서비스 이름으로 필터링하는 것은 Docker Compose 스택 내에서 개별 구성 요소를 관리하고 모니터링하는 간단하면서도 효과적인 방법입니다.

특정 필드 표시를 위한 출력 형식 지정

이 단계에서는 docker-compose ps 명령의 출력을 특정 필드만 표시하도록 형식 지정하는 방법을 배우게 됩니다. 이는 스크립팅 또는 추가 처리를 위해 서비스 이름이나 상태와 같은 특정 정보를 추출해야 할 때 유용합니다.

docker-compose ps 명령은 Go 템플릿을 사용하여 출력 형식을 지정할 수 있는 --format 플래그를 지원합니다.

~/project 디렉토리에 있는지 확인합니다.

cd ~/project

서비스 이름과 컨테이너 상태만 표시하려면 다음 명령을 사용할 수 있습니다.

docker-compose ps --format "table {{.Service}}\t{{.State}}"

--format 플래그를 자세히 살펴보겠습니다.

  • "table": 이는 출력이 헤더가 있는 테이블 형식이어야 함을 지정합니다.
  • {{.Service}}: 이는 서비스 이름을 나타내는 Go 템플릿 자리 표시자입니다.
  • \t: 이는 열을 구분하는 데 사용되는 탭 문자입니다.
  • {{.State}}: 이는 컨테이너 상태를 나타내는 Go 템플릿 자리 표시자입니다.

출력은 다음과 같습니다.

SERVICE         STATE
app             Exit 0
web             Up

형식 문자열에 다른 필드를 포함할 수도 있습니다. 예를 들어 서비스 이름, 이미지 및 상태를 표시하려면 다음을 수행합니다.

docker-compose ps --format "table {{.Service}}\t{{.Image}}\t{{.State}}"

출력은 다음과 같습니다.

SERVICE         IMAGE           STATE
app             alpine:latest   Exit 0
web             nginx:latest    Up

--format 플래그를 사용하면 Docker Compose 서비스에 대한 정보를 보고 처리하는 방식에 유연성을 제공합니다.

작업 ID 만 표시

이 단계에서는 Docker Compose 스택의 서비스에 대한 컨테이너 ID 만 표시하는 방법을 배우게 됩니다. 이는 자동화 또는 스크립팅 목적으로 컨테이너 ID 를 다른 명령에 전달해야 할 때 특히 유용합니다.

다시 docker-compose ps 명령과 함께 --format 플래그를 사용하지만, 이번에는 컨테이너 ID 필드만 지정합니다.

~/project 디렉토리에 있는지 확인합니다.

cd ~/project

컨테이너 ID 만 표시하려면 다음 명령을 사용합니다.

docker-compose ps -q

-q 플래그는 --quiet의 약어로, 컨테이너 ID 만 출력합니다.

또는 --format 플래그를 사용하여 동일한 결과를 얻을 수 있습니다.

docker-compose ps --format "{{.ID}}"

이 명령은 Go 템플릿 {{.ID}}를 사용하여 각 서비스에 대한 컨테이너 ID 만 추출합니다.

두 명령의 출력은 컨테이너 ID 목록이며, 각 ID 는 한 줄에 하나씩 표시됩니다.

<container_id_for_app>
<container_id_for_web>

(실제 ID 는 환경에 따라 다릅니다.)

ID 만 표시하는 것은 컨테이너를 프로그래밍 방식으로 상호 작용해야 할 때, 예를 들어 컨테이너를 중지하거나 제거해야 할 때 일반적인 요구 사항입니다.

마지막으로, 배포된 스택을 정리하기 위해 중단합니다. 이렇게 하면 docker-compose up으로 생성된 컨테이너와 네트워크가 중지되고 제거됩니다.

~/project 디렉토리에 있는지 확인합니다.

cd ~/project

다음 명령을 실행합니다.

docker-compose down

이 명령은 webapp 서비스에 대한 컨테이너를 중지하고 제거합니다. 컨테이너와 네트워크가 제거되고 있음을 나타내는 출력을 볼 수 있습니다.

docker-compose down을 실행한 후 docker ps를 사용하여 컨테이너가 더 이상 실행되지 않는지 확인할 수 있습니다.

docker ps

이제 이 명령은 실행 중인 컨테이너가 없음을 표시해야 합니다.

요약

이 랩에서는 Docker Compose 를 사용하여 샘플 스택을 배포하는 방법을 배웠습니다. 여기에는 Docker Compose 설치, 서비스를 정의하기 위한 docker-compose.yml 파일 생성, 스택 배포가 포함되었습니다.

배포 후, 배포된 스택 내의 모든 작업을 나열하기 위해 docker stack ps 명령을 사용하는 방법을 배우게 됩니다. 또한 이름으로 이러한 작업을 필터링하고, 특정 필드를 표시하도록 출력을 형식 지정하며, 작업 ID 만 표시하는 방법을 탐색하여 스택 작업 모니터링 및 관리를 위한 docker stack ps 명령의 유연성을 보여줍니다.