docker compose ps 명령어를 사용하여 컨테이너 목록을 확인하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 Docker Compose 로 관리되는 컨테이너를 나열하기 위해 docker compose ps 명령어를 효과적으로 사용하는 방법을 배우게 됩니다. 먼저 Docker Compose 를 설치하고 docker-compose.yml 파일을 사용하여 간단한 프로젝트를 설정하는 것으로 시작합니다.

설정 후에는 실행 중인 컨테이너만 나열하고, 중지된 컨테이너를 출력에 포함시키며, 상태를 기준으로 컨테이너를 필터링하고, 더 쉬운 파싱 및 통합을 위해 출력을 JSON 형식으로 지정하는 방법을 살펴보겠습니다. 이 실습을 통해 Docker Compose 서비스를 효율적으로 모니터링하고 관리하는 기술을 습득할 수 있습니다.

docker compose ps 로 실행 중인 컨테이너 목록 확인

이 단계에서는 docker compose ps를 사용하여 실행 중인 컨테이너를 나열하는 방법을 배우게 됩니다. 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

이 명령어는 시스템 아키텍처에 맞는 Docker Compose 바이너리를 다운로드하여 /usr/local/bin/docker-compose에 저장합니다.

다음으로, 바이너리에 실행 권한을 적용해야 합니다.

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

이제 버전을 확인하여 설치를 확인해 보겠습니다.

docker-compose --version

출력에서 설치된 Docker Compose 버전을 확인할 수 있습니다.

docker compose ps를 시연하려면 docker-compose.yml 파일과 실행할 서비스가 필요합니다. ~/project 디렉토리에 간단한 docker-compose.yml 파일을 만들어 보겠습니다.

nano ~/project/docker-compose.yml

다음 내용을 파일에 추가합니다.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: alpine:latest
    command: sleep infinity

docker-compose.yml 파일은 nginx 이미지를 사용하는 web 서비스와 alpine 이미지를 사용하는 app 서비스를 정의합니다. web 서비스는 호스트의 포트 80 을 컨테이너의 포트 80 에 매핑합니다. app 서비스는 컨테이너를 계속 실행하기 위해 sleep infinity 명령을 실행합니다.

파일을 저장하고 편집기를 종료합니다 (Ctrl+X, Y, Enter).

이제 필요한 이미지를 가져오겠습니다.

docker pull nginx:latest
docker pull alpine:latest

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

다음으로, docker-compose.yml 파일에 정의된 서비스를 시작합니다. ~/project 디렉토리에 있는지 확인하십시오.

cd ~/project
docker-compose up -d

docker-compose up -d 명령어는 서비스를 위해 컨테이너를 빌드, 생성, 시작 및 연결합니다. -d 플래그는 컨테이너를 분리된 모드 (detached mode) 로 실행합니다. 즉, 백그라운드에서 실행됩니다.

이제 컨테이너가 실행 중이므로 docker compose ps를 사용하여 컨테이너를 나열할 수 있습니다.

docker-compose ps

이 명령어는 docker-compose.yml 파일에 정의된 실행 중인 컨테이너를 나열합니다. 컨테이너 이름, 명령, 상태 및 포트를 표시하는 다음과 유사한 출력을 볼 수 있습니다.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 running
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

출력은 project-app-1project-web-1 컨테이너가 실행 중임을 보여줍니다. NAME은 일반적으로 프로젝트 이름 (디렉토리 이름) 다음에 서비스 이름과 숫자가 붙습니다.

중지된 컨테이너를 포함한 모든 컨테이너 목록 확인

이전 단계에서는 docker compose ps를 사용하여 실행 중인 컨테이너만 나열했습니다. 때로는 중지되거나 종료된 컨테이너를 포함한 모든 컨테이너를 확인해야 할 수 있습니다.

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

먼저, -a 플래그의 효과를 확인하기 위해 실행 중인 컨테이너 중 하나를 중지해 보겠습니다. app 서비스를 중지합니다. ~/project 디렉토리에 있는지 확인하십시오.

cd ~/project
docker-compose stop app

이 명령어는 app 서비스의 컨테이너를 중지합니다. 컨테이너는 더 이상 실행되지 않지만 여전히 존재합니다.

이제 docker compose ps를 사용하여 컨테이너를 다시 나열해 보겠습니다.

docker-compose ps

web 컨테이너만 실행 중으로 나열되는 것을 볼 수 있습니다. app 컨테이너는 중지되었기 때문에 표시되지 않습니다.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

이제 -a 플래그를 사용하여 중지된 컨테이너를 포함한 모든 컨테이너를 나열해 보겠습니다.

docker-compose ps -a

이 명령어는 상태에 관계없이 docker-compose.yml 파일에 정의된 모든 컨테이너를 표시합니다.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 exited (0)
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

project-app-1project-web-1 컨테이너가 모두 나열된 것을 볼 수 있습니다. project-app-1STATUS 열은 exited를 표시하여 중지되었음을 나타냅니다.

docker compose ps -a를 사용하면 현재 활성 상태가 아니더라도 모든 서비스의 상태를 확인하는 데 유용합니다.

상태별 컨테이너 필터링

이전 단계에서는 실행 중인 컨테이너와 모든 컨테이너를 나열하는 방법을 배웠습니다. 때로는 상태를 기준으로 컨테이너 목록을 필터링해야 할 수 있습니다.

docker compose ps 명령을 사용하면 --filter 플래그를 사용하여 출력을 필터링할 수 있습니다. 컨테이너 상태를 포함한 다양한 기준에 따라 필터링할 수 있습니다.

