오래된 Docker 컨테이너를 제거하는 방법


14 Answers

Guillaume J. Charmes (신용이 만기가되는 곳)에서 얻은 또 다른 방법 :

docker rm `docker ps --no-trunc -aq`

모든 컨테이너를 우아한 방법으로 제거합니다.

Bartosz Bilicki (Windows 용) :

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

PowerShell의 경우 :

docker rm @(docker ps -aq)

Docker 1.13 (Q4 2016) 업데이트, VonC 대한 크레딧 ( 이 스레드의 뒷 부분 ) :

docker system prune 은 사용하지 않은 모든 데이터를 삭제합니다 (예 : 컨테이너가 중지됨, 컨테이너가없는 볼륨 및 컨테이너가없는 이미지).

PR 2610886de7c0 커밋을 참조하십시오.이 명령은 Docker 데몬 데이터가 디스크에서 차지하는 공간을 시각화하고 "불필요한"초과 작업을 손쉽게 정리할 수 있도록 몇 가지 새로운 명령을 도입합니다.

docker system prune

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y
Question

이 질문은 과도한 비 작동 Docker 컨테이너에 대해 우려해야합니까? .

나는 오래된 컨테이너를 제거하는 방법을 궁금해. docker rm 3e552code34a 사용하면 하나만 제거 할 수 있지만 이미 많은 작업이 있습니다. docker rm --help 는 선택 옵션 (전부 또는 이미지 이름과 같은)을 제공하지 않습니다.

어쩌면 이러한 컨테이너를 수동으로 쉽게 삭제할 수있는 곳에 이러한 디렉토리가 저장되는 디렉토리가 있습니까?







따라서 가장 최근의 n 개의 컨테이너와 이미지 만 유지하는 이미지와 컨테이너 모두에 대한 배포 스크립트의 일부로이 작업을 개인적으로 수행하는 것이 좋습니다. git tag 와 함께 사용하는 동일한 버전 관리 스키마로 도커 이미지에 태그를 지정하고 최신 도커 이미지에 항상 "최신"태그를 지정합니다. 즉, 아무 것도 정리하지 않으면 내 부두 이미지가 다음과 같이 보이게됩니다.

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 imagesdocker ps 둘 다 날짜순으로 정렬되기 때문에 tail 를 사용하여 최상위 3 개를 제외한 모든 것을 선택하고 제거 할 수 있습니다.

docker rmi $(docker images -q | tail -n +4)

배포 스크립트 (또는 로컬)와 함께 실행하면 너무 많은 공간을 차지하거나 오래된 이미지를 어지럽히 지 않고 편안하게 롤백 할 수있는 충분한 이미지를 항상 유지할 수 있습니다.

개인적으로는 언제든지 하나의 컨테이너 만 제 제작 상자에 보관할 수 있지만 원하는 경우 컨테이너로 같은 종류의 작업을 수행 할 수 있습니다.

docker rm $(docker ps -aq | tail -n +4)

마지막으로, 단순화 된 예제에서는 한 번에 하나의 Repo 만 처리하지만, 더 많은 정보가 있으면 동일한 아이디어로 좀 더 정교해질 수 있습니다. some_repo / some_image에서 마지막 3 개의 이미지를 유지하려고합니다. grepawk 섞어서 내 방식대로 사용할 수 있습니다.

docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)

다시 한 번 같은 생각이 컨테이너에 적용되지만이 시점까지는 이해할 수 있으므로 예제를 제공하지 않을 것입니다.




울지 않고 모든 컨테이너를 제거하려면 :

sudo docker ps -a | grep -v CONTAINER | awk '{print $1}' | xargs --no-run-if-empty sudo docker rm -f



가장 오래된 컨테이너 5 개를 제거하십시오.

docker rm `docker ps -aq | tail -n 5`

몇 개의 컨테이너가 남아 있는지 확인하십시오.

docker ps -aq | wc -l



업데이트 : Docker 버전 1.13 (2017 년 1 월에 출시 됨)에서 다음 명령을 실행하여 중지 된 컨테이너, 사용되지 않은 볼륨, 매달려있는 이미지 및 사용되지 않은 네트워크를 정리할 수 있습니다.

docker system prune

exited 상태의 컨테이너 만 삭제하려는 경우 다음을 사용하십시오.

docker ps -aq -f status=exited | xargs docker rm

