분리된 Docker 컨테이너 로그 확인 방법

DockerBeginner
지금 연습하기

소개

Docker 는 애플리케이션 개발 및 배포 방식을 혁신했지만, 분리된 컨테이너의 로그를 관리하는 것은 어려울 수 있습니다. 이 튜토리얼에서는 분리된 Docker 컨테이너의 로그를 보는 방법을 안내하여 컨테이너화된 애플리케이션을 더 잘 이해하고 문제를 해결하는 데 도움을 드립니다.

Docker 컨테이너 이해

Docker 는 개발자가 컨테이너 환경에서 애플리케이션을 구축, 배포 및 실행할 수 있도록 하는 인기 있는 오픈소스 플랫폼입니다. 컨테이너는 애플리케이션 실행에 필요한 코드, 런타임, 시스템 도구 및 라이브러리 등 모든 것을 포함하는 경량의 독립 실행형 실행 가능한 소프트웨어 패키지입니다.

Docker 컨테이너란 무엇인가요?

Docker 컨테이너는 코드와 모든 종속성을 패키징하여 한 컴퓨팅 환경에서 다른 환경으로 애플리케이션이 빠르고 안정적으로 실행되도록 하는 표준화된 소프트웨어 단위입니다. 컨테이너는 컨테이너의 청사진인 Docker 이미지에서 생성됩니다. Docker 이미지는 사용자가 이미지를 조립하기 위해 명령줄에서 호출할 수 있는 모든 명령어를 포함하는 텍스트 문서인 Dockerfile 을 사용하여 구축됩니다.

graph TD A[Docker 이미지] --> B[Docker 컨테이너] B --> C[애플리케이션] B --> D[런타임] B --> E[시스템 도구] B --> F[라이브러리]

Docker 컨테이너의 장점

  • 일관성: 컨테이너는 환경에 관계없이 애플리케이션이 동일한 방식으로 실행되도록 보장합니다.
  • 이식성: Docker 가 설치된 모든 머신에서 컨테이너를 실행할 수 있으므로 애플리케이션을 한 환경에서 다른 환경으로 쉽게 이동할 수 있습니다.
  • 확장성: 컨테이너는 변화하는 요구 사항에 맞춰 쉽게 확장하거나 축소할 수 있습니다.
  • 효율성: 컨테이너는 경량이며 기존 가상 머신보다 적은 리소스를 사용합니다.

Docker 아키텍처

Docker 는 Docker 클라이언트가 Docker 데몬과 통신하는 클라이언트 - 서버 아키텍처를 사용합니다. Docker 데몬은 Docker 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 구축, 실행 및 배포하는 역할을 합니다.

구성 요소 설명
Docker 클라이언트 Docker 시스템의 사용자 인터페이스입니다. 사용자가 Docker 데몬과 상호 작용할 수 있도록 합니다.
Docker 데몬 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 관리하는 백그라운드 프로세스입니다.
Docker 레지스트리 Docker 이미지의 저장 및 배포 시스템입니다. 기본 레지스트리는 Docker 에서 제공하는 공용 레지스트리인 Docker Hub 입니다.
graph LR A[Docker 클라이언트] --> B[Docker 데몬] B --> C[Docker 레지스트리] B --> D[Docker 이미지] B --> E[Docker 컨테이너]

분리된 컨테이너 로그 보기

-d 플래그를 사용하여 Docker 컨테이너를 분리된 모드로 실행하면 컨테이너는 백그라운드에서 실행되며 출력에 직접 접근할 수 없습니다. 그러나 Docker CLI 를 사용하여 분리된 컨테이너의 로그를 여전히 볼 수 있습니다.

분리된 컨테이너 로그 보기

분리된 컨테이너의 로그를 보려면 docker logs 명령어를 사용할 수 있습니다. 기본 구문은 다음과 같습니다.

docker logs [컨테이너 이름 또는 컨테이너 ID]

예를 들어, my-app이라는 분리된 컨테이너가 있다고 가정해 보겠습니다.

docker run -d --name my-app nginx

이 컨테이너의 로그를 보려면 다음 명령어를 사용할 수 있습니다.

docker logs my-app

이렇게 하면 터미널에 my-app 컨테이너의 로그가 표시됩니다.

실시간 로그 보기

