도커 이미지, 컨테이너 및 볼륨 제거 방법

소개

Docker는 응용 프로그램 및 서비스를 컨테이너로 랩핑하여 어디에서나 실행할 수 있도록 만드는 것이 쉽습니다. 그러나 Docker를 사용하면 사용하지 않는 이미지, 컨테이너 및 데이터 볼륨이 불필요하게 많이 축적되어 출력을 혼란스럽게 만들고 디스크 공간을 소비하는 것도 쉽습니다.

Docker는 명령 줄에서 시스템을 정리하는 데 필요한 모든 도구를 제공합니다. 이 치트 시트 형식의 가이드는 사용하지 않는 Docker 이미지, 컨테이너 및 볼륨을 제거하여 디스크 공간을 확보하고 시스템을 정리하는 데 유용한 명령어에 대한 빠른 참조를 제공합니다.

이 가이드 사용 방법:

  • 이 가이드는 자체 포함된 명령 줄 코드 스니펫으로 치트 시트 형식입니다.
  • 완료하려는 작업과 관련된 섹션으로 이동하십시오.

참고: 명령어에서 사용된 command $(command) 대체 구문은 bash, zsh, 그리고 Windows Powershell과 같은 많은 인기있는 셸에서 사용할 수 있습니다.Docker 응용 프로그램을 라이브 서버에 1-클릭으로 배포하려면 DigitalOcean App Platform을 확인하세요.

도커 애플리케이션을 라이브 서버에 1번의 클릭으로 배포하려면 DigitalOcean App Platform을 살펴보세요.

사용되지 않거나 흔적이 없는 이미지, 컨테이너, 볼륨 및 네트워크 전체 삭제

도커는 태그가 지정되지 않거나 컨테이너와 연결되지 않은 자원인 흔적이 없는(not tagged or associated with a container) 이미지, 컨테이너, 볼륨 및 네트워크를 정리하는 단일 명령어를 제공합니다:

docker system prune

명령어에 -a 플래그를 추가하여 중지된 모든 컨테이너와 사용되지 않은 모든 이미지(흔적이 없는 이미지뿐만 아니라)를 제거할 수 있습니다:

docker system prune -a

도커 이미지 삭제

하나 이상의 특정 이미지 제거

docker images 명령어에 -a 플래그를 사용하여 삭제할 이미지의 ID를 찾습니다. 이렇게 하면 모든 이미지, 중간 이미지 레이어를 포함하여 보여줍니다. 삭제할 이미지를 찾으면 ID나 태그를 docker rmi에 전달할 수 있습니다.

목록:

docker images -a

삭제:

docker rmi Image Image

주의: docker images 명령어의 -a 또는 --all 플래그는 모든 Docker 이미지를 보여줍니다. 이는 태그로 참조되지 않은 중간 이미지도 포함합니다. 기본적으로, docker images는 적어도 하나의 태그를 가진 이미지만 보여줍니다. 그러나 태그가 없는 이미지들이 시스템에 디스크 공간을 차지하고 있을 수도 있습니다. -a 플래그는 디스크 공간을 절약하기 위해 삭제할 수 있는 이미지를 식별하는데 도움이 될 수 있습니다. docker rmi 명령어와 함께 사용할 때, -f 또는 --force 플래그를 사용하여 태그가 없는 이미지를 삭제할 수도 있습니다.

허리딩 Docker 이미지 삭제

Docker 이미지는 여러 레이어로 구성되어 있습니다. 허리딩(hanging) 이미지는 태그가 없는 이미지와 관계가 없는 레이어들을 의미합니다. 이 이미지들은 더이상의 목적을 갖고 있지 않고 디스크 공간을 차지합니다. docker images 명령어에 -f 필터 플래그를 dangling=true 값으로 추가하여 찾을 수 있습니다. 삭제하고자 한다면 docker image prune 명령어를 사용할 수 있습니다:

참고: 태그를 붙이지 않고 이미지를 빌드하면 태그가 없기 때문에 떠다니는 이미지 목록에 표시됩니다. 빌드할 때 태그를 제공하여 이 상황을 피할 수 있으며, 이미지에 docker tag 명령을 사용하여 나중에 태그를 할당할 수 있습니다.

목록:

docker images -f dangling=true

제거:

docker image prune

패턴에 따라 이미지 제거

docker imagesgrep의 조합을 사용하여 패턴과 일치하는 모든 이미지를 찾을 수 있습니다. 만족스러운 경우 awk를 사용하여 ID를 docker rmi에 전달하여 삭제할 수 있습니다. 이러한 유틸리티는 Docker에서 제공되지 않으며 모든 시스템에서 필요하지 않을 수 있습니다:

목록:

docker images -a |  grep "pattern"

제거:

docker images -a | grep "pattern" | awk '{print $1":"$2}' | xargs docker rmi

모든 이미지 제거

