소개
이 랩에서는 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 update 및 apt-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 build 및 docker history 명령을 사용하여 해당 히스토리를 보는 방법을 배웠습니다. 간단한 Dockerfile 을 생성하고 my-ubuntu-curl:latest 태그가 지정된 이미지를 빌드했으며, 히스토리 출력을 검토하여 빌드 프로세스에 관련된 레이어와 명령을 이해했습니다.
그런 다음 docker history 출력에서 고유한 빌드 레퍼런스를 식별하는 방법을 배웠습니다. 이 빌드 레퍼런스는 빌드 로그와 같이 특정 빌드 관련 정보에 액세스하는 데 중요하며, 이는 다음 단계에서 탐구할 것입니다.



