Docker 컨테이너 로그 명령어를 사용하여 컨테이너 출력 보기

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker container logs 명령어를 효과적으로 사용하여 Docker 컨테이너에서 생성된 출력을 보는 방법을 배우게 됩니다. 먼저 로그를 생성하는 간단한 컨테이너를 실행하는 것으로 시작하여, 이 출력을 검색하기 위한 docker logs의 기본 사용법을 살펴보겠습니다.

그런 다음 타임스탬프와 상세 정보를 포함하여 로그 출력을 향상시키는 방법을 배우게 됩니다. 마지막으로, 특정 시점 이후의 로그를 보거나 출력을 tailing(꼬리 자르기) 하고, 특정 시간까지의 로그를 보는 등 시간 기반으로 로그를 필터링하는 방법을 다룰 것입니다. 이 랩은 컨테이너화된 애플리케이션을 모니터링하고 디버깅하기 위한 필수적인 Docker 로깅 기술에 대한 실습 경험을 제공합니다.

로그를 생성하는 컨테이너 실행

이 단계에서는 로그를 생성하는 Docker 컨테이너를 실행하는 방법을 배우겠습니다. 로그는 컨테이너 내에서 실행되는 애플리케이션을 디버깅하고 모니터링하는 데 필수적입니다. 이 목적을 위해 간단한 hello-world 이미지를 사용합니다. 이 이미지는 메시지를 출력한 다음 종료되므로 기본적인 컨테이너 로깅을 확인하기에 좋은 시작점입니다.

먼저, Docker Hub 에서 hello-world 이미지를 가져오겠습니다. 이렇게 하면 해당 이미지에서 컨테이너를 실행하기 전에 이미지가 로컬에서 사용 가능한지 확인합니다.

docker pull hello-world

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

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

이제 hello-world 이미지를 사용하여 컨테이너를 실행해 보겠습니다. docker run 명령은 새 컨테이너를 생성하고 시작합니다. 기본적으로 Docker 는 컨테이너 프로세스의 표준 출력 (stdout) 과 표준 에러 (stderr) 를 캡처하여 로그로 저장합니다.

docker run hello-world

이 명령을 실행하면 hello-world 컨테이너가 실행되고, 터미널에 메시지를 출력한 다음 종료됩니다. 이 메시지가 Docker 가 로그로 캡처하는 출력입니다.

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

hello-world와 같은 간단한 컨테이너를 실행할 때는 출력이 터미널에 직접 표시되지만, 백그라운드에서 실행되는 컨테이너나 더 복잡한 애플리케이션의 경우 docker logs 명령을 사용하여 출력을 확인해야 합니다. 다음 단계에서 docker logs 명령을 살펴보겠습니다.

기본 컨테이너 로그 보기

이전 단계에서는 콘솔에 메시지를 출력하고 종료되는 hello-world 컨테이너를 실행했습니다. 이는 빠른 데모에는 유용했지만, 실제 애플리케이션은 종종 백그라운드에서 지속적으로 실행됩니다. 이러한 컨테이너의 출력 (로그) 을 보려면 docker logs 명령을 사용합니다.

먼저, 계속 실행되면서 일부 출력을 생성하는 컨테이너를 실행해 보겠습니다. 간단한 ubuntu 이미지를 사용하고 몇 초마다 메시지를 출력하는 명령을 실행합니다. 백그라운드에서 실행되도록 이 컨테이너를 분리 모드 (-d) 로 실행합니다. 또한 쉽게 식별할 수 있도록 이름을 지정합니다 (my-logging-container).

docker pull ubuntu
docker run -d --name my-logging-container ubuntu /bin/bash -c 'while true; do echo "Hello from the container at $(date)"; sleep 5; done'

docker pull ubuntu 명령은 Ubuntu 이미지를 다운로드합니다. docker run 명령은 my-logging-container라는 새 컨테이너를 분리 모드로 시작합니다. 컨테이너 내에서 실행되는 명령은 /bin/bash -c 'while true; do echo "Hello from the container at $(date)"; sleep 5; done'이며, 이는 현재 날짜와 시간으로 메시지를 5 초마다 출력하는 간단한 셸 스크립트입니다.

