docker buildx prune 명령어를 사용하여 빌드 캐시 관리 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker buildx prune 명령어를 사용하여 Docker 빌드 캐시를 효과적으로 관리하는 방법을 살펴봅니다. 빌드 캐시는 이전에 빌드된 레이어를 재사용하여 Docker 이미지 빌드를 가속화하는 데 중요한 메커니즘입니다. 그러나 시간이 지남에 따라 이 캐시는 축적되어 상당한 디스크 공간을 소비할 수 있습니다.

먼저, 일부 빌드 캐시를 생성하기 위해 간단한 Docker 이미지를 빌드하는 것으로 시작합니다. 그런 다음, docker buildx prune을 사용하여 이 캐시를 정리하는 다양한 방법을 시연합니다. 여기에는 필터 없이 모든 캐시 정리, --filter 옵션을 사용하여 최근 데이터를 유지하면서 선택적으로 정리, --keep-storage를 사용하여 캐시 크기 제한, 마지막으로 --all 플래그를 사용하여 내부 이미지를 포함한 모든 빌드 캐시 정리 등이 포함됩니다. 이 랩을 마치면 Docker 빌드 캐시를 효율적으로 관리하는 방법에 대한 확실한 이해를 갖게 될 것입니다.

빌드 캐시 생성을 위한 이미지 빌드

이 단계에서는 일부 빌드 캐시를 생성하기 위해 간단한 Docker 이미지를 빌드합니다. Docker 빌드 캐시는 이전 빌드에서 레이어를 재사용하여 빌드 프로세스의 속도를 높이는 메커니즘입니다. Docker 이미지를 빌드할 때 Dockerfile 의 각 명령은 레이어를 생성합니다. 마지막 빌드 이후 명령이 변경되지 않은 경우 Docker 는 다시 빌드하는 대신 기존 레이어를 재사용할 수 있습니다.

먼저, 프로젝트 디렉토리를 생성하고 해당 디렉토리로 이동해 보겠습니다.

mkdir ~/project/docker-cache-demo
cd ~/project/docker-cache-demo

이제 간단한 Dockerfile 을 생성합니다. 이 Dockerfile 은 파일을 이미지로 복사한 다음 명령을 실행합니다.

nano Dockerfile

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

FROM ubuntu:latest
COPY . /app
RUN echo "Hello, Docker Cache!" > /app/message.txt
CMD ["cat", "/app/message.txt"]

파일을 저장하고 닫습니다.

다음으로, 이미지로 복사할 간단한 파일을 생성해 보겠습니다.

nano message.txt

message.txt에 내용을 추가합니다.

This is a test message.

파일을 저장하고 닫습니다.

이제 Docker 이미지를 빌드합니다. 이미지를 cache-demo로 태그합니다.

docker build -t cache-demo .

Docker 가 이미지를 단계별로 빌드하고 있음을 나타내는 출력을 볼 수 있습니다. 각 단계는 Dockerfile 의 명령에 해당합니다. Docker 는 ubuntu:latest 이미지가 아직 없는 경우 다운로드하고, message.txt 파일을 복사한 다음 echo 명령을 실행합니다.

빌드가 완료된 후 사용 가능한 이미지를 나열하여 이미지가 생성되었는지 확인할 수 있습니다.

docker images

이미지 목록에 cache-demo가 표시됩니다.

이제 Dockerfile 또는 message.txt를 변경하지 않고 이미지를 다시 빌드해 보겠습니다.

docker build -t cache-demo .

이번에는 빌드 프로세스가 훨씬 빠르다는 것을 알 수 있습니다. Dockerfile 의 명령과 message.txt의 내용이 변경되지 않았기 때문에 Docker 는 이전 빌드에서 기존 레이어를 재사용합니다. 출력에는 대부분의 단계에 대해 "Using cache"가 표시됩니다. 이는 Docker 빌드 캐시가 후속 빌드의 속도를 높이는 방식을 보여줍니다.

필터 없이 빌드 캐시 정리

이 단계에서는 필터를 사용하지 않고 Docker 빌드 캐시를 정리하는 방법을 배웁니다. 빌드 캐시를 정리하면 사용하지 않는 빌드 캐시 항목을 제거하여 디스크 공간을 확보하는 데 도움이 됩니다.

