docker buildx history logs 명령으로 빌드 로그를 보는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker buildx history logs 명령을 사용하여 Docker 빌드 로그를 보는 방법을 배우게 됩니다. 먼저 Docker 이미지를 빌드하고 해당 기록을 검토하여 빌드 프로세스를 이해하고 빌드 레퍼런스 (build reference) 를 식별하는 것으로 시작합니다.

그런 다음 빌드 레퍼런스를 사용하여 특정 빌드의 상세 로그를 검색하고 볼 것입니다. 마지막으로, 빌드 실행에 대한 통찰력을 제공하고 잠재적인 문제를 해결하기 위해 다양한 진행 상황 출력 유형으로 이러한 빌드 로그를 보는 방법을 살펴볼 것입니다.

이미지 빌드 및 히스토리 보기

이 단계에서는 Dockerfile 에서 Docker 이미지를 빌드하고 해당 히스토리를 보는 방법을 배우게 됩니다. 히스토리는 이미지를 구성하는 레이어와 각 레이어를 생성하는 데 사용된 명령을 보여줍니다.

먼저, ~/project 디렉토리에 간단한 Dockerfile 을 생성해 보겠습니다. 이 Dockerfile 은 ubuntu 이미지를 기반으로 이미지를 생성하고 curl 패키지를 설치합니다.

cd ~/project
nano Dockerfile

다음 내용을 Dockerfile에 추가합니다.

FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl

파일을 저장하고 편집기를 종료합니다 (Ctrl+X, Y, Enter).

이제 docker build 명령을 사용하여 Docker 이미지를 빌드해 보겠습니다. 이미지에 my-ubuntu-curl이라는 이름과 latest 태그를 지정합니다. 명령 끝의 .은 Dockerfile 이 현재 디렉토리에 있음을 나타냅니다.

docker build -t my-ubuntu-curl:latest .

Docker 파일에 정의된 각 단계가 실행되는 것을 보여주는 빌드 프로세스를 나타내는 출력을 보게 됩니다.

빌드가 완료되면 docker history 명령을 사용하여 이미지의 히스토리를 볼 수 있습니다.

docker history my-ubuntu-curl:latest

출력은 레이어 ID, 생성 시간, 크기 및 생성에 사용된 명령을 포함하여 각 레이어에 대한 정보가 있는 테이블을 표시합니다. 이 히스토리는 이미지가 어떻게 빌드되었는지 이해하고 디버깅 목적으로 유용합니다.

히스토리에서 빌드 레퍼런스 찾기

이전 단계에서 Docker 이미지를 빌드하고 해당 히스토리를 보았습니다. 히스토리 출력에는 "BUILD REFERENCE" 열이 포함되어 있습니다. 이 레퍼런스는 이미지를 생성한 빌드 프로세스에 대한 고유 식별자입니다. 이는 이미지 ID 와 다르며, 결과 이미지 레이어가 아닌 빌드 자체와 관련이 있습니다.

빌드 레퍼런스를 식별하기 위해 다시 히스토리를 살펴보겠습니다.

docker history my-ubuntu-curl:latest

출력에서 빌드 프로세스에 해당하는 줄을 찾습니다. 일반적으로 첫 번째 줄 (기본 이미지 레이어 제외) 이며 "BUILD REFERENCE" 열에 값이 있습니다. 이 값은 긴 문자열입니다.

예를 들어, 출력은 다음과 같이 보일 수 있습니다 (정확한 값은 다를 수 있습니다).

IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT   BUILD REFERENCE
a1b2c3d4e5f6   2 hours ago    /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
g7h8i9j0k1l2   2 hours ago    /bin/sh -c #(nop) ADD file:abcdef1234567890...   73.9MB
m3n4o5p6q7r8   2 hours ago    /bin/sh -c apt-get update && apt-get install...   30MB      buildkit.dockerfile.v0   buildkit:abcdef1234567890abcdef1234567890

이 예에서 빌드 레퍼런스는 buildkit:abcdef1234567890abcdef1234567890입니다. 빌드 레퍼런스는 종종 buildkit:로 시작하고 그 뒤에 고유 식별자가 오는 것을 주목하십시오.

특정 빌드 프로세스의 로그를 보려면 다음 단계에서 이 빌드 레퍼런스가 필요합니다. 출력에서 빌드 레퍼런스를 복사합니다.

