docker compose logs 명령으로 컨테이너 출력 확인하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker logs 명령어를 효과적으로 사용하여 Docker 컨테이너의 출력을 보는 방법을 배우게 됩니다. 먼저 실행 중인 컨테이너에서 기본 로그를 보는 방법부터 시작합니다.

기본 사항을 바탕으로, 활성 프로세스를 모니터링하고 디버깅하는 데 중요한 실시간으로 컨테이너 로그를 추적하는 방법을 탐구할 것입니다. 마지막으로, 타임스탬프를 포함하고, 로그 끝에서 표시할 줄 수를 지정하며, 시간 범위를 기준으로 로그를 필터링하여 로그 보기 경험을 향상시키는 방법을 배우게 됩니다.

서비스 시작 및 기본 로그 확인

이 단계에서는 Docker 컨테이너를 시작하고 기본 로그를 보는 방법을 배우겠습니다. 로그는 컨테이너 내부에서 무슨 일이 일어나고 있는지 이해하고, 문제를 디버깅하며, 컨테이너의 동작을 모니터링하는 데 필수적입니다.

먼저, Docker Hub 에서 간단한 Nginx 이미지를 가져오겠습니다. 이 이미지는 웹 서버 컨테이너를 실행하는 데 사용됩니다.

docker pull nginx:latest

이미지가 다운로드되고 있음을 나타내는 출력을 볼 수 있습니다. 다운로드가 완료되면 이미지를 나열하여 이미지가 로컬에서 사용 가능한지 확인할 수 있습니다.

docker images

이제 Nginx 이미지를 기반으로 컨테이너를 실행해 보겠습니다. 백그라운드에서 실행되도록 detached 모드 (-d) 로 실행하고, 이름을 my-nginx로 지정합니다.

docker run -d --name my-nginx nginx

이 명령의 출력은 컨테이너 ID 가 됩니다. 이는 컨테이너가 백그라운드에서 성공적으로 시작되었음을 의미합니다.

my-nginx 컨테이너에서 생성된 기본 로그를 보려면 docker logs 명령어를 사용하고 컨테이너 이름 또는 ID 를 입력합니다.

docker logs my-nginx

컨테이너 내에서 실행 중인 Nginx 프로세스에서 생성된 표준 출력 및 표준 오류 스트림을 볼 수 있습니다. 이러한 로그에는 일반적으로 Nginx 서버가 시작되고 요청을 처리하는 정보가 포함됩니다.

실시간 로그 추적

이전 단계에서는 컨테이너가 시작된 후 컨테이너의 로그를 보았습니다. 그러나 때로는 로그가 생성되는 대로 실시간으로 로그를 봐야 할 필요가 있습니다. 이는 특히 활성 프로세스를 디버깅하거나 모니터링하는 데 유용합니다.

컨테이너의 로그를 실시간으로 추적하려면 -f (또는 --follow) 옵션과 함께 docker logs 명령어를 사용합니다. 이렇게 하면 터미널이 열린 상태로 유지되고 새로운 로그 항목이 나타날 때 표시됩니다.

my-nginx 컨테이너의 로그를 추적해 보겠습니다.

docker logs -f my-nginx

이 명령은 현재 로그를 표시하기 시작한 다음 새로운 로그 항목을 기다립니다. Nginx 컨테이너가 실행 중이지만 요청을 적극적으로 처리하지 않으므로 새 로그가 즉시 표시되지 않을 수 있습니다.

새로운 로그 항목을 생성하기 위해 컨테이너 내에서 실행 중인 Nginx 웹 서버에 요청을 보낼 수 있습니다. 기본적으로 Nginx 는 포트 80 에서 수신 대기합니다. docker run 명령에서 포트를 호스트에 매핑하지 않았지만, curl을 사용하여 호스트에서 내부적으로 컨테이너의 네트워크에 액세스할 수 있습니다.

LabEx 환경에서 새 터미널 탭을 엽니다. 이 새 탭에서 다음 명령을 실행하여 Nginx 컨테이너에 요청을 보냅니다.

curl http://localhost:80

새 터미널 탭에서 기본 Nginx 환영 페이지 HTML 출력을 볼 수 있습니다.

이제 로그를 추적하는 터미널 탭 (docker logs -f my-nginx) 으로 다시 전환합니다. curl에서 Nginx 가 요청을 처리했음을 나타내는 새로운 로그 항목이 표시되어야 합니다. 이러한 항목에는 일반적으로 클라이언트 IP, 요청 메서드, 요청된 경로 및 HTTP 상태 코드에 대한 정보가 포함됩니다.

로그 추적을 중지하려면 docker logs -f가 실행 중인 터미널에서 Ctrl+C를 누릅니다.

타임스탬프 및 특정 꼬리 로그 확인

