2024. 11. 17. 16:09ㆍDocker
ID나 이름이 없는 이미지는 보통 dangling images로 불리며, 도커를 사용하다 보면 자연스럽게 생성될 수 있는 이미지입니다. 이를 잘 이해하고 관리하면 디스크 공간을 절약하고, 시스템 혼란을 방지할 수 있습니다.
1. dangling images란?
정의
- dangling images는 태그가 없는 이미지로, 특정 컨테이너나 도커 프로젝트와 더 이상 연결되지 않은 상태입니다.
- 이런 이미지는
docker images
명령어를 실행했을 때,REPOSITORY
와TAG
컬럼에<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) 새로운 태그를 지정하지 않은 경우
이미지를 빌드할 때 태그를 추가하지 않으면, 이미지가 REPOSITORY
와 TAG
가 없는 상태로 남게 됩니다. 예를 들어:
docker build -t my-app .
위 명령에서는 태그를 지정하지만, 아래와 같이 태그를 생략하면 dangling image가 생성될 수 있습니다:
docker build .
(2) 이미지를 업데이트하거나 재구축한 경우
기존 이미지에서 업데이트를 수행하면, 새로운 이미지 레이어가 생성됩니다. 이전 레이어는 더 이상 참조되지 않아 dangling image가 됩니다.
예:
docker build -t my-app:v1 .
명령으로 이미지를 생성함.- 코드 변경 후
docker build -t my-app:v2 .
명령을 실행. 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 |