매달려있는 이미지 란 무엇이며 사용되지 않은 이미지는 무엇입니까?


155

docker image prune 의 docker documentation 에서 -a 플래그를 사용하여

매달린 이미지뿐만 아니라 사용되지 않은 이미지를 모두 제거하십시오.

그리고 나중에

매달려있는 이미지를 모두 제거하십시오. -a를 지정하면 컨테이너가 참조하지 않는 모든 이미지도 제거됩니다.

매달린 이미지가 무엇인지, 매달린 이미지와 사용하지 않은 이미지의 차이점이 무엇인지 설명해 줄 수 있습니까?


docker image prune (-a없이)는 정확히 동일하지만
herm

젠킨스에서 사용하면 실패합니다. 도커 이미지 캐시에 의존하면 프로덕션에서 도커 백업이 손실됩니다. prune/ 생산 recomanded되지 않는다
Jinna Balu

답변:


153

사용하지 않은 이미지는 이미지가 컨테이너에서 할당되거나 사용되지 않았 음을 의미합니다. 예를 들어docker ps -a 면 종료되고 현재 실행중인 모든 컨테이너가 나열됩니다. 컨테이너 내부에서 사용되는 것으로 표시된 모든 이미지는 "사용 된 이미지"입니다.

반면에 매달려있는 이미지는 이미지의 새 빌드를 만들었으나 새 이름이 지정되지 않았 음을 의미합니다. 따라서 이전 이미지는 "매달린 이미지"가됩니다. 이 오래된 이미지는 태그가 지정되지 않은 이미지이며 <none>실행시 이름에 " " 가 표시됩니다docker images .

를 실행하면 docker system prune -a사용하지 않는 이미지와 매달려있는 이미지가 모두 제거됩니다. 따라서 컨테이너에서 사용중인 이미지는 종료되었거나 현재 실행중인 이미지에 영향을 미치지 않습니다.


도커 정리를 실행할 때 설명서에 따르면 매달린 이미지 만 제거됩니다. -a 사용하지 않은 이미지도 올바르게 삭제되도록 하시겠습니까? docs.docker.com/engine/reference/commandline/system_prune
herm


1
매우 흥미로운. 따라서 매달린 이미지를 컨테이너에서 사용할 수 있습니다. 참고 : 태그가 지정되지 않은 이미지를 사용하는 컨테이너가 있으면 Docker가 경고합니다.
herm

7
docker system prune --all --filter "until=24h"최신 이미지도 보존합니다
Harry Moreno

1
docs.docker.com/engine/reference/commandline/system_prune/… 에 따르면 docker system prune -a중지 된 컨테이너도 제거합니다. 따라서 종료 된 컨테이너와 관련된 이미지 만 제거해야합니까?
lfk

41

매달려있는 이미지를 정리하는 가장 안전하고 쉬운 방법

docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi

도커 이미지는 여러 레이어로 구성됩니다. 매달려있는 이미지는 태그가 지정된 이미지와 관련이없는 레이어입니다. 더 이상 목적을 제공하지 않으며 디스크 공간을 소비합니다.

참고 : prune프로덕션에서는 사용하지 않는 것이 좋습니다.docker system prune -a . 컨테이너에서 참조하지 않는 모든 이미지는 제거 이전 릴리스로 롤백 할 수 없습니다.

필터 플래그를 추가함으로써 화상 매달려 나열 -f값의로 dangling=true받는docker images .

매달려있는 이미지 목록

docker images -f dangling=true

매달려있는 이미지 제거

docker rmi $(docker images -f dangling=true -q)

또는

docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi

매달려있는 항목을 삭제하기 위해 cron 작업을 실행할 때 위의 작업을 사용하여 작업이 성공적으로 실행되도록하십시오. Jenkins와 마찬가지로 belowow commad 작업으로 자유 스타일 작업을 실행하면 컴퓨터에 매달려있는 물건이 없어도 절대 실패하지 않습니다.

이것은 매달린 이미지를 정리하고 사용하기 위해 디스크 공간을 다시 확보하는 가장 안전하고 쉬운 방법입니다.


2
도커 이미지 자두는 어떻습니까? 문서에 다음과 같이 말합니다. "매달린 이미지를 모두 제거합니다. -a를 지정하면 컨테이너에서 참조하지 않는 모든 이미지도 제거됩니다." docs.docker.com/engine/reference/commandline/image_prune/…
herm

2
@herm, 페이지 하단에서 "참고 : 자두가 제거하기 전에 확인 메시지가 표시되지만 제거 될 항목의 목록이 표시되지 않습니다." 이 답변의 요점은 매달린 이미지의 목록을 얻을 수 있다는 것입니다. 다시 매달려있는 모든 매달린 이미지를 맹목적으로 제거하는 것과는 달리 명시 적으로 제거하도록 지정합니다.
bzier

이름과 태그가없는 이미지 docker images는 매달려 있습니다. 그들의 크기를 확인하는 방법? 또한 이름과 태그가없는 docker images -a이미지는 중간 이미지입니다. 삭제하고 크기를 확인하는 방법은 무엇입니까?
변수

17

docker의 이미지는 sha256 다이제스트에 의해 참조되며 종종 이미지 ID라고합니다. 이 다이제스트는 이미지가 docker 호스트에 존재하는 데 필요한 전부입니다. 일반적으로 이러한 다이제스트를 가리키는 태그가 있습니다. 예를 들어 busybox : latest current는 내 시스템의 이미지 ID c30178c523 ...을 가리 킵니다. 여러 개의 태그가 동일한 이미지를 가리킬 수 있으며, 예를 들어 busybox : latest의 새 사본을 가져 오거나 새 버전의 애플리케이션 이미지를 빌드 할 때와 같이 다른 ID를 가리 키도록 태그를 변경할 수 있습니다.

