IT/기초 지식

[Docker] Docker에서 사용하지 않는 오브젝트를 삭제하는 "prune" 커맨드와 옵션

개발자 두더지 2022. 1. 28. 21:50
728x90

 Docker에서는 불필요한 것을 삭제하는 garbage collection으로 prune 커맨드를 사용한다. 이러한 prune 커맨드에는 다양한 옵션이 있는데,  예를 들어 컨테이너 정지된 후 몇 시간 동안 사용하지 않은 오브젝트를 삭제할 것인지 시간을 지정할 수 있고 날짜를 지정할 수 있다.  

 

예시 : 정지된지 24시간이 지난 컨테이너, 이미지 및 네트워크 삭제하기


$ docker system prune -a --filter "until=24h"
...
Are you sure you want to continue? [y/N]  ←여기서「y」+「Enter」를 입력하면 처리가 진행된다.
  • -a는 --all로, build 캐쉬랑 중간 이미지(태그가 없는 이미지)도 삭제한다. 개발 환경에서는 역으로 영향이 발생할 수도 있기 때문에, 경우에 따라 지정하지 않는 편이 성능이 올라갈 가능성이 있다.
  • --filter "until=24h" 는 컨테이너가 정지된지 24시간이 지난 것을 삭제한다는 뜻이다. 그리고 여기에 엮여져 있는 미사용 이미지, 네트워크도 함께 삭제된다. 극단적이지만 until=1m으로 하면 1분이 지정된다.

 그리고 그 외에 -f 옵션이 있다. -f은 --force로 확인 프롬프터 없이 바로 삭제되므로 위험한 옵션이다. 따라서 사용시에 주의를 요한다.

 한편, 컨테이너에서 사용되지 않은 Docker 볼륨을 삭제하기 위해서는 아래의 커맨드를 사용한다.  다만, Docker 볼륨에 대해서는 --filter과 until를 함께 사용하는 것이 안된다.

docker system prune --volumes

 

 삭제한 후에 docker의 용량이 얼만큼 남았는지, 확인하기 위해서는 docker system df로 확인할 수 있다.

$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              0                   0                   0B                  0B
Containers          0                   0                   0B                  0B
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B

 이제 각각 삭제하는 방법에 대해 살펴보자.

 

 

Docker 컨테이너의 prune


docker container prune

 정지되어 있는 컨테이너를 한꺼번에 삭제해주는 커맨드이다. 확인 화면을 표시할 필요할 필요가 없는 경우에, -f(--force)옵션을 사용할 수 있다.

docker container prune -f

 앞서 말했듯, 날짜도 지정할 수 있다. 날짜의 경우는 아래와 같이 지정한다.

docker container prune --filter "until=2020-06-01"

 

 

Docker 이미지와 컨테이너의 prune


docker image prune
docker network prune

 

 

Docker 볼륨만의 prune


$ docker volume prune

 라벨을 지정해서 삭제하는 것도 가능하다. prod 라벨이 아닌 것을 삭제하는 방법은 다음과 같다.

$ docker volume prune --filter "label!=prod"

 

 

전부 한번에 prune


 맨 앞에서 말했듯, docker system prune -a를 사용하면,

  • 정지중인 컨테이너
  • 컨테이너에서 사용되고 있지 않은 네트워크
  • dangling 이미지 (build 과정에서 생성되어, 태그가 붙어 있지 않은 이미지)
  • build 캐시

 를 한꺼번에 삭제시켜준다. 

 실행 예:

$ docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] ←여기서「y」를 입력 후 Enter

 -a는 컨테이너에 사용되지 않은 이미지를 삭제하는 옵션이다. 혹은 이미지를 남기고 싶다면 -a 옵션은 사용하지 않도록 하자.


참고자료

https://qiita.com/zembutsu/items/f577ea8dad6dc64d70b6

728x90