docker compose events 명령을 사용하여 컨테이너 이벤트 모니터링 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker compose events 명령을 사용하여 컨테이너 이벤트를 모니터링하는 방법을 배우게 됩니다. 먼저 Docker Compose 프로젝트를 간단하게 준비하는 것으로 시작하여 Docker Compose 를 설치하고 기본적인 docker-compose.yml 파일을 생성합니다.

설정이 완료되면 프로젝트에 정의된 서비스를 시작하고 생성된 기본 이벤트를 관찰합니다. 그런 다음, --json 플래그를 사용하여 이러한 이벤트를 구조화된 JSON 형식으로 출력하는 방법을 살펴봅니다. 마지막으로, Docker Compose 애플리케이션 내의 특정 서비스와 관련된 이벤트만 모니터링하도록 이벤트를 필터링하는 방법을 배우게 됩니다.

간단한 Docker Compose 프로젝트 준비

이 단계에서는 간단한 Docker Compose 프로젝트를 준비합니다. LabEx 환경에는 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 ~/project/my-compose-app
cd ~/project/my-compose-app

다음으로, 이 디렉토리에 docker-compose.yml 파일을 생성합니다. 이 파일은 서비스를 정의합니다. nano 편집기를 사용하여 파일을 생성하고 편집합니다.

nano docker-compose.yml

nano 편집기에서 다음 내용을 붙여넣습니다. 이 구성은 nginx:latest 이미지를 사용하는 web이라는 서비스를 정의합니다.

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

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

  • 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 nginx:latest

이미지가 가져와지고 다운로드되는 것을 나타내는 출력을 볼 수 있습니다.

이제 docker-compose.yml 파일이 준비되었고 필요한 이미지가 가져와졌습니다. 다음 단계에서는 이 파일에 정의된 서비스를 시작합니다.

서비스 시작 및 기본 이벤트 관찰

이 단계에서는 docker-compose.yml 파일에 정의된 서비스를 시작하고 Docker 에서 생성된 기본 이벤트를 관찰합니다. Docker 이벤트는 컨테이너 생성, 시작, 중지 및 삭제와 같이 Docker 데몬 및 컨테이너에서 발생하는 일에 대한 실시간 정보입니다.

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

cd ~/project/my-compose-app

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

docker-compose up -d

네트워크와 web 서비스 컨테이너가 생성되고 시작되는 것을 나타내는 출력을 볼 수 있습니다.

[+] Running 2/2
 ⠿ Network my-compose-app_default  Created
 ⠿ Container my-compose-app-web-1  Started

기본 Docker 이벤트를 관찰하기 위해 docker events 명령을 사용합니다. 이 명령은 Docker 데몬에서 이벤트를 스트리밍합니다.

docker events

Docker 환경과 관련된 이벤트가 지속적으로 스트리밍되는 것을 볼 수 있습니다. 방금 컨테이너를 시작했으므로 my-compose-app-web-1 컨테이너와 관련된 생성, 시작 및 잠재적으로 다른 작업과 관련된 이벤트를 볼 수 있습니다. 출력은 다음과 유사합니다 (타임스탬프 및 특정 세부 정보는 다를 수 있음).

2023-10-27T10:00:00.123456789Z container create 1234567890abcdef... (image=nginx:latest, name=my-compose-app-web-1, ...)
2023-10-27T10:00:01.987654321Z container start 1234567890abcdef... (image=nginx:latest, name=my-compose-app-web-1, ...)
...

docker events 명령은 계속 실행되며 새로운 이벤트가 발생할 때마다 표시합니다. 명령을 중지하고 터미널 프롬프트로 돌아가려면 Ctrl + C를 누르십시오.

docker ps 명령을 사용하여 실행 중인 컨테이너를 관찰할 수도 있습니다.

docker ps

my-compose-app-web-1 컨테이너가 Up 상태로 나열되는 것을 볼 수 있습니다.

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                               NAMES
...            nginx:latest   "nginx -g 'daemon off"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp   my-compose-app-web-1

이 단계에서는 Docker Compose 서비스를 성공적으로 시작하고 Docker 에서 생성된 기본 이벤트를 관찰했습니다. 다음 단계에서는 이러한 이벤트를 JSON 형식으로 출력하는 방법을 살펴봅니다.

--json 플래그를 사용하여 JSON 형식으로 이벤트 출력

