docker compose top 명령어를 사용하여 실행 중인 프로세스 표시 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker compose top 명령어를 사용하여 Docker 컨테이너 내에서 실행 중인 프로세스를 표시하는 방법을 배우게 됩니다. 먼저, 서비스를 정의하기 위해 간단한 docker-compose.yml 파일을 준비한 다음, Docker Compose 를 사용하여 서비스를 시작합니다. 마지막으로, docker compose top 명령어를 일반적인 방식으로 사용하고 특정 서비스 이름과 함께 사용하여 컨테이너 내부에서 실행 중인 프로세스를 검사합니다.

간단한 docker-compose.yml 파일 준비

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

Docker Compose 는 LabEx 환경에 미리 설치되어 있지 않으므로 먼저 설치해야 합니다. 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 가 설치되었으므로 ~/project 디렉토리에 간단한 docker-compose.yml 파일을 생성해 보겠습니다. 이 파일은 ubuntu 이미지를 사용하고 단순히 sleep infinity 명령을 실행하여 컨테이너를 계속 실행하는 단일 서비스를 정의합니다.

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

nano ~/project/docker-compose.yml

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

version: "3.8"
services:
  ubuntu_service:
    image: ubuntu
    command: sleep infinity

docker-compose.yml 파일을 자세히 살펴보겠습니다.

  • version: '3.8'은 Compose 파일 형식 버전을 지정합니다.
  • services:는 애플리케이션의 서비스를 정의합니다.
  • ubuntu_service:는 서비스의 이름입니다. 원하는 이름을 선택할 수 있습니다.
  • image: ubuntu는 이 서비스에 사용할 Docker 이미지를 지정합니다. 이 경우 공식 ubuntu 이미지를 사용합니다. 이미지가 로컬에 없을 수 있으므로 Docker Compose 는 필요한 경우 자동으로 이미지를 가져옵니다.
  • command: sleep infinity는 컨테이너가 시작될 때 실행할 명령을 지정합니다. sleep infinity는 컨테이너를 무한정 실행 상태로 유지하는 간단한 명령입니다.

내용을 붙여넣은 후 Ctrl + X를 누르고, 확인을 위해 Y를 누른 다음, Enter를 눌러 기본 파일 이름 docker-compose.yml로 파일을 저장합니다.

ubuntu 이미지를 사용할 수 있도록 하기 위해 docker pull 명령을 사용하여 수동으로 가져오겠습니다. Docker Compose 로 서비스를 시작하기 전에 이미지가 준비되었는지 확인하는 것이 좋습니다.

docker pull ubuntu

ubuntu 이미지를 가져오는 것을 나타내는 출력을 볼 수 있습니다.

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

이 단계에서는 이전 단계에서 생성한 docker-compose.yml 파일에 정의된 서비스를 시작합니다. 이를 위해 docker compose up 명령어를 사용합니다.

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

cd ~/project

이제 docker compose up 명령어를 실행합니다. -d 플래그는 컨테이너를 분리된 모드 (detached mode) 로 실행합니다. 즉, 컨테이너가 백그라운드에서 실행되며 터미널을 차단하지 않습니다.

docker compose up -d

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

컨테이너가 실행 중인지 확인하려면 docker ps 명령어를 사용할 수 있습니다.

docker ps

ubuntu 이미지를 사용하고 sleep infinity 명령을 실행하는 컨테이너가 나열되어야 합니다. 상태는 Up이어야 합니다. 컨테이너 이름은 디렉토리 이름 (project의 경우) 과 서비스 이름 (ubuntu_service) 으로 시작합니다.

docker compose top 명령어를 사용하여 실행 중인 모든 프로세스 표시

이 단계에서는 docker compose top 명령어를 사용하여 Docker Compose 가 관리하는 컨테이너 내에서 실행 중인 프로세스를 표시합니다. 이 명령어는 Linux 의 top 명령어와 유사하지만, 컨테이너 내부에서 실행 중인 프로세스를 보여줍니다.

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

cd ~/project

이제 docker compose top 명령어를 실행합니다.

docker compose top

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

ID                  NAME                PID                 COMMAND             ELAPSED
<container_id>      project-ubuntu_service-1   <pid>               sleep infinity      <time>

이 출력은 docker-compose.yml 파일에 의해 관리되는 각 컨테이너 내에서 실행 중인 프로세스를 보여줍니다. 이 경우, 하나의 서비스 (ubuntu_service) 만 있으며, 실행 중인 유일한 프로세스는 sleep infinity입니다. 이는 docker-compose.yml 파일에서 지정한 명령어입니다.

출력에는 다음이 포함됩니다.

  • ID: 컨테이너 ID.
  • NAME: 컨테이너 이름으로, 일반적으로 <directory_name>-<service_name>-<instance_number> 형식입니다.
  • PID: 컨테이너 내부에서 실행 중인 명령의 프로세스 ID.
  • COMMAND: 컨테이너 내부에서 실행되는 명령어.
  • ELAPSED: 명령이 시작된 이후 경과된 시간.

이 명령어는 컨테이너 내부에서 무엇이 실행되고 있는지 검사하고 문제를 해결하는 데 유용합니다.

docker compose top 과 서비스 이름을 사용하여 특정 프로세스 표시

이 단계에서는 docker compose top 명령어를 사용하여 docker-compose.yml 파일에 정의된 특정 서비스의 프로세스를 표시하는 방법을 배웁니다. 이는 여러 서비스가 실행 중이고 그 중 하나의 프로세스만 검사하려는 경우 유용합니다.

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

cd ~/project

특정 서비스의 프로세스를 표시하려면 서비스 이름을 docker compose top 명령어에 추가합니다. docker-compose.yml 파일에서 서비스 이름은 ubuntu_service입니다.

docker compose top ubuntu_service

이전 단계와 유사한 출력을 볼 수 있지만, 이번에는 ubuntu_service 컨테이너의 프로세스만 표시됩니다.

ID                  NAME                PID                 COMMAND             ELAPSED
<container_id>      project-ubuntu_service-1   <pid>               sleep infinity      <time>

docker-compose.yml 파일에 다른 서비스가 정의되어 있고 실행 중인 경우, 서비스 이름 없이 docker compose top을 실행하면 모든 서비스의 프로세스가 표시됩니다. ubuntu_service를 지정하면 해당 특정 서비스의 컨테이너 내 프로세스만 표시하도록 출력을 필터링합니다.

이러한 대상 접근 방식은 다중 컨테이너 애플리케이션의 개별 구성 요소를 디버깅하고 모니터링하는 데 유용합니다.

요약

이 랩에서는 docker compose top 명령어를 사용하여 Docker Compose 가 관리하는 Docker 컨테이너 내에서 실행 중인 프로세스를 표시하는 방법을 배웠습니다. 먼저 Docker Compose 를 설치하고 컨테이너를 계속 실행하기 위해 sleep infinity 명령을 사용하여 ubuntu 이미지를 사용하는 서비스를 정의하는 간단한 docker-compose.yml 파일을 준비했습니다.

준비 후, docker-compose.yml 파일에 정의된 서비스를 시작했습니다. 마지막으로, docker compose top 명령어의 사용법을 탐구했습니다. 먼저 모든 서비스에서 실행 중인 모든 프로세스를 표시하고, 그런 다음 서비스 이름을 제공하여 단일 서비스에 대해 구체적으로 표시했습니다. 이 실습을 통해 Docker Compose 가 관리하는 컨테이너 내부에서 실행 중인 프로세스를 검사하는 방법을 보여주었습니다.