빌드 캐시를 정리하는 명령어는 docker builder prune입니다. 기본적으로 이 명령은 현재 존재하는 이미지에서 사용되지 않는 모든 빌드 캐시 항목을 제거합니다.

빌드 캐시를 정리하는 명령을 실행해 보겠습니다.

docker builder prune

작업을 확인하라는 메시지가 표시됩니다. y를 입력하고 Enter 키를 눌러 진행합니다.

WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y

출력에는 삭제된 빌드 캐시 항목과 확보된 총 공간이 표시됩니다.

정리의 효과를 확인하기 위해 이미지를 다시 빌드해 보겠습니다.

cd ~/project/docker-cache-demo
docker build -t cache-demo .

이번에는 이전 단계의 두 번째 빌드보다 빌드 프로세스가 더 오래 걸릴 수 있습니다. 일부 또는 모든 빌드 캐시가 제거되었을 수 있기 때문입니다. Docker 는 정리된 레이어를 다시 빌드합니다.

필터 없는 정리는 사용하지 않는 모든 빌드 캐시를 정리하여 사용 가능한 디스크 공간을 최대화하려는 경우에 유용합니다. 그러나 이미지를 자주 다시 빌드하는 경우 후속 빌드의 빌드 속도에 영향을 미칠 수 있습니다. 다음 단계에서는 어떤 빌드 캐시 항목을 정리할지 더 많은 제어 권한을 갖도록 필터를 사용하는 방법을 살펴봅니다.

--filter 옵션을 사용하여 최근 데이터 유지하며 빌드 캐시 정리

이 단계에서는 --filter 플래그를 사용하여 최근 데이터를 유지하면서 Docker 빌드 캐시를 정리하는 방법을 배웁니다. 이는 디스크 공간을 확보하면서도 최근 빌드에 대한 캐시의 이점을 활용하려는 경우에 유용합니다.

docker builder prune 명령은 다양한 필터를 지원합니다. 유용한 필터 중 하나는 until로, 특정 타임스탬프보다 오래된 빌드 캐시 항목을 제거할 수 있습니다. 타임스탬프는 날짜와 시간 또는 현재 시간을 기준으로 한 기간일 수 있습니다.

먼저 최근 빌드 캐시가 있는지 확인하기 위해 이미지를 다시 빌드해 보겠습니다.

cd ~/project/docker-cache-demo
docker build -t cache-demo .

이제 마지막 5 분 동안의 항목을 유지하면서 빌드 캐시를 정리해 보겠습니다. 5m과 같은 기간을 사용하여 until 필터를 사용할 수 있습니다.

docker builder prune --filter "until=5m"

작업을 확인하라는 메시지가 표시됩니다. y를 입력하고 Enter 키를 눌러 진행합니다.

WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y

출력에는 삭제된 빌드 캐시 항목이 표시됩니다. 5 분보다 오래된 항목만 제거됩니다.

특정 타임스탬프를 지정할 수도 있습니다. 예를 들어, 특정 날짜 및 시간보다 오래된 캐시 항목을 제거하려면 "YYYY-MM-DDTHH:MM:SS"와 같은 형식을 사용합니다.

기간과 함께 until 필터를 사용하면 디스크 공간 사용량과 빌드 속도의 균형을 맞추면서 가장 최근의 빌드 캐시를 유지하고 오래된 항목을 정리하는 편리한 방법입니다.

--keep-storage 옵션을 사용하여 특정 크기 유지하며 빌드 캐시 정리

이 단계에서는 --keep-storage 플래그를 사용하여 특정 양의 스토리지를 유지하면서 Docker 빌드 캐시를 정리하는 방법을 배웁니다. 이는 빌드 캐시에서 사용하는 디스크 공간의 양을 제한하려는 경우에 유용합니다.

--keep-storage 플래그를 사용한 docker builder prune 명령을 사용하면 빌드 캐시에 대해 유지할 최대 스토리지 양을 지정할 수 있습니다. Docker 는 남아있는 캐시의 총 크기가 지정된 제한 미만이 될 때까지 가장 오래된 빌드 캐시 항목을 제거합니다.