마찬가지로, 도커 물건을 청소하는 경우 태그가 지정되지 않은 이름없는 이미지는 다음과 같이 제거 할 수 있습니다.

docker images -q --no-trunc -f dangling=true | xargs docker rmi



중지 된 모든 컨테이너를 제거하십시오.

docker rm $(docker ps -a | grep Exited | awk '{print $1}')

pauk960 의 의견에서 :

버전 1.3.0 부터 grep Exited 대신 grep Exited docker ps -a -f status=exited docker ps 필터를 docker ps 와 함께 사용할 수 있습니다. 그리고 함께 -q 를 사용하면 전체 출력 대신 컨테이너 ID 만 얻을 수 있으므로 awk를 사용할 필요가 없습니다.




먼저 컨테이너를 제거하기 전에 실행중인 컨테이너를 중지하십시오.

실행중인 컨테이너 제거

docker rm $(docker stop -t=1 $(docker ps -q))

그 대신에 stop kill 을 사용할 수 있습니다. 내 경우에는 내가 그들을 다시 실행하는 경향이 있기 때문에 매번 새로운 것을 만드는 경향이 있기 때문에 나는 그들을 멈추게한다. 그래서 나는 그들을 매끄럽게 종료하려고 노력한다.

참고 : 컨테이너를 중지하려고하면 오류가 발생합니다.

오류 : 실행중인 컨테이너를 제거 할 수 없습니다. 먼저 중지하십시오.

모든 컨테이너를 제거하십시오.

docker rm $(docker ps -a -q)



Ubuntu 14.04 (Trusty Tahr) :

$ for CON in `docker ps -qa`; do docker rm $CON ; done

이것은 단지 일반적인 Bash 명령이므로 모든 Bash 호환 터미널에서 작동해야합니다.




나는 항상 docker rmi $(docker ps -a -q) 를 사용하여 모든 이미지를 제거합니다.

docker rmi 실패하면 /var/lib/docker/graph 디렉토리를 제거 할 수 있습니다.




https://github.com/HardySimpson/docker-cleanup

도커 정리

작은 올인원 셸로 다음을 제거합니다.

  • 1 일 이상 지나지 않은 컨테이너
  • 남아있는 컨테이너에 속하지 않는 이미지

crontab 작업으로 실행하려고합니다.

특색

  • <none>:<none> 이미지를 모두 제거합니다 <none>:<none>
  • 이미지에 여러 개의 repo : tag 참조가 있으면 컨테이너를 실행하는 경우를 제외하고 모든 repo : tag가 제거됩니다. 실제로 그것은 "docker rmi"의 본질입니다.
  • 많은 오류 메시지가 화면에 표시되고 2>/dev/null 결정할 수 있습니다.
  • docker-gc에서 무엇인가를 배우고 그 문제를 해결하십시오 (repo : tag가 여러 개있는 이미지는 삭제할 수 없습니다)



공식적인 방법 은 다음과 같습니다.

docker rm `docker ps -aq`

Docker 관리자는 명령을 내릴 필요가 없다고 말했고 다음과 같은 명령을 작성합니다.

앞서 Docker에 코드를 추가하지 않고도 위의 줄을 사용하도록 사용자를 선호했습니다.




docker rm --force `docker ps -qa`



중지 된 컨테이너 만 제거 할 수 있습니다. 처음에는 그 모든 것을 멈추십시오.

docker stop $(docker ps -a -q)

그런 다음

docker rm $(docker ps -a -q)




Docker 1.13 (Q4 2016)을 사용하면 다음과 같은 이점을 얻을 수 있습니다.

docker system prune 은 사용하지 않은 모든 데이터를 삭제합니다 (예 : 컨테이너가 중지됨, 컨테이너가없는 볼륨 및 컨테이너가없는 이미지).

PR 2610886de7c0 커밋을 참조하십시오.이 명령은 Docker 데몬 데이터가 디스크에서 차지하는 공간을 시각화하고 "불필요한"초과 작업을 손쉽게 정리할 수 있도록 몇 가지 새로운 명령을 도입합니다.

docker system prune 

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

wjv 주석으로,

docker {container,image,volume,network} prune . 이것은 한 유형의 객체 만 사용하지 않는 인스턴스를 제거하는 데 사용할 수 있습니다.

커밋 913e5cb 에서 도입되었으며, Docker 1.13+에만 해당됩니다.

docker container prune



Related



Tags

docker docker