분리된 컨테이너의 로그를 실시간으로 보려면 docker logs 명령어에 -f (따라가기) 플래그를 사용할 수 있습니다.

docker logs -f my-app

이렇게 하면 터미널에서 로그 출력이 열리고 컨테이너에서 생성되는 새 로그 항목이 지속적으로 표시됩니다.

로그 필터링

시간 또는 특정 로그 레벨로 로그를 필터링할 수도 있습니다. 예를 들어, 마지막 10 개의 로그 항목을 보려면 다음과 같이 합니다.

docker logs --tail 10 my-app

또는 지난 5 분 동안의 로그를 보려면 다음과 같이 합니다.

docker logs --since 5m my-app

또한 --until 플래그를 사용하여 로그 레벨로 로그를 필터링할 수 있습니다.

docker logs --until 5m my-app

이렇게 하면 지난 5 분 동안의 로그가 표시됩니다.

로그 드라이버

Docker 는 컨테이너 로그가 저장되고 관리되는 방식을 결정하는 다양한 로그 드라이버를 지원합니다. 기본 로그 드라이버는 json-file이지만 Docker 데몬 또는 개별 컨테이너에 대해 다른 로그 드라이버를 구성할 수 있습니다. 이는 외부 로그 관리 시스템과 통합하는 데 유용할 수 있습니다.

실용적인 로깅 기법

기본 docker logs 명령어 외에도 Docker 컨테이너의 로그를 관리하고 분석하는 데 사용할 수 있는 여러 실용적인 기법이 있습니다.

파일로 로깅

기본 json-file 로깅 드라이버에 의존하는 대신 호스트 시스템의 파일에 로그를 기록하도록 Docker 컨테이너를 구성할 수 있습니다. 이는 장기간 로그 저장 및 분석에 유용합니다.

파일로 로깅하려면 컨테이너를 시작할 때 --log-driver--log-opt 플래그를 사용할 수 있습니다.

docker run -d --name my-app --log-driver=local --log-opt=max-size=10m --log-opt=max-file=5 nginx

이 예제에서는 로그가 호스트 시스템의 파일에 기록되며, 최대 파일 크기는 10MB 이고 최대 로그 파일 수는 5 개입니다.

원격 시스템으로 로깅

Elasticsearch, Splunk 또는 Syslog 와 같은 원격 로깅 시스템으로 Docker 컨테이너의 로그를 전송하도록 구성할 수도 있습니다. 이는 중앙 집중식 로그 관리 및 분석에 유용합니다.

원격 시스템으로 로깅하려면 컨테이너를 시작할 때 --log-driver--log-opt 플래그를 사용할 수 있습니다.

docker run -d --name my-app --log-driver=syslog --log-opt=syslog-address=tcp://192.168.1.100:514 nginx

이 예제에서는 로그가 IP 주소 192.168.1.100의 포트 514에서 Syslog 서버로 전송됩니다.

로깅 유틸리티

Docker 로그를 더 효과적으로 관리하고 분석하는 데 도움이 되는 여러 타사 유틸리티가 있습니다. 몇 가지 인기 옵션은 다음과 같습니다.

  • Logspout: 중앙 로깅 서비스로 Docker 로그를 수집하고 전달하는 경량 컨테이너입니다.
  • Fluentd: Docker 로그를 집계하고 처리하는 데 사용할 수 있는 오픈소스 데이터 수집기입니다.
  • Graylog: Docker 로그를 흡수하고 처리할 수 있는 강력한 로그 관리 및 분석 플랫폼입니다.

이러한 도구는 로그 필터링, 경고 및 시각화와 같은 추가 기능을 제공하여 Docker 컨테이너의 로그를 더 잘 이해하고 관리하는 데 도움이 될 수 있습니다.

요약

이 종합 가이드에서는 분리된 Docker 컨테이너의 로그를 보는 방법, 실용적인 로깅 기법을 탐색하고, Docker 기반 애플리케이션을 효과적으로 관리하고 모니터링하는 데 필요한 기술을 습득하는 방법을 배웁니다. 이 튜토리얼을 마치면 Docker 로깅에 대한 확실한 이해를 갖게 되고, 다양한 로깅 시나리오를 자신감 있게 처리할 준비가 될 것입니다.