본문 바로가기
운영체제 (LNX,WIN)

Docker Desktop 불필요한 이미지 삭제하는 배치 스크립트

by 날으는물고기 2024. 3. 1.

Docker Desktop 불필요한 이미지 삭제하는 배치 스크립트

How to fix Docker error cannot delete docker container conflict unable to remove repository reference? - Jhooq

Windows Docker Desktop에서 이미지 목록을 가져와서 태그 값이 'none'인 이미지를 삭제하는 배치 스크립트를 작성하겠습니다. 이 스크립트는 Docker 명령어를 사용하여 'none' 태그가 있는 이미지를 찾아 삭제합니다. 아래의 스크립트를 참고하세요.

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

REM 이미지 목록을 가져옵니다.
FOR /f "tokens=*" %%i IN ('docker images -f "dangling=true" -q') DO (
    SET imageId=%%i
    REM 태그가 'none'인 이미지를 삭제합니다.
    docker rmi !imageId!
)

echo Done
ENDLOCAL

이 스크립트는 다음과 같이 동작합니다.

  1. docker images -f "dangling=true" -q 명령어를 사용하여 태그가 'none'인 이미지들의 ID를 가져옵니다.
  2. 각 이미지 ID에 대해 docker rmi 명령어를 실행하여 해당 이미지를 삭제합니다.

스크립트를 실행하기 전에 Docker Desktop이 실행 중인지 확인하고, 필요한 권한으로 스크립트를 실행해야 합니다. 또한, 실제 프로덕션 환경에서 이 스크립트를 사용하기 전에 테스트 환경에서 충분히 검증하는 것이 중요합니다.

 

Docker에서 사용되지 않고 있는 이미지만을 선택적으로 삭제하기 위해 docker image prune 명령어를 사용하거나, 이미지가 컨테이너에 사용되고 있는지 여부를 확인한 후에 이미지를 삭제해야 합니다. docker image prune 명령어는 사용되지 않는 모든 이미지를 삭제하는 가장 간단한 방법입니다. 하지만 더 세밀한 제어가 필요하다면, 아래의 스크립트를 사용할 수 있습니다.

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

REM 'dangling' 이미지들의 목록을 가져옵니다.
FOR /f "tokens=*" %%i IN ('docker images --filter "dangling=true" --format "{{.Repository}}:{{.Tag}} {{.ID}}"') DO (
    SET imageInfo=%%i
    SET imageId=!imageInfo:* =!

    REM 이미지가 사용 중인지 확인합니다.
    FOR /f "tokens=*" %%j IN ('docker ps -a --filter "ancestor=!imageId!" --format "{{.ID}}"') DO (
        SET containerId=%%j
        IF NOT "!containerId!"=="" GOTO skip_delete
    )

    REM 사용 중이지 않은 이미지를 삭제합니다.
    docker rmi !imageId!
    :skip_delete
)

echo Done
ENDLOCAL

이 스크립트는 다음 단계를 따릅니다.

  1. docker images --filter "dangling=true" 명령어를 사용하여 사용되지 않는 이미지들을 찾습니다.
  2. 각 이미지 ID에 대해 docker ps -a --filter "ancestor=<imageId>" 명령어를 사용하여 이미지가 현재 사용 중인 컨테이너에 연결되어 있는지 확인합니다.
  3. 이미지가 사용 중이지 않을 경우, 해당 이미지를 docker rmi 명령어로 삭제합니다.

이 스크립트는 사용되지 않는 이미지만을 대상으로 하지만, 실제로 실행하기 전에 중요한 데이터가 삭제되지 않도록 주의해야 합니다. 테스트 환경에서 먼저 충분히 검증한 후에 프로덕션 환경에서 사용하는 것을 권장합니다.

728x90

댓글