도커 환경을 운영하다 보면 단순히 컨테이너를 실행하고 종료하는 것을 넘어, 현재 시스템 내부에서 어떤 일이 벌어지고 있는지, 리소스는 얼마나 사용되고 있는지 파악해야 할 때가 있다.
특히 다수의 컨테이너를 관리하거나 성능 최적화가 필요할 때 모니터링은 필수다.
도커 기본 모니터링 명령어(events, stats, system)와 구글이 만든 컨테이너 모니터링 도구인 cAdvisor를 활용하는 방법을 알아보자.
1. 실시간 이벤트 스트림 확인: docker events
도커 데몬은 컨테이너의 생성, 시작, 정지, 삭제 등 모든 생명주기 변경 사항을 '이벤트(Event)'로 처리한다.
docker events 명령어는 이러한 이벤트를 실시간 스트림으로 보여주는 도구로, 윈도우 서버의 '이벤트 뷰어'와 유사한 역할을 한다.
docker events
이 명령어를 실행한 상태에서 다른 터미널을 열어 컨테이너를 조작하면 다음과 같은 로그가 실시간으로 출력된다.
2026-01-07T20:11:19.537... container create ... (image=ubuntu:16.04, name=comm_test3)
2026-01-07T20:11:19.540... container attach ...
2026-01-07T20:11:19.573... network connect ... (type=bridge)
2026-01-07T20:11:19.753... container start ...
2026-01-07T20:11:19.912... container die ... (exitCode=0, ...)
위 로그를 분석해보면 컨테이너의 생명주기가 명확히 보인다.
- create: 컨테이너가 생성됨.
- attach: 터미널이 컨테이너에 붙음.
- network connect: 브리지 네트워크에 할당됨.
- start: 프로세스가 시작됨.
- die: 프로세스가 종료됨 (exitCode=0은 정상 종료를 의미).
이 명령어는 자동화 스크립트를 짤 때 특정 컨테이너가 정상적으로 떴는지, 혹은 비정상적으로 죽었는지(OOMKilled 등)를 트리거링하여 모니터링 시스템을 구축할 때 유용하다.

2. 실시간 리소스 사용량 확인: docker stats
시스템 리소스(CPU, Memory, Network I/O, Block I/O)는 한정되어 있다.
특정 컨테이너가 자원을 독점하지 않는지 확인하기 위해 docker stats를 사용한다.
이는 리눅스의 top 명령어와 유사하다.
docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
f7356448d503 my-web-1 0.00% 9.488MiB / 7.741GiB 0.12% 2.45kB / 0B 14.2MB / 8.19kB 3
b6bd365d4857 myregistry 0.06% 5.664MiB / 7.741GiB 0.07% 22kB / 13.7kB 172kB / 73.7kB 9
- CPU %: 호스트 CPU 대비 컨테이너가 사용하는 비율.
- MEM USAGE / LIMIT: 실제 사용 메모리 / 컨테이너에 할당된 메모리 제한(제한이 없으면 호스트 전체 메모리).
- NET I/O: 네트워크 수신/송신 데이터량. 트래픽 과부하를 진단할 때 중요.
- BLOCK I/O: 디스크 읽기/쓰기 데이터량. DB 컨테이너 등의 성능 저하 원인을 찾을 때 유용.
3. 디스크 사용량 및 정리: docker system
도커를 오래 사용하다 보면 사용하지 않는 이미지(dangling images), 중지된 컨테이너, 불필요한 볼륨 등이 디스크 공간을 차지하게 된다.
이를 관리하는 명령어가 docker system이다.
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 11 9 441.8MB 413.3MB (93%)
Containers 12 2 7.563kB 6.468kB (85%)
Local Volumes 10 1 804.7MB 804.7MB (99%)
Build Cache 24 0 3.246kB 3.246kB
- RECLAIMABLE: 지금 당장 삭제해도 되는(사용 중이지 않은) 리소스의 양이다. 위 결과에서는 이미지가 93%, 볼륨이 99%나 낭비되고 있음을 알 수 있다.
- 이럴 때는 docker system prune 명령어를 통해 불필요한 데이터를 일괄 삭제하여 디스크 공간을 확보해야 한다.
4. 시각화된 모니터링 도구: cAdvisor
CLI는 직관적이지 않을 때가 있다. 구글에서 만든 cAdvisor(Container Advisor)는 컨테이너 형태로 실행되어 호스트와 다른 컨테이너들의 상태를 웹 UI로 보여주는 도구다.
cAdvisor는 호스트의 시스템 정보를 읽어야 하므로 실행 옵션이 다소 복잡하다.
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
cAdvisor가 단순한 격리된 컨테이너가 아니라, '모니터링 에이전트'로서 동작하기 위해서는 호스트의 핵심 디렉토리에 접근해야 한다.
명령어 (Volume 마운트)
- -v /:/rootfs:ro : 호스트의 루트 파일 시스템을 읽기 전용(read-only)으로 마운트하여 파일 시스템 사용량을 분석한다.
- -v /var/run:/var/run:ro : 도커 데몬의 소켓 등에 접근하여 도커 시스템 정보를 얻는다.
- -v /sys:/sys:ro : 리눅스 커널의 시스템 정보(cgroup 등)를 읽어 CPU, 메모리 통계를 수집한다.
- -v /var/lib/docker/:/var/lib/docker:ro : 도커 이미지와 컨테이너가 저장된 실제 경로를 분석한다.
이미지 다운로드 및 컨테이너 실행 후, 웹 브라우저를 통해 접속한다.
# 이미지 목록 확인
docker images | grep cadvisor
# 웹 접속
firefox http://localhost:8080/containers

cAdvisor 아키텍처

5. 정리
- 이벤트 추적: docker events로 컨테이너의 생명주기 변화를 실시간으로 감지한다.
- 리소스 감시: docker stats로 현재 실행 중인 컨테이너의 CPU, 메모리 부하를 확인한다.
- 디스크 관리: docker system df로 낭비되는 디스크 공간을 확인하고 관리한다.
- 시각화: 단일 호스트 환경에서는 cAdvisor가 훌륭한 시각화 도구이다.
단, cAdvisor는 단일 호스트 모니터링에 특화되어 있다.
만약 쿠버네티스(Kubernetes)와 같은 클러스터 환경이나 다중 호스트 환경을 운영한다면, cAdvisor에서 수집한 데이터를 통합해서 보여주는 Prometheus와 Grafana 같은 도구로 확장하는 것이 일반적이다.
'AI Journey > 클라우드' 카테고리의 다른 글
| [Docker] Nginx 로그를 Fluentd를 통해 MongoDB에 저장하기 (중앙 집중형 로그 관리) (0) | 2026.01.12 |
|---|---|
| [k8s] NestJS 앱을 도커라이징해서 Pod로 띄우기 (0) | 2026.01.11 |
| [Docker] 파이썬 코드로 도커 제어하기: Docker SDK 활용 기초 (0) | 2026.01.08 |
| [Docker] 이미지 커밋(commit)과 Docker Hub 공유(push) (0) | 2026.01.07 |
| [Docker] Private Registry 구축 및 이미지 배포 워크플로우 (0) | 2026.01.07 |