사용되지 않는 Docker 이미지 정리 방법

DockerBeginner
지금 연습하기

소개

Docker 는 애플리케이션을 개발, 배포 및 관리하는 방식을 혁신한 강력한 컨테이너화 기술입니다. Docker 를 사용하면서 시스템의 저장 공간을 낭비하는 많은 사용되지 않는 이미지가 축적될 수 있습니다. 이 튜토리얼에서는 시스템이 최적화되고 효율적으로 유지되도록 이러한 사용되지 않는 Docker 이미지를 식별하고 제거하는 방법을 안내합니다.

Docker 이미지 이해

Docker 는 개발자가 애플리케이션과 모든 종속성을 단일하고 휴대 가능한 컨테이너로 패키징할 수 있는 인기 있는 컨테이너화 플랫폼입니다. 이러한 컨테이너는 다양한 환경에서 쉽게 배포, 확장 및 관리할 수 있어 개발 및 배포 프로세스를 더욱 효율적이고 일관되게 만듭니다.

Docker 의 핵심은 컨테이너 생성의 기본 요소인 Docker 이미지입니다. Docker 이미지는 애플리케이션 코드, 라이브러리, 종속성 및 애플리케이션 실행에 필요한 다른 모든 파일을 포함하는 읽기 전용 템플릿입니다. 이러한 이미지는 일반적으로 Dockerfile 을 사용하여 생성되는데, Dockerfile 은 이미지 생성 단계를 정의하는 텍스트 기반 스크립트입니다.

Docker 이미지가 실행되면 Docker 컨테이너가 생성됩니다. 컨테이너는 실행 중인 이미지의 인스턴스입니다. 컨테이너는 격리되어 있고 가볍고 휴대 가능하여 애플리케이션이 다양한 환경에서 일관되게 실행되도록 합니다.

Docker 이미지의 기본 사항을 이해하는 것은 Docker 기반 애플리케이션을 효과적으로 관리하고 유지하는 데 필수적입니다. 이에는 효율적인 리소스 활용과 시스템 저장 공간 최소화를 위해 Docker 이미지를 생성, 관리 및 최적화하는 방법을 이해하는 것이 포함됩니다.

graph TD
    A[Docker 이미지] --> B[Docker 컨테이너]
    B --> C[애플리케이션]
    B --> D[종속성]
    B --> E[OS]

표 1: Docker 이미지의 주요 특징

특징 설명
계층 구조 Docker 이미지는 각 계층이 이미지에 적용된 변경 사항을 나타내는 계층화된 파일 시스템을 사용하여 생성됩니다. 이는 이미지 간 공통 계층의 효율적인 저장 및 공유를 가능하게 합니다.
불변성 Docker 이미지는 생성되면 수정할 수 없도록 설계된 불변성을 갖습니다. 변경 사항이 필요하면 새 이미지를 생성해야 합니다.
휴대성 Docker 이미지는 다양한 환경에서 쉽게 공유 및 배포할 수 있어 애플리케이션 동작을 일관되게 유지합니다.
캐싱 Docker 는 가능한 경우 이전 빌드에서 계층을 재사용하여 빌드 프로세스를 가속화하기 위해 캐싱을 사용합니다.

Docker 이미지의 기본 원리를 이해하면 Docker 기반 애플리케이션을 관리하고 최적화하여 효율적인 리소스 활용과 안정적인 배포를 보장할 수 있습니다.

사용되지 않는 Docker 이미지 식별

Docker 기반 애플리케이션을 계속해서 빌드하고 배포하면서 시스템에 Docker 이미지가 점점 늘어날 수 있습니다. 시간이 지남에 따라 일부 이미지는 사용되지 않거나 더 이상 필요 없게 되어 귀중한 저장 공간을 차지하게 됩니다. Docker 이미지를 효과적으로 관리하려면 사용되지 않는 이미지를 식별하고 제거하는 것이 중요합니다.

Docker 이미지 목록

사용되지 않는 Docker 이미지를 식별하는 첫 번째 단계는 시스템에 현재 존재하는 모든 이미지를 목록으로 보는 것입니다. docker images 명령어를 사용하여 이 작업을 수행할 수 있습니다.

docker images

이 명령어는 리포지토리, 태그, 이미지 ID, 생성 시간 및 크기 등 모든 Docker 이미지 목록을 표시합니다.

사용되지 않는 이미지 식별