이 단계에서는 docker events 명령과 함께 --json 플래그를 사용하여 Docker 이벤트를 JSON 형식으로 출력하는 방법을 배웁니다. JSON 형식으로 이벤트를 출력하는 것은 프로그래밍 방식으로 처리하고 다른 도구와 통합하는 데 유용합니다.

먼저, ~/project/my-compose-app 디렉토리에 있는지 확인합니다.

cd ~/project/my-compose-app

이제 --json 플래그와 함께 docker events 명령을 실행해 보겠습니다. 이렇게 하면 JSON 형식으로 이벤트를 스트리밍합니다.

docker events --json

각 객체가 Docker 이벤트를 나타내는 JSON 객체의 연속적인 스트림을 볼 수 있습니다. 출력은 다음과 유사합니다 (세부 정보는 다를 수 있음).

{"status":"create","id":"1234567890abcdef...","from":"nginx:latest","Type":"container","Action":"create","Actor":{"ID":"1234567890abcdef...","Attributes":{"image":"nginx:latest","name":"my-compose-app-web-1"}},"scope":"local","time":1678886400,"timeNano":1678886400123456789}
{"status":"start","id":"1234567890abcdef...","from":"nginx:latest","Type":"container","Action":"start","Actor":{"ID":"1234567890abcdef...","Attributes":{"image":"nginx:latest","name":"my-compose-app-web-1"}},"scope":"local","time":1678886401,"timeNano":1678886401987654321}
...

각 줄은 이벤트 status, 영향을 받는 객체의 id, Type, Action 및 이미지 이름 및 컨테이너 이름과 같은 Attributes를 포함한 Actor 세부 정보와 같은 이벤트에 대한 자세한 정보를 포함하는 유효한 JSON 객체입니다.

이러한 이벤트를 캡처하는 것을 시연하기 위해 다른 터미널 또는 백그라운드에서 docker events --json 명령이 실행되는 동안 web 서비스를 중지한 다음 다시 시작해 보겠습니다. 이 랩에서는 단일 터미널을 사용하므로 먼저 Ctrl + C를 눌러 docker events --json 명령을 중지합니다.

이제 web 서비스를 중지해 보겠습니다.

docker-compose stop web

web 컨테이너가 중지되고 있음을 나타내는 출력을 볼 수 있습니다.

[+] Stopping 1/1
 ⠿ Container my-compose-app-web-1  Stopped

이제 백그라운드에서 docker events --json을 실행한 다음 서비스를 다시 시작해 보겠습니다. & 기호를 사용하여 명령을 백그라운드에서 실행합니다.

docker events --json &

명령이 백그라운드에서 실행되고 있음을 나타내는 프로세스 ID (PID) 가 출력됩니다.

이제 web 서비스를 다시 시작합니다.

docker-compose start web

web 컨테이너가 시작되고 있음을 나타내는 출력을 볼 수 있습니다.

[+] Starting 1/1
 ⠿ Container my-compose-app-web-1  Started

백그라운드에서 실행되는 docker events --json 명령은 stopstart 이벤트를 캡처합니다. 백그라운드 프로세스의 출력을 보려면 fg 명령을 사용하여 포그라운드로 가져오거나 백그라운드 프로세스가 중지된 후 터미널 출력을 확인해야 할 수 있습니다. 그러나 이 단계의 목적을 위해 --json으로 명령을 실행하는 것만으로도 형식을 이해하는 데 충분합니다.

백그라운드 docker events --json 프로세스를 중지하려면 jobs 명령을 사용하여 백그라운드 작업을 나열한 다음 kill %<job_number>를 사용할 수 있습니다. 또는 ps aux | grep 'docker events --json'을 사용하여 프로세스 ID 를 찾고 PID 와 함께 kill 명령을 사용할 수 있습니다. 이 컨텍스트에서 더 간단한 방법은 백그라운드 프로세스가 크게 간섭하지 않으므로 다음 단계로 진행하는 것입니다.

이 단계에서는 자동화 및 분석에 유용한 구조화된 JSON 형식으로 Docker 이벤트를 보기 위해 --json 플래그를 성공적으로 사용했습니다.

특정 서비스에 대한 이벤트 필터링

이 단계에서는 특정 서비스 또는 컨테이너와 관련된 이벤트만 표시하도록 Docker 이벤트를 필터링하는 방법을 배웁니다. 이는 특정 애플리케이션 또는 서비스에 대한 이벤트만 모니터링하려는 많은 컨테이너가 있는 환경에서 매우 유용합니다.