먼저 몇 번 이미지를 빌드하여 더 많은 빌드 캐시 항목을 생성해 보겠습니다.

cd ~/project/docker-cache-demo
docker build -t cache-demo:v1 .
docker build -t cache-demo:v2 .

이제 빌드 캐시를 정리하고 1GB 의 스토리지 만 유지해 보겠습니다. 크기는 바이트 (bytes), 킬로바이트 (k), 메가바이트 (m) 또는 기가바이트 (g) 로 지정할 수 있습니다.

docker builder prune --keep-storage 1g

작업을 확인하라는 메시지가 표시됩니다. y를 입력하고 Enter 키를 눌러 진행합니다.

WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y

출력에는 삭제된 빌드 캐시 항목과 확보된 총 공간이 표시됩니다. Docker 는 남아있는 캐시의 총 크기가 대략 1GB 이하가 될 때까지 가장 오래된 캐시 항목을 제거합니다.

--keep-storage 플래그를 사용하면 특히 스토리지 공간이 제한된 환경에서 빌드 캐시가 사용하는 디스크 공간을 관리하는 좋은 방법입니다.

--all 옵션을 사용하여 내부 이미지 포함 모든 빌드 캐시 정리

이 단계에서는 --all 플래그를 사용하여 내부 이미지를 포함한 모든 Docker 빌드 캐시를 정리하는 방법을 배웁니다. 이는 빌드 캐시를 정리하는 가장 강력한 방법이며, 기존 이미지에서 사용되는지 여부에 관계없이 모든 캐시 항목을 제거합니다.

--all 플래그 (약식 -a) 를 사용한 docker builder prune 명령은 모든 빌드 캐시 항목을 제거합니다. 여기에는 태그가 지정되지 않은 중간 빌드 이미지와 관련된 캐시 항목도 포함됩니다.

모든 빌드 캐시를 정리하는 명령을 실행해 보겠습니다.

docker builder prune --all

작업을 확인하라는 메시지가 표시됩니다. y를 입력하고 Enter 키를 눌러 진행합니다.

WARNING! This will remove all build cache.
Are you sure you want to continue? [y/N] y

출력에는 삭제된 모든 빌드 캐시 항목과 확보된 총 공간이 표시됩니다. 이 명령은 --all 플래그 없이 정리하거나 필터를 사용하는 것보다 일반적으로 가장 많은 디스크 공간을 확보합니다.

이 명령을 실행한 후 cache-demo 이미지를 다시 빌드하면 모든 빌드 캐시가 제거되었고 Docker 가 모든 레이어를 다시 빌드해야 하므로 가장 오랜 시간이 걸릴 것입니다.

cd ~/project/docker-cache-demo
docker build -t cache-demo .

docker builder prune --all을 사용하는 것은 가능한 한 많은 디스크 공간을 확보해야 하거나 기존 캐시에 의존하지 않고 깨끗한 빌드를 보장하려는 경우에 유용합니다. 그러나 새 캐시가 생성될 때까지 후속 빌드가 상당히 느려진다는 점을 유념해야 합니다.

요약

이 랩에서는 docker buildx prune 명령을 사용하여 Docker 빌드 캐시를 관리하는 방법을 배웠습니다. 먼저 간단한 Docker 이미지를 빌드하여 빌드 캐시를 생성하고, Docker 가 후속 빌드를 더 빠르게 하기 위해 레이어를 재사용하는 방식을 관찰했습니다.

그런 다음 빌드 캐시를 정리하는 다양한 방법을 살펴보았습니다. 필터 없이 모든 빌드 캐시를 정리하는 방법, --filter 옵션을 사용하여 최근 캐시 데이터를 유지하는 방법, --keep-storage를 사용하여 캐시 크기를 제한하는 방법, 마지막으로 --all 플래그를 사용하여 내부 이미지를 포함한 모든 빌드 캐시를 제거하는 방법을 배웠습니다. 이러한 기술은 디스크 공간을 관리하고 빌드 환경을 최적화하는 데 필수적입니다.