시스템의 모든 Docker 이미지는 docker images 명령에 -a를 추가하여 나열할 수 있습니다. 모두 삭제하려는지 확인한 후에는 이미지 ID를 docker rmi에 전달하기 위해 -q 플래그를 추가할 수 있습니다:

목록:

docker images -a

제거:

docker rmi $(docker images -a -q)

컨테이너 제거

하나 이상의 특정 컨테이너 제거

-a 플래그를 사용하여 삭제하려는 컨테이너의 이름 또는 ID를 찾기 위해 docker ps 명령을 사용하세요:

목록:

docker ps -a

제거:

docker rm ID_or_Name ID_or_Name

종료시 컨테이너 제거

실행하고 삭제:

docker run --rm image_name

종료된 모든 컨테이너 제거

완료 후 유지하지 않을 컨테이너를 만들 때, docker run --rm을 실행하여 자동으로 삭제할 수 있습니다.

목록:

docker ps -a -f status=exited

제거:

docker rm $(docker ps -a -f status=exited -q)

여러 필터 사용하여 컨테이너 제거

필터는 추가 값과 함께 필터 플래그를 반복하여 결합할 수 있습니다. 이렇게 하면 두 조건 중 하나를 충족하는 컨테이너 목록이 생성됩니다. 예를 들어, created (유효하지 않은 명령으로 컨테이너를 실행할 때 발생할 수 있는 상태) 또는 exited로 표시된 모든 컨테이너를 삭제하려면 두 개의 필터를 사용할 수 있습니다:

목록:

docker ps -a -f status=exited -f status=created

제거:

docker rm $(docker ps -a -f status=exited -f status=created -q)

패턴에 따라 컨테이너 제거

docker psgrep을 조합하여 패턴과 일치하는 모든 컨테이너를 찾을 수 있습니다. 원하는 목록을 얻었다고 확신하면 awkxargs를 사용하여 docker rm에 ID를 제공할 수 있습니다. 이러한 유틸리티는 Docker에서 제공되지 않으며 모든 시스템에서 사용 가능하지는 않을 수 있습니다:

목록:

docker ps -a |  grep "pattern

제거:

docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm

모든 컨테이너를 중지하고 제거하세요.

시스템의 컨테이너를 docker ps 명령어로 확인할 수 있습니다. -a 플래그를 추가하면 모든 컨테이너가 표시됩니다. 삭제하려고 확신할 때 docker stopdocker rm 명령에 ID를 제공하기 위해 -q 플래그를 추가할 수 있습니다:

목록:

docker ps -a

제거:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

볼륨 제거

하나 이상의 특정 볼륨을 제거합니다.

docker volume ls 명령을 사용하여 삭제하려는 볼륨 이름을 찾을 수 있습니다. 그런 다음 docker volume rm 명령을 사용하여 하나 이상의 볼륨을 제거할 수 있습니다:

목록:

docker volume ls

제거:

docker volume rm volume_name volume_name

매달린 볼륨 제거하기

볼륨의 목적은 컨테이너와 독립적으로 존재하는 것이므로 컨테이너가 제거되면 볼륨은 자동으로 제거되지 않습니다. 볼륨이 존재하고 더 이상 어떤 컨테이너에도 연결되지 않을 때 이를 매달린 볼륨이라고 합니다. 이러한 볼륨을 확인하고 제거하려면 docker volume ls 명령을 사용하여 결과를 매달린 볼륨으로 제한하는 필터를 적용할 수 있습니다. 목록을 확인한 후에는 모두 제거할 수 있습니다. docker volume prune을 사용하세요:

목록:

docker volume ls -f dangling=true

제거:

docker volume prune

컨테이너와 해당 볼륨 제거하기

이름이 없는 볼륨을 생성하면 -v 플래그와 함께 컨테이너와 동시에 삭제할 수 있습니다. 이는 이름이 없는 볼륨에만 해당됩니다. 컨테이너가 성공적으로 제거되면 해당 ID가 표시됩니다. 볼륨의 제거에 대한 언급이 없습니다. 이름이 없으면 시스템에서 조용히 제거됩니다. 이름이 지정된 경우 조용히 남아 있습니다.

제거:

docker rm -v container_name

결론

이 가이드는 Docker를 사용하여 이미지, 컨테이너 및 볼륨을 제거하는 데 사용되는 몇 가지 일반적인 명령을 다룹니다. 각각에 사용할 수 있는 많은 다른 조합과 플래그가 있습니다. 사용 가능한 내용에 대한 포괄적인 가이드는 Docker 문서에서 docker system prune, docker rmi, docker rm, 및 docker volume rm을 참조하십시오. 가이드에 보고 싶은 공통 정리 작업이 있으면 댓글에서 요청하거나 제안하십시오.

Docker 컨테이너의 다른 구성 요소를 자세히 살펴보려면 Docker 생태계: 일반 구성 요소 소개를 확인하십시오.

Source:
https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes