docker prune / 도커 사용 안하는 놈 제거하고 용량 확보하기

2020. 2. 14. 10:35OS & Server/Docker

목차

  • 서론
  • network
  • volume
  • container
  • image
  • everything

 

 

서론

docker를 사용하다보면 무수한 컨테이너를 관리하고 개발환경에서도 이에 많은 컨테이너를 pull하고 생성하고...

하다보면 언젠가 용량이 부족해지기 마련이죠

 

그래서 docker 에서는 사용하지 않는 컨테이너 이미지를 제거하는 명령이 지원됩니다.

"prune" 가 대표적인 옵션 명령으로 주어지는데 크게 사용될 수 있는 곳은 

system / image / container / volume / network 입니다.

 

 

prune의 가장 큰 특징은 어떠한 명령에 옵션으로 주느냐에 따라 그 역할이 달라집니다.

 

 

 

 

network

공식문서에서 말하는 내용을 보면 말 그대로

도커 네트워크 자체가 디스크 용량을 차지 하는 것은 아니지만, iptables 규칙을 생성합니다.

또한 iptables말고도, ifconfig 등으로 확인해보시면 무수히 많은 가상 브리지 네트워크 장치 심지어

라우팅 테이블 까지 엄청 많이 생성되죠.

만약 docker-compose 를 사용하는데 네트워크를 변경하였지만, docker-compose down을 

사용하지 않을 경우 이 찌꺼기들은 그대로 남아있습니다.

 

docker network prune

위 와 같이 입력할 경우 사용하지 않는 네트워크 찌꺼기들을 모두 제거해줍니다.

iptables 규칙 및 라우팅테이블, 그리고 가상 네트워크 장치도요!

 

 

 

 

volume

볼륨은 도커 컨테이너와 Host의 디스크 저장 공간을 공유합니다.

이는 도커 컨테이너가 제거되어도, 호스트 볼륨은 제거되지 않고 유지되기 때문인데,

자동으로 제거할 경우 호스트의 해당 데이터들이 공중분해 될 수 있어서 도커에서도 자동 제거를 해주진 않습니다.

하지만 수동으로 제거할 순 있습니다.

 

docker volume prune

위 와 같이 명령을 입력할 경우 사용되지 않고 있는 volume 마운트를 모두 제거합니다.

꽤나 많은 디스크 용량을 확보할 수 있죠!

 

 

 

 

container

컨테이너는 도커의 가장 기본적인 구성단위이자 가장 큰 비중이라고도 할 수 있는데,

이 컨테이너 또한 디스크 공간을 차지하고 있죠.

docker ps -a

 

 

위 와 같이 입력했을때 무수히 많은 컨테이너들이 존재한다면 벌써부터 컨테이너 확인하다가 암에 걸릴 것 같습니다.

ㄷㄷ

사실 위도 더럽긴한데 이정도도 양호한 편이죠..

 

이렇게 사용하지 않는 컨테이너를 더 정확하게는 중지된 컨테이너를 제거 하는 명령입니다.

docker container prune

마음이 편안해지는군요...

 

 

 

 

 

image

디스크 용량의 주된 범인이자 가장 큰 핵심 암 덩어리

도커 컴포즈, 도커 파일, 도커 런 등을 사용하여 이미지를 내려받고 적용하고

혹은 직접 커스텀하여 이미지를 생성하였을때 이미지를 저장하는데 이 친구들이 정말이지

Host에서 치면 .iso 파일 같은거라 엄청납니다.

 

하지만 이것도 alpine-linux ... alpine version .... multi staging 이라는 기술을 사용하면

용량을 가하급수적으로 줄일수 있죠!

 

하지만 가장 큰 문제점은 사용하지 않는 이미지입니다.

이럴 때도 마찬가지로

 

docker image prune

를 입력하면 사용하지 않는 이미지가 아니고, 이름이 존재하지 않는 이미지를 제거합니다.

특정 이미지를 제거하는 방법은 다른 포스트에서 확인시켜드리죠.

 

 

 

 

 

everything

이미지, 컨테이너, 네트워크, 볼륨 모두 제거해주는 명령도 존재합니다.

도커 프로젝트에서 만들다가 불편했나보군요

 

# docker version 17.06.1 ↑
docker system prune --volumes

# docker version 17.06.0 ↓
docker system prune

위 와 같이 입력하면 통째로 날려드립니다.

근데 쓸일은 별로없을듯..

 

 

 

 

참고: https://docs.docker.com/config/pruning/

 

Prune unused Docker objects

Docker takes a conservative approach to cleaning up unused objects (often referred to as “garbage collection”), such as images, containers, volumes, and networks: these objects are generally not removed unless...

docs.docker.com