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 옵션은 사용하지 않도록 하자.
참고자료
'IT > 기초 지식' 카테고리의 다른 글
[python] pip 과 requirements.txt를 이용해서 패키지 혹은 라이브러리 일괄 다운로드하기 (2) | 2022.02.01 |
---|---|
[Docker] Docker 이미지를 파일로 import/export 하기 (0) | 2022.01.28 |
[Docker] Windows10 환경에서 WSL2+Docker사용하기 (0) | 2022.01.28 |
[git] git의 여러가지 취소 방법 (0) | 2021.12.19 |
[Linux] sed 커맨드 상황별 사용법 (0) | 2021.11.03 |