Dangling images

2024. 11. 17. 16:09Docker

ID나 이름이 없는 이미지는 보통 dangling images로 불리며, 도커를 사용하다 보면 자연스럽게 생성될 수 있는 이미지입니다. 이를 잘 이해하고 관리하면 디스크 공간을 절약하고, 시스템 혼란을 방지할 수 있습니다.


1. dangling images란?

정의

  • dangling images태그가 없는 이미지로, 특정 컨테이너나 도커 프로젝트와 더 이상 연결되지 않은 상태입니다.
  • 이런 이미지는 docker images 명령어를 실행했을 때, REPOSITORYTAG 컬럼에 <none>으로 표시됩니다.

생성 시점

  • 도커 이미지를 빌드할 때 새로운 태그를 지정하지 않은 경우.
  • 기존 이미지를 업데이트하거나 재구축하면서 더 이상 참조되지 않게 된 오래된 이미지 레이어.
  • 컨테이너 실행 중 실패한 빌드 과정에서 생성된 중간 레이어.

표시 예시

docker images 명령 실행 시:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              123abc456def        2 weeks ago         120MB
my-app              latest              456def789ghi        3 days ago          200MB

위에서 <none>으로 표시된 이미지가 dangling image입니다.


2. dangling images 생성 이유

(1) 새로운 태그를 지정하지 않은 경우

이미지를 빌드할 때 태그를 추가하지 않으면, 이미지가 REPOSITORYTAG가 없는 상태로 남게 됩니다. 예를 들어:

docker build -t my-app .

위 명령에서는 태그를 지정하지만, 아래와 같이 태그를 생략하면 dangling image가 생성될 수 있습니다:

docker build .

(2) 이미지를 업데이트하거나 재구축한 경우

기존 이미지에서 업데이트를 수행하면, 새로운 이미지 레이어가 생성됩니다. 이전 레이어는 더 이상 참조되지 않아 dangling image가 됩니다.

예:

  1. docker build -t my-app:v1 . 명령으로 이미지를 생성함.
  2. 코드 변경 후 docker build -t my-app:v2 . 명령을 실행.
  3. my-app:v1에 해당하는 중간 레이어가 dangling image로 남게 됨.

(3) 중간 단계 실패

도커 이미지를 빌드하거나 컨테이너를 생성하는 중간 과정에서 에러가 발생하면, 중간 상태의 이미지가 dangling image로 남을 수 있습니다.


3. dangling images 확인 방법

(1) 모든 이미지 목록 확인

docker images 명령어로 전체 이미지를 확인할 수 있습니다. 결과에서 <none>으로 표시되는 항목이 dangling image입니다:

docker images

출력 예:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              123abc456def        2 weeks ago         120MB
my-app              latest              456def789ghi        3 days ago          200MB

(2) dangling images만 필터링

특정적으로 dangling images만 확인하려면 아래 명령어를 사용하세요:

docker images --filter dangling=true

출력 예:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              123abc456def        2 weeks ago         120MB

4. dangling images가 문제를 일으킬 수 있는 이유

(1) 디스크 공간 낭비

dangling images는 더 이상 사용되지 않음에도 도커 레이어 캐시에 계속 저장되어 디스크 공간을 차지합니다. 시스템이 오래 사용할수록 쌓이는 공간이 상당해질 수 있습니다.

예: 5GB 크기의 이미지 레이어를 여러 번 빌드하면 몇 주 후 디스크 사용량이 수십 기가바이트에 이를 수 있습니다.

(2) 작업 혼란

docker images 목록에 불필요한 이미지가 많으면 어떤 이미지를 사용해야 할지 혼란을 초래할 수 있습니다. 특히 여러 프로젝트를 병렬로 관리할 때 문제가 됩니다.


5. dangling images 삭제 방법

dangling images는 대부분 불필요하기 때문에, 삭제를 통해 디스크 공간을 확보하고 관리 효율성을 높일 수 있습니다.

(1) 특정 dangling image 삭제

이미지 ID를 확인한 뒤, 아래 명령어로 특정 이미지만 삭제할 수 있습니다:

docker rmi <IMAGE_ID>

예:

docker rmi 123abc456def

(2) 모든 dangling images 삭제

모든 dangling images를 한 번에 삭제하려면 docker image prune 명령어를 사용합니다:

docker image prune

출력 예:

WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
123abc456def

추가 옵션

  • -f 옵션을 사용하면 경고 없이 바로 삭제됩니다:
    docker image prune -f

(3) dangling images 포함한 모든 이미지 삭제

현재 사용 중인 이미지를 제외한 모든 중간 이미지 레이어를 포함하여 삭제하려면 -a 옵션을 추가합니다:

docker image prune -a

이 명령어는 사용하지 않는 이미지 전체를 삭제하므로 신중하게 사용해야 합니다.


6. dangling images 방지 방법

(1) 이미지를 빌드할 때 태그 지정

이미지를 빌드할 때 명확히 태그를 지정하여 dangling images가 생성되지 않도록 합니다:

docker build -t my-app:latest .

(2) 불필요한 이미지 정기 삭제

정기적으로 docker image prune 명령을 사용하여 필요 없는 이미지를 정리합니다.

(3) 사용하지 않는 컨테이너 삭제

dangling images는 오래된 컨테이너에서 생성될 수 있으므로 사용하지 않는 컨테이너도 삭제합니다:

docker container prune

요약

  • dangling images는 태그가 없거나 참조되지 않는 이미지입니다.
  • 디스크 공간을 낭비하고 관리 효율성을 떨어뜨릴 수 있으므로 정기적으로 삭제하는 것이 좋습니다.
  • 삭제 방법으로는 docker image prune 또는 docker rmi 명령어를 사용합니다.
  • 빌드 시 태그를 명확히 지정하고 정기적으로 정리하여 문제를 예방할 수 있습니다.

'Docker' 카테고리의 다른 글

wget 커맨드  (0) 2024.11.17
Digest  (0) 2024.11.17
Docker Redis  (0) 2024.04.07
11 Services with Docker and Compose  (0) 2024.04.07
10 Image pipelines  (0) 2024.04.07