매달려있는 이미지는 태그가없고 자식 이미지가없는 이미지입니다 (예 : 다른 버전의 FROM busybox:latest 가리키는 . 이전에 태그를 가리키고 나중에 태그가 변경되었을 수 있습니다. 또는 태그가 없었을 수도 있습니다 (예 : docker build태그 옵션을 포함하지 않은 출력 ). 이전 이미지 ID를 참조하는 컨테이너가 아직 실행되지 않는 한 일반적으로 제거하는 것이 안전합니다. 이를 유지하는 주된 이유는 빌드 캐싱 목적입니다.

또한 컨테이너 (중지 된 컨테이너 포함)에서 현재 사용하지 않는 이미지를 다운로드했을 수 있습니다. 이 이미지는 매달려있는 이미지와는 완전히 다르므로 나중에 사용할 계획이 없거나 필요할 때 다른 사본을 다운로드하지 않아도되는 경우 제거해도 안전 할 수 있습니다.


도커 빌드가 실행되는 동안 (이후에 매달려있는 이미지에 대한 레이어 및 가능한 후보를 작성하는 프로세스) 도커 이미지 프룬을 실행하면 새 창에서 진행중인 빌드에 어떤 영향을 미칩니 까?
변수

@variable 거기에 경쟁 조건이있을 수 있지만 일반적으로 빌드 단계의 컨테이너가 실행되면 이미지가 사용중인 것으로 식별됩니다. 발생할 수있는 최악의 상황은 정리가 오류를 발생 시키거나 빌드가 수행하는 것이므로 다시 실행해야합니다. 성공적인 프룬이 향후 빌드에서 이미지를 다시 다운로드해야하기 때문에 현재 빌드에 사용중인 이미지를 피하기 위해 프룬을 제한 할 수 있는지 여부를 조사합니다.
BMitch

중간 이미지 (달릴 때 이름 / 태그가 표시되지 않은 docker images -a이미지)를 매달려있는 이미지라고도합니까? 그들은 docker image prune으로 지워 집니까?
변수

더 이상 내 환경에있는 사람들이 없으므로 (여기서는 buildkit 사용) 실험실 환경에서 어떤 일이 일어나고 있는지 확인하는 것이 좋습니다.
BMitch

즉, 최종 단계 이미지를 삭제하지 않으면 중간 단계에서 태그가없는 "이미지"를 삭제하는 것은 무의미합니다. 모든 레이어가 이후 이미지에서 재사용되어 삭제할 수 없습니다. 삭제하면 빌드 캐시가 손상되고 향후 모든 이미지를 빌드하고 디스크 공간을 저장하는 데 시간이 더 걸립니다.
BMitch

5

매달려있는 이미지는 태그가 지정된 이미지와 관련이없는 레이어입니다. 더 이상 목적을 제공하지 않으며 디스크 공간을 소비합니다.

사용하지 않은 이미지는 컨테이너에 할당되거나 사용되지 않은 이미지입니다.

매달려있는 이미지 목록

docker images -f dangling=true

3

매달려있는 이미지는 태그가없는 이미지입니다. 다음 명령은 매달려있는 이미지 목록을 제공합니다.

docker images --filter "dangling=true"

docker image prune 매달려있는 이미지를 모두 삭제합니다.

사용하지 않은 이미지는 태그가 있지만 현재 컨테이너로 사용되지 않는 이미지입니다. 나중에 필요할 수도 있고 필요하지 않을 수도 있습니다.

docker image prune -a 매달린 이미지와 사용하지 않은 이미지를 모두 삭제합니다.

일반적으로 어느 때까지 사용하지 않은 모든 이미지를 제거하고 싶지 않습니다. 따라서 필터로 제거하는 것이 좋습니다.

docker image prune -f --filter "until=6h"


1) docker image prune -a -f --filter "until=6h"매달려있는 이미지도 삭제 합니까 ?
변수

2) 마지막 명령에서 docker image prune -f --filter "until=6h"-a가 없기 때문에 사용하지 않은 이미지를 어떻게 제거합니까?
변수

0

https://forums.docker.com/t/how-to-delete-cache/5753 : 매달린 이미지를 제거하는 유용한 명령 (별칭)을 보았습니다 .

alias docker_clean_images='docker rmi $(docker images -a --filter=dangling=true -q)' 
alias docker_clean_ps='docker rm $(docker ps --filter=status=exited --filter=status=created -q)' 

첫 번째는 매달린 이미지를 모두 청소합니다. 여러 빌드에서 남은 중간 이미지를 제거하는 데 유용합니다. 두 번째는 중지 된 컨테이너를 제거하기위한 것입니다. 일상적인 유지 관리에 사용하는 별칭입니다.

모든 캐시를 제거하려면 먼저 컨테이너가 사용중인 이미지를 제거 할 수 없으므로 모든 컨테이너를 중지하고 제거해야합니다. 그래서 비슷한

docker kill $(docker ps -q) docker_clean_ps docker rmi $(docker images
-a -q)

이것은 캐시의 모든 이미지를 죽이고 제거합니다.


0

이미지 스크린 샷에서 "없음"이름은 매달려있는 이미지입니다. 매달려있는 이미지는 이미지의 새 빌드를 만들었으나 새 이름이 지정되지 않았 음을 의미합니다. 따라서 이전 이미지는 "매달린 이미지"가됩니다. 이 오래된 이미지는 태그가 지정되지 않은 것이며 도커 이미지를 실행할 때 이름에 ""가 표시됩니다.

docker system prune -a사용하지 않는 이미지와 매달려있는 이미지를 모두 제거합니다. 따라서 컨테이너에서 사용중인 이미지는 종료되었거나 현재 실행중인 이미지에 영향을 미치지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.