이전 단계에서는 기본 로그를 보고 실시간으로 로그를 추적했습니다. 그러나 기본 docker logs 출력에는 타임스탬프가 포함되어 있지 않아 이벤트를 상호 연관시키거나 로그 항목의 타이밍을 이해하기 어려울 수 있습니다. 또한, 때로는 가장 최근의 로그 항목만 볼 필요가 있습니다.

로그 출력에 타임스탬프를 포함하려면 docker logs 명령과 함께 -t (또는 --timestamps) 옵션을 사용합니다.

my-nginx 컨테이너의 로그를 타임스탬프와 함께 보겠습니다.

docker logs -t my-nginx

이제 각 로그 항목 앞에 타임스탬프가 표시되어 해당 로그 항목이 컨테이너에서 생성된 시간을 나타냅니다. 이는 디버깅 및 분석에 매우 유용합니다.

때로는 Linux 의 tail 명령을 사용하는 것과 유사하게 가장 최근의 로그 항목에만 관심이 있습니다. docker logs 명령은 이러한 목적으로 --tail 옵션을 제공합니다. 로그 끝에서 보고 싶은 줄 수를 지정할 수 있습니다.

예를 들어, my-nginx 컨테이너의 마지막 5 개 로그 항목만 보려면 다음과 같이 합니다.

docker logs --tail 5 my-nginx

이렇게 하면 컨테이너 로그의 마지막 5 줄만 출력됩니다. --tail-t와 결합하여 타임스탬프가 있는 마지막 몇 개의 항목을 볼 수 있습니다.

docker logs -t --tail 5 my-nginx

이 명령은 마지막 5 개의 로그 항목을 각 항목에 해당하는 타임스탬프와 함께 표시합니다.

시간 범위로 로그 필터링

모든 로그 또는 가장 최근 로그를 보는 것 외에도 특정 시간 범위를 기준으로 컨테이너 로그를 필터링할 수도 있습니다. 이는 특정 기간 동안 발생한 이벤트를 조사할 때 유용합니다.

docker logs 명령은 시간을 기준으로 로그를 필터링하기 위해 --since--until 옵션을 제공합니다. 이러한 옵션은 RFC3339 타임스탬프, Unix 타임스탬프 또는 상대 시간 (예: 10 분은 10m, 1 시간은 1h) 을 포함한 다양한 시간 형식을 허용합니다.

로그 필터링을 시도해 보겠습니다. 먼저, 서로 다른 시간에 몇 개의 로그를 생성해야 합니다. Nginx 컨테이너에 다시 curl 요청을 보내서 이 작업을 수행할 수 있습니다.

새 터미널 탭을 열고 curl 명령을 몇 번 실행하고 그 사이에 짧은 지연을 줍니다.

curl http://localhost:80
sleep 5
curl http://localhost:80
sleep 5
curl http://localhost:80

이제 이러한 요청 시간을 확인하기 위해 타임스탬프와 함께 my-nginx 컨테이너의 로그를 보겠습니다.

docker logs -t my-nginx

curl 명령으로 생성된 로그 항목의 타임스탬프를 확인합니다.

특정 시간 이후의 로그를 필터링하려면 --since 옵션을 사용할 수 있습니다. 예를 들어, 지난 1 분 동안 생성된 로그를 보려면 다음과 같이 합니다.

docker logs --since 1m my-nginx

이 명령은 지난 1 분 이내에 생성된 my-nginx 컨테이너의 모든 로그 항목을 표시합니다.

--until 옵션을 사용하여 특정 시간까지의 로그를 필터링할 수도 있습니다. 예를 들어, 1 분 전에 생성된 로그를 보려면 다음과 같이 합니다.

docker logs --until 1m my-nginx

이 명령은 1 분 이상 전에 생성된 my-nginx 컨테이너의 모든 로그 항목을 표시합니다.

--since--until을 결합하여 특정 시간 창 내의 로그를 볼 수 있습니다. 예를 들어, 5 분 전과 1 분 전 사이의 로그를 보려면 다음과 같이 합니다.

docker logs --since 5m --until 1m my-nginx

정확한 출력은 curl 명령을 실행한 시점과 docker logs 명령을 실행한 시점에 따라 달라집니다.

요약

이 랩에서는 docker logs 명령을 사용하여 컨테이너 출력을 보는 기본적인 단계를 배웠습니다. 먼저 Docker 이미지를 풀링하고 분리 모드에서 컨테이너를 실행하는 것으로 시작했습니다. 그 후, 실행 중인 컨테이너에서 생성된 기본 로그를 보는 방법을 탐구하여 시작 및 활동에 대한 통찰력을 얻었습니다.

또한, -f 옵션을 사용하여 컨테이너 로그를 실시간으로 추적하는 방법을 배우면서 이해도를 높였습니다. 이를 통해 로그 스트림이 생성되는 대로 지속적으로 모니터링할 수 있습니다. 이러한 실시간 로깅은 디버깅 및 컨테이너의 동적 동작 관찰에 매우 중요합니다.