일반적인 컨테이너 상태는 다음과 같습니다.

  • created: 컨테이너가 생성되었지만 시작되지 않았습니다.
  • restarting: 컨테이너가 다시 시작되는 중입니다.
  • running: 컨테이너가 현재 실행 중입니다.
  • removing: 컨테이너가 제거되는 중입니다.
  • paused: 컨테이너가 일시 중지되었습니다.
  • exited: 컨테이너가 중지되었습니다.
  • dead: 컨테이너가 죽었습니다.

실행 중인 컨테이너만 표시하도록 컨테이너를 필터링해 보겠습니다. 기본적으로 docker compose ps가 실행 중인 컨테이너를 표시한다는 것을 이미 알고 있지만, 필터를 사용하여 동일한 결과를 얻을 수 있습니다. ~/project 디렉토리에 있는지 확인하십시오.

cd ~/project
docker-compose ps --filter status=running

이 명령어는 상태가 running인 컨테이너만 나열합니다. web 컨테이너만 나열되는 것을 볼 수 있습니다.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

이제 중지된 컨테이너만 표시하도록 컨테이너를 필터링해 보겠습니다. 이전 단계에서 app 컨테이너를 중지했으므로 상태가 exited여야 합니다.

docker-compose ps --filter status=exited

이 명령어는 상태가 exited인 컨테이너만 나열합니다. app 컨테이너만 나열되는 것을 볼 수 있습니다.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 exited (0)

--filter 플래그를 여러 번 제공하여 여러 상태로 필터링할 수도 있습니다. 예를 들어, 실행 중이거나 종료된 컨테이너를 나열하려면 다음과 같이 합니다.

docker-compose ps --filter status=running --filter status=exited

이 명령어는 webapp 컨테이너를 모두 나열합니다.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 exited (0)
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

상태별 필터링은 특정 상태의 컨테이너를 빠르게 찾는 강력한 방법이며, 서비스 디버깅 및 관리에 매우 유용합니다.

출력을 JSON 형식으로 지정

이전 단계에서는 docker compose ps를 사용하여 컨테이너를 나열하고 필터링했습니다. 기본적으로 출력은 사람이 읽기 쉬운 테이블 형식으로 지정됩니다. 그러나 스크립팅 또는 다른 도구와의 통합을 위해 JSON 과 같은 구조화된 형식으로 출력이 필요할 수 있습니다.

docker compose ps 명령을 사용하면 --format 플래그를 사용하여 출력을 형식화할 수 있습니다. json을 포함한 다양한 형식을 지정할 수 있습니다.

모든 컨테이너 (실행 중 및 중지됨) 를 나열하고 출력을 JSON 형식으로 지정해 보겠습니다. ~/project 디렉토리에 있는지 확인하십시오.

cd ~/project
docker-compose ps -a --format json

이 명령어는 모든 컨테이너에 대한 정보를 JSON 형식으로 출력합니다. 출력은 각 요소가 컨테이너와 해당 세부 정보를 나타내는 JSON 배열이 됩니다.

[
  {
    "ID": "...",
    "Name": "project-app-1",
    "Image": "alpine:latest",
    "Command": "sleep infinity",
    "Project": "project",
    "Service": "app",
    "Created": "...",
    "State": "exited",
    "Status": "Exited (0) ...",
    "Health": "",
    "ExitCode": 0,
    "Publishers": []
  },
  {
    "ID": "...",
    "Name": "project-web-1",
    "Image": "nginx:latest",
    "Command": "/docker-entrypoint.sh nginx -g 'daemon off;'",
    "Project": "project",
    "Service": "web",
    "Created": "...",
    "State": "running",
    "Status": "Up ...",
    "Health": "",
    "ExitCode": null,
    "Publishers": [
      {
        "URL": "0.0.0.0",
        "TargetPort": 80,
        "PublishedPort": 80,
        "Protocol": "tcp"
      }
    ]
  }
]

JSON 출력은 컨테이너 정보의 구조화된 표현을 제공하여 프로그래밍 방식으로 쉽게 구문 분석하고 처리할 수 있습니다. 각 컨테이너는 ID, Name, Image, State, Status 등과 같은 필드가 있는 JSON 객체로 표시됩니다.

자동화 또는 보고 목적으로 컨테이너에 대한 특정 정보를 추출해야 할 때 --format json 플래그를 사용하는 것이 특히 유용합니다.

마지막으로, 이 랩에서 생성한 컨테이너를 정리해 보겠습니다.

docker-compose down

이 명령어는 docker-compose up으로 생성된 컨테이너, 네트워크 및 볼륨을 중지하고 제거합니다.

요약

이 랩에서는 docker compose ps 명령을 사용하여 Docker Compose 로 관리되는 컨테이너를 나열하는 방법을 배웠습니다. Docker Compose 를 설치하고 설치를 확인하는 것으로 시작했습니다. 그런 다음 두 개의 서비스를 정의하는 간단한 docker-compose.yml 파일을 생성하고 필요한 이미지를 가져왔습니다. docker-compose up -d를 사용하여 분리 모드에서 서비스를 시작했습니다.

그런 다음 docker compose ps 명령을 탐색하여 실행 중인 컨테이너를 나열했습니다. -a 플래그를 사용하여 출력에 중지된 컨테이너를 포함하고, --filter status=<status> 옵션을 사용하여 상태별로 컨테이너를 필터링하고, --format json 옵션을 사용하여 출력을 JSON 형식으로 지정하는 방법을 배웠습니다. 마지막으로, docker-compose down을 사용하여 서비스를 중지하고 제거하여 생성된 리소스를 정리했습니다.