컨테이너가 백그라운드에서 시작되었음을 나타내는 컨테이너 ID 가 콘솔에 출력되는 것을 볼 수 있습니다.

Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
sha256:...

이제 컨테이너가 실행 중이고 로그를 생성하므로, 컨테이너 이름 또는 ID 를 사용하여 docker logs 명령을 사용하여 이러한 로그를 볼 수 있습니다.

docker logs my-logging-container

이 명령은 my-logging-container가 시작된 이후 생성된 모든 로그를 표시합니다. 타임스탬프와 함께 일련의 "Hello from the container..." 메시지를 볼 수 있습니다.

Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
...

docker logs 명령은 컨테이너의 출력을 검사하기 위한 기본적인 도구이며, 이는 컨테이너의 동작을 이해하고 문제를 진단하는 데 매우 중요합니다.

타임스탬프 및 상세 정보와 함께 로그 보기

이전 단계에서는 실행 중인 컨테이너의 기본 로그를 보았습니다. 출력 자체는 유용하지만, 각 로그 항목이 언제 생성되었는지와 같은 컨텍스트가 종종 부족합니다. Docker 는 로그에 타임스탬프 및 기타 세부 정보를 포함하는 옵션을 제공합니다.

타임스탬프와 함께 로그를 보려면 docker logs 명령과 함께 -t 또는 --timestamps 플래그를 사용할 수 있습니다. 이렇게 하면 각 로그 항목 앞에 타임스탬프가 추가되어 컨테이너의 표준 출력 또는 표준 에러에 기록된 시간을 표시합니다.

타임스탬프와 함께 my-logging-container의 로그를 살펴보겠습니다.

docker logs -t my-logging-container

이제 각 줄의 시작 부분에 타임스탬프가 있는 로그를 볼 수 있습니다. 타임스탬프는 RFC3339Nano 형식 (예: 2023-10-27T10:30:00.123456789Z) 입니다.

2023-10-27T10:30:00.123456789Z Hello from the container at ...
2023-10-27T10:30:05.123456789Z Hello from the container at ...
2023-10-27T10:30:10.123456789Z Hello from the container at ...
...

타임스탬프를 포함하는 것은 로그를 분석하는 데 매우 중요하며, 특히 이벤트 시퀀스를 이해하거나 특정 문제가 발생한 시점을 정확히 파악하려는 경우에 유용합니다.

또 다른 유용한 옵션은 실시간으로 로그를 스트리밍할 수 있는 -f 또는 --follow 플래그입니다. 이는 로그 파일에서 tail -f 명령을 사용하는 것과 유사합니다. 컨테이너로 이를 시도해 보겠습니다.

docker logs -f my-logging-container

이 명령은 기존 로그를 표시한 다음 컨테이너에서 생성되는 새 로그 항목을 계속 표시합니다. 5 초마다 새로운 "Hello from the container..." 메시지가 나타나는 것을 볼 수 있습니다.

로그를 더 이상 따라가지 않으려면 Ctrl+C를 누르십시오.

-t-f 플래그를 결합하는 것은 타임스탬프와 함께 컨테이너 로그를 실시간으로 모니터링하는 일반적인 방법입니다.

docker logs -tf my-logging-container

이렇게 하면 컨테이너의 출력을 실시간으로 볼 수 있으므로 컨테이너의 동작을 관찰하고 문제가 발생할 때 디버깅하기가 더 쉬워집니다.

특정 시간 이후 로그 또는 꼬리 (tail) 출력 보기

이 단계에서는 특정 시간 이후에 생성된 컨테이너 로그를 보거나 가장 최근의 로그 항목만 보는 방법을 살펴보겠습니다. 이는 오랫동안 실행되어 많은 양의 로그를 생성한 컨테이너를 다룰 때 특히 유용합니다.

특정 시간 이후에 생성된 로그를 보려면 --since 플래그를 사용할 수 있습니다. --since의 값은 타임스탬프 (-t 플래그에서 본 것과 같은) 또는 상대적인 시간 기간 (예: 10 분은 10m, 1 시간은 1h) 일 수 있습니다.