docker events 명령은 --filter 플래그를 사용하여 필터링을 지원합니다. container, image, event, label 등과 같은 다양한 기준에 따라 필터링할 수 있습니다.

먼저, ~/project/my-compose-app 디렉토리에 있는지 확인합니다.

cd ~/project/my-compose-app

docker-compose.yml 파일에서 서비스 이름은 web이며, Docker Compose 에서 생성된 컨테이너 이름은 일반적으로 <project_name>_<service_name>_<instance_number> 형식입니다. 이 경우 프로젝트 이름은 my-compose-app (디렉토리 이름에서 파생됨), 서비스 이름은 web이고 인스턴스 번호는 1입니다. 따라서 컨테이너 이름은 my-compose-app-web-1입니다.

web 컨테이너와 관련된 이벤트만 표시하도록 이벤트를 필터링해 보겠습니다. 컨테이너 이름과 함께 container 필터를 사용할 수 있습니다.

docker events --filter container=my-compose-app-web-1

이제 이 명령은 영향을 받는 객체가 my-compose-app-web-1이라는 컨테이너인 이벤트만 표시합니다. 이를 실제로 확인하기 위해 이 명령이 실행되는 동안 web 서비스를 중지하고 다시 시작해 보겠습니다.

먼저, Ctrl + C를 눌러 docker events 명령을 중지합니다.

이제 필터링된 docker events 명령을 백그라운드에서 실행합니다.

docker events --filter container=my-compose-app-web-1 &

백그라운드 프로세스 ID 가 표시됩니다.

이제 Docker Compose 를 사용하여 web 서비스를 중지합니다.

docker-compose stop web

컨테이너가 중지되고 있음을 나타내는 출력을 볼 수 있습니다. 백그라운드 docker events 명령은 my-compose-app-web-1 컨테이너에 대한 stop 이벤트를 캡처해야 합니다.

다음으로, web 서비스를 다시 시작합니다.

docker-compose start web

컨테이너가 시작되고 있음을 나타내는 출력을 볼 수 있습니다. 백그라운드 docker events 명령은 my-compose-app-web-1 컨테이너에 대한 start 이벤트를 캡처해야 합니다.

다른 기준에 따라 필터링할 수도 있습니다. 예를 들어, 이미지별로 이벤트를 필터링하려면 --filter image=nginx:latest를 사용할 수 있습니다.

백그라운드 docker events 프로세스를 중지하려면 jobskill %<job_number>를 사용하거나 PID 를 찾아서 kill <PID>를 사용할 수 있습니다. 이 랩에서는 단순히 진행할 수 있습니다.

마지막으로, Docker Compose 에서 생성된 실행 중인 컨테이너와 네트워크를 정리해 보겠습니다.

docker-compose down

이 명령은 docker-compose.yml 파일에 정의된 컨테이너, 네트워크 및 볼륨을 중지하고 제거합니다.

[+] Running 2/1
 ⠿ Container my-compose-app-web-1  Removed
 ⠿ Network my-compose-app_default  Removed

이 단계에서는 바쁜 Docker 환경에서 특정 구성 요소를 모니터링하는 데 필수적인 --filter 플래그를 사용하여 Docker 이벤트를 필터링하는 방법을 배웠습니다. 또한 랩 중에 생성된 리소스를 정리했습니다.

요약

이 랩에서는 docker compose events 명령을 사용하여 컨테이너 이벤트를 모니터링하는 방법을 배웠습니다. 먼저 Docker Compose 를 설치하고 기본 Nginx 서비스를 정의하는 docker-compose.yml 파일을 생성하는 등 간단한 Docker Compose 프로젝트를 준비하는 것으로 시작했습니다.

프로젝트 설정을 완료한 후 서비스를 시작하고 Docker Compose 에서 생성된 기본 이벤트를 관찰했습니다. 그런 다음, 더 쉬운 구문 분석 및 분석을 위해 --json 플래그를 사용하여 이러한 이벤트를 JSON 형식으로 출력하는 방법을 살펴보았습니다. 마지막으로, Docker Compose 프로젝트 내에서 특정 서비스와 관련된 이벤트만 모니터링하도록 이벤트를 필터링하는 방법을 배웠습니다.