공부

Docker Compose 및 컨테이너 모니터링, 로깅

KimMZ 2025. 2. 11. 14:56
앞으로, 학습한 내용이나 트러블 슈팅 등에 대해 정리해보겠습니다!

- 어떤 문제가 혹은 어떤 오류들이 있었는지
- 내가 시도해본 것들
- 어떻게 해결했는지
- 뭘 새롭게 알았는지

 

우선,

컨테이너 관리(Docker Compose)컨테이너 모니터링컨테이너 로깅에 대해 알아보자.

Dockerfile

앱을 컨테이너로 만들 때 이미지를 만드는 용도로 사용함
dockerfile를 build하여 docker image를 만들고, 이를 run하여 docker cotainer를 생성

 

1. Docker Compose 사용

 

GitHub - nbcdocker/spring-boot-sample

Contribute to nbcdocker/spring-boot-sample development by creating an account on GitHub.

github.com

    • 프로젝트 clone
cd ~
git clone https://github.com/nbcdocker/spring-boot-sample
  • Windows에서 Docker Desktop 실행
    : 실행하지 않고 docker-compose 실행하면 Docker Compose 설정과 Docker 데몬과의 연결 문제 발생
unable to get image 'nginx:latest': error during connect: Get "http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.47/images/nginx:latest/json": open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.
  • docker-compose 실행
cd ~/spring-boot-sample
docker-compose up -d
docker-compose logs -f
  • -d : detached 모드, 컨테이너를 백그라운드에서 실행하여 터미널을 다른 작업에 사용할 수 있음 
  • -f : follow, 로그를 실시간 출력, 로그 업데이트마다 새로운 로그 항목 출력

 

docker-compose down

 

 

2. Docker 모니터링 사용

  - Docker Stats

  • Docker에서 제공하는 모니터링 도구로, 컨테이너 ID, 이름, CPU 사용률, 메모리 사용량, 네트워크 I/O, 디스크 I/O 등 여러 정보 확인 가능하다.
  • ubuntu22.02 terminal를 실행시키고 생성되어 있는 계정으로 로그인 및 비밀번호 입력
login minji

docker stats
exit

 

  - htop

  • 리눅스 시스템을 모니터링하는 도구로, 사용하기 편함
  • 주요 기능 : 실시간 모니터링, 프로세스 관리, 사용자 친화 인터페이스
  • 사용법
# 새로운 컨테이너 생성 및 실행
# -t: 가상 터미널 할당
# -i: 표준 입력 활성화
# ubuntu:22.04 : 사용할 docker 이미지 지정
docker run --name test-tools -ti -d ubuntu:22.04

# 이미 실행 중인 컨테이너 실행, 컨테이너 내 명령어 입력 환경 제공
docker exec -ti test-tools /bin/bash
apt update; apt upgrade -y; apt install htop -y;
htop
exit # OR F10 종료 가능
  • apt: 리눅스에서 패키지 관리 도구
  • -y 옵션: 사용자에게 확인 요청없이 자동으로 모든 변경사항 적용

 

 

3. Container 로깅

: Docker는 모든 컨테이너 로그의 출력과 에러를 캡쳐하여 json-file 로깅 드라이버를 사용하여 json 형식 파일로 기록

# --rm : 컨테이너 중지되면 자동 삭제
# 매초 현재날짜와 시간 출력
docker run --name logs-test --rm -d ubuntu:22.04 /bin/bash -c 'while true; do date; sleep 1; done'

docker logs logs-test
docker logs -f logs-test