my-logging-container가 더 많은 로그를 생성하도록 몇 초 동안 기다리겠습니다. 그런 다음, 지난 30 초 동안 생성된 로그를 보겠습니다.

sleep 30
docker logs --since 30s my-logging-container

이 명령은 지난 30 초 이내에 생성된 로그 항목만 표시합니다. 출력은 전체 로그와 유사하지만 최근 항목만 포함합니다.

Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
... (지난 30 초 동안의 로그만)

또 다른 일반적인 요구 사항은 tail 명령을 사용하는 것과 유사하게 로그의 마지막 몇 줄만 보는 것입니다. --tail 플래그를 사용하고, 그 뒤에 보고 싶은 줄 수를 지정하여 이를 수행할 수 있습니다.

컨테이너에서 마지막 5 줄의 로그를 보겠습니다.

docker logs --tail 5 my-logging-container

이 명령은 컨테이너에서 가장 최근의 5 개 로그 항목만 출력합니다.

Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
Hello from the container at ... (마지막 5 줄)

--since--tail-t-f와 같은 다른 플래그와 결합하여 컨테이너 로그에 대한 보다 구체적인 보기를 얻을 수 있습니다. 예를 들어, 타임스탬프와 함께 마지막 10 줄을 보려면 다음과 같이 합니다.

docker logs -t --tail 10 my-logging-container

이러한 옵션은 컨테이너 로그를 필터링하고 볼 수 있는 강력한 방법을 제공하여 필요한 정보를 빠르게 찾을 수 있도록 합니다.

특정 시간까지의 로그 보기

특정 시간 이후의 로그를 보는 것 외에도, --until 플래그를 사용하여 특정 시간 까지 생성된 로그를 볼 수도 있습니다. 이는 특정 시점, 예를 들어 문제가 발생하기 전까지의 로그를 검사하는 데 유용합니다.

--until의 값도 타임스탬프 또는 상대적인 시간 기간일 수 있습니다.

더 많은 로그가 생성되도록 다시 몇 초 동안 기다리겠습니다.

sleep 10

이제, 10 초 전까지 생성된 my-logging-container의 로그를 보겠습니다.

docker logs --until 10s my-logging-container

이 명령은 컨테이너의 시작부터 명령을 실행하기 약 10 초 전까지의 모든 로그 항목을 표시합니다. 초기 로그 항목은 볼 수 있지만, 가장 최근 항목은 제외됩니다.

Hello from the container at ...
Hello from the container at ...
... (10 초 전까지의 로그)

--since--until을 결합하여 특정 시간 범위 내의 로그를 볼 수 있습니다. 예를 들어, 2 분 전부터 30 초 전까지 생성된 로그를 보려면 다음과 같이 합니다.

docker logs --since 2m --until 30s my-logging-container

이 명령은 해당 특정 시간 창 내에 있는 로그 항목만 표시합니다.

마지막으로, 실행 중인 컨테이너를 정리하려면 중지하고 제거할 수 있습니다.

docker stop my-logging-container
docker rm my-logging-container

docker stop 명령은 컨테이너에 중지 신호를 보내고, docker rm은 컨테이너를 제거합니다.

시간별로 로그를 필터링하는 방법을 이해하는 것은 Docker 컨테이너의 동작을 디버깅하고 분석하는 강력한 기술입니다.

요약

이 랩에서는 docker logs 명령을 사용하여 컨테이너 로그를 보는 방법을 배웠습니다. 먼저, Docker 가 표준 출력을 로그로 캡처하는 방식을 이해하기 위해 간단한 hello-world 컨테이너를 실행했습니다.

그런 다음, 컨테이너의 출력을 검색하기 위한 docker logs의 기본 사용법을 살펴보았습니다. 또한 타임스탬프와 상세 정보를 포함하여 로그 출력을 향상시키는 방법, 특정 시간 이후 또는 특정 시간까지의 로그를 보고, 출력을 꼬리 자르기 (tail) 하여 최신 로그 항목을 확인하는 등 시간 기반으로 로그를 필터링하는 방법을 배웠습니다.