따라서 개인적으로 이미지와 컨테이너 모두에 대한 배포 스크립트의 일부로 최신 n 컨테이너와 이미지 만 유지하는 것이 좋습니다. Docker 이미지에 사용하는 것과 동일한 버전 관리 스키마 git tag로 태그를 지정하고 항상 최신 Docker 이미지에 "최신"태그를 지정합니다. 즉, 아무것도 정리하지 않으면 Docker 이미지가 다음과 같이 나타납니다.
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
some_repo/some_image 0.0.5 8f1a7c7ba93c 23 hours ago 925.4 MB
some_repo/some_image latest 8f1a7c7ba93c 23 hours ago 925.4 MB
some_repo/some_image 0.0.4 0beabfa514ea 45 hours ago 925.4 MB
some_repo/some_image 0.0.3 54302cd10bf2 6 days ago 978.5 MB
some_repo/some_image 0.0.2 0078b30f3d9a 7 days ago 978.5 MB
some_repo/some_image 0.0.1 sdfgdf0f3d9a 8 days ago 938.5 MB
물론 모든 이미지 (또는 컨테이너)가 모든 프로덕션 박스에서 영구적으로 돌아 가지 않게하고 싶습니다. 롤백을 위해 마지막 3 또는 4를 원하고 다른 모든 것을 제거하고 싶습니다. 유닉스 tail가 가장 친한 친구입니다. 이후 docker images및 docker ps날짜별로 모두 위해, 우리는 그냥 사용할 수 있습니다 tail제외한 모든 세 가지를 선택하고 그들을 제거 :
docker rmi $(docker images -q | tail -n +4)
너무 많은 공간을 차지하거나 오래된 이미지를 정리하지 않고 충분한 이미지 만 편안하게 롤백 할 수 있도록 배포 스크립트 (또는 로컬)와 함께 실행하십시오.
개인적으로, 나는 항상 하나의 컨테이너를 생산 상자에 보관하지만 더 많은 것을 원한다면 컨테이너와 동일한 종류의 작업을 수행 할 수 있습니다.
docker rm $(docker ps -aq | tail -n +4)
마지막으로 간단한 예제에서는 한 번에 하나의 저장소 만 처리하지만 더 많은 정보가있는 경우 동일한 아이디어로 조금 더 정교해질 수 있습니다. some_repo / some_image에서 마지막 세 이미지를 유지하고 싶다고 가정 해보십시오. 난 그냥 혼합 수 grep및 awk나의 방법에있을 :
docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)
다시 말하지만, 동일한 아이디어가 컨테이너에도 적용되지만이 시점까지 이해가 되니 예제 제공을 중단하겠습니다.