빌드 레퍼런스를 사용하여 특정 빌드의 로그 보기

이전 단계에서 이미지 히스토리에서 빌드 레퍼런스를 식별했습니다. 이 빌드 레퍼런스를 사용하면 해당 특정 빌드 프로세스의 자세한 로그를 볼 수 있습니다. 이는 빌드 실패를 디버깅하거나 빌드 중에 생성된 정확한 출력을 이해하는 데 특히 유용합니다.

특정 빌드의 로그를 보려면 docker buildx logs 명령을 사용하고 그 뒤에 빌드 레퍼런스를 입력합니다. YOUR_BUILD_REFERENCE를 이전 단계에서 찾은 실제 빌드 레퍼런스로 바꾸는 것을 잊지 마십시오.

docker buildx logs YOUR_BUILD_REFERENCE

예를 들어, 빌드 레퍼런스가 buildkit:abcdef1234567890abcdef1234567890인 경우 명령은 다음과 같습니다.

docker buildx logs buildkit:abcdef1234567890abcdef1234567890

이 명령을 실행하면 Dockerfile 의 각 RUN 명령의 출력을 포함하여 빌드 프로세스의 전체 출력이 표시됩니다. 이미지 빌드 중에 실행된 apt-get updateapt-get install -y curl의 출력을 볼 수 있습니다.

이는 docker build 명령 중에 표시되는 요약에 비해 빌드 프로세스에 대한 훨씬 더 자세한 보기를 제공합니다.

다양한 진행 상황 출력 유형으로 로그 보기

이 단계에서는 Docker 이미지를 빌드할 때 빌드 진행 상황 출력을 보는 다양한 방법을 살펴봅니다. docker build 명령은 빌드 진행 상황이 표시되는 방식을 제어하는 다양한 옵션을 제공합니다.

기본적으로 docker build는 각 단계가 실행될 때 해당 단계의 상태를 보여주는 진행 상황 출력을 사용합니다. 이 기본 출력을 다시 보려면 이미지를 다시 빌드해 보겠습니다.

docker build -t my-ubuntu-curl:latest .

"Step 1/2", "Step 2/2"와 같은 단계와 RUN 명령의 출력을 보여주는 익숙한 출력을 관찰할 수 있습니다.

이제 --progress 플래그를 사용하여 다른 진행 상황 출력 유형을 시도해 보겠습니다. plain 출력 유형은 빌드 프로세스를 보다 자세하고 줄 단위 형식으로 표시합니다. 이는 진행률 표시줄 없이 실행되는 정확한 명령과 해당 출력을 확인하는 데 유용할 수 있습니다.

docker build --progress=plain -t my-ubuntu-curl:latest .

이 명령의 출력을 기본 출력과 비교해 보십시오. 빌드 중에 수행된 각 작업에 대한 보다 자세한 로그를 볼 수 있습니다.

또 다른 유용한 진행 상황 출력 유형은 tty입니다. 이는 터미널에서 대화형으로 빌드할 때 기본값이며 동적 진행률 표시줄을 제공합니다. 그러나 특정 스크립팅 시나리오에서는 명시적으로 지정하는 것이 유용할 수 있습니다.

docker build --progress=tty -t my-ubuntu-curl:latest .

초기 빌드와 유사하게 대화형 진행률 표시줄을 다시 볼 수 있습니다.

이러한 다양한 진행 상황 출력 유형을 이해하면 간결한 요약이 필요하든 디버깅을 위한 자세한 로그가 필요하든 Docker 빌드를 모니터링하는 가장 좋은 방법을 선택할 수 있습니다.

요약

이 랩에서는 Dockerfile 에서 Docker 이미지를 빌드하고 docker builddocker history 명령을 사용하여 해당 히스토리를 보는 방법을 배웠습니다. 간단한 Dockerfile 을 생성하고 my-ubuntu-curl:latest 태그가 지정된 이미지를 빌드했으며, 히스토리 출력을 검토하여 빌드 프로세스에 관련된 레이어와 명령을 이해했습니다.

그런 다음 docker history 출력에서 고유한 빌드 레퍼런스를 식별하는 방법을 배웠습니다. 이 빌드 레퍼런스는 빌드 로그와 같이 특정 빌드 관련 정보에 액세스하는 데 중요하며, 이는 다음 단계에서 탐구할 것입니다.