사용되지 않는 Docker 이미지를 식별하려면 다음 전략을 사용할 수 있습니다.

  1. 매달린 이미지 (Dangling Images): 매달린 이미지는 특정 버전으로 태그되지 않고 어떤 컨테이너에도 참조되지 않는 이미지입니다. 다음 명령어를 사용하여 이러한 이미지를 식별할 수 있습니다.

    docker images -f dangling=true
    
  2. 사용되지 않는 이미지: 현재 실행 중이거나 중지된 컨테이너에서 사용되지 않는 이미지는 사용되지 않는 이미지로 간주할 수 있습니다. 다음 명령어를 사용하여 이러한 이미지를 목록으로 볼 수 있습니다.

    docker images --filter "dangling=false" --filter "reference='*/*:*'" --format "{{.Repository}}:{{.Tag}} {{.ID}} {{.Size}}"
    

    이 명령어는 매달린 이미지를 제외하고 나머지 이미지를 리포지토리, 태그, ID 및 크기와 함께 표시합니다.

  3. 시간 기반 사용되지 않는 이미지: 생성 시간을 기준으로 사용되지 않는 이미지를 식별할 수도 있습니다. 예를 들어, 30 일 이상 사용되지 않은 이미지를 목록으로 보려면 다음 명령어를 사용할 수 있습니다.

    docker images --filter "dangling=false" --filter "reference='*/*:*'" --format "{{.Repository}}:{{.Tag}} {{.ID}} {{.CreatedAt}}" | grep -v "$(date -d '30 days ago' '+%Y-%m-%d')"
    

    이 명령어는 매달린 이미지를 제외하고 나머지 이미지를 리포지토리, 태그, ID 및 생성 시간과 함께 표시한 후, 지난 30 일 동안 생성된 이미지를 제외합니다.

이러한 전략을 사용하면 시스템에서 사용되지 않는 Docker 이미지를 효과적으로 식별하여 귀중한 저장 공간을 확보하고 깨끗하고 효율적인 Docker 환경을 유지하는 데 도움이 됩니다.

사용되지 않는 Docker 이미지 제거

시스템에서 사용되지 않는 Docker 이미지를 식별한 후 다음 단계는 해당 이미지를 제거하는 것입니다. 이를 통해 귀중한 저장 공간을 확보하고 깨끗하고 효율적인 Docker 환경을 유지할 수 있습니다.

매달린 이미지 제거

매달린 이미지를 제거하려면 다음 명령어를 사용할 수 있습니다.

docker image prune

이 명령어는 태그되지 않고 어떤 컨테이너에도 참조되지 않는 매달린 이미지를 모두 제거합니다.

사용되지 않는 이미지 제거

사용되지 않는 Docker 이미지를 제거하려면 다음 명령어를 사용할 수 있습니다.

docker image rm <image_id>

<image_id>를 제거하려는 이미지의 ID 로 바꿉니다. 이미지 이름과 태그를 사용할 수도 있습니다.

docker image rm <image_name>:<image_tag>

여러 개의 사용되지 않는 이미지를 한 번에 제거하려면 다음 명령어를 사용할 수 있습니다.

docker image rm $(docker images --filter "dangling=false" --filter "reference='*/*:*'" --format "{{.ID}}")

이 명령어는 매달린 이미지가 아닌 모든 사용되지 않는 이미지를 제거합니다.

시간 기반 이미지 제거

특정 기간 동안 사용되지 않은 이미지를 제거하려면 다음 명령어를 사용할 수 있습니다.

docker image prune --filter "until=30d"

이 명령어는 지난 30 일 동안 사용되지 않은 모든 이미지를 제거합니다.

이미지 정리 자동화

사용되지 않는 Docker 이미지 정리를 자동화하려면 필요한 명령어를 주기적으로 실행하는 스크립트 또는 cron 작업을 만들 수 있습니다. 다음은 사용할 수 있는 예제 스크립트입니다.

#!/bin/bash

## 매달린 이미지 제거
docker image prune -f

## 사용되지 않는 이미지 제거
docker image rm $(docker images --filter "dangling=false" --filter "reference='*/*:*'" --format "{{.ID}}")

## 30일 이상 된 이미지 제거
docker image prune -a --filter "until=30d" -f

이 스크립트를 파일 (예: clean_images.sh) 로 저장하고 다음 명령어로 실행 가능하게 만듭니다.

chmod +x clean_images.sh

그런 다음 스크립트를 수동으로 실행하거나 정기적인 일정으로 자동 실행되도록 cron 작업을 설정할 수 있습니다.

이러한 단계를 따르면 사용되지 않는 Docker 이미지를 효과적으로 제거하고 깨끗하고 효율적인 Docker 환경을 유지할 수 있습니다.

요약

이 튜토리얼에서 설명된 단계들을 따르면 시스템에서 사용되지 않는 모든 Docker 이미지를 효과적으로 정리할 수 있습니다. 이 프로세스는 귀중한 저장 공간을 회수하고 시스템 성능을 개선하며 잘 정돈된 Docker 환경을 유지하는 데 도움이 됩니다. Docker 이미지 관리에 대한 철저한 이해를 통해 개발 및 배포 워크플로우가 효율적이고 원활하게 유지될 수 있습니다.