매우 공간, 우리가 용기를 실행할 때마다, 당신은 응용 프로그램을 배포 할 때, 거울을 당겨 자신의 거울을 구축 고정 표시기, 우리는 디스크 공간을 많이 차지 할 것이다.
이 문제에 시달리고 된 경우, 우리는 재활용 방법 도커 디스크 공간의 사용이 얼마나보고 함께 이동 한 것입니다.
고정 표시기 공간은 다음과 같은 명령을 통해 볼 수 있습니다 점령 :
$ docker system df
TYPE
목록 디스크 사용량 고정 표시기 네 가지 유형 :
- 이미지는 모든 공간은 아래로 당겨있어서, 상기 미러에 의해 미러를 점유 한 지역 구조.
- 컨테이너 : 컨테이너가 차지하는 공간을 실행하고, 각 층은 용기의 쓰기 공간을 나타냅니다.
- 볼륨은 로컬 : 컨테이너 로컬 데이터 볼륨의 공간을 마운트합니다.
- 캐시 빌드 : 과정에서 생성 된 버퍼 공간 이미지의 건설 (만 도커 18.09 나중에 사용할 수 사용 BuildKit있다).
마지막은 RECLAIMABLE
재활용이 크기입니다.
다음은 이러한 유형에 대해 살펴 있습니다.
디스크 컨테이너 점유
당신이 컨테이너를 만들 때마다, 예를 들어 생성 된 파일 및 디렉토리의 수있을 것입니다 :
/var/lib/docker/containers/ID
컨테이너가 기본 로깅 모드를 사용하는 경우 디렉토리는, 자신의 모든 로그는 JSON 형식으로이 디렉토리에 저장됩니다./var/lib/docker/overlay2
컨테이너가 데이터를 저장하는 데 자신의 파일 시스템을 사용하는 경우 레이어 읽기 - 쓰기 디렉토리 컨테이너를 포함하는, 그것은이 디렉토리에 기록됩니다.
이제 우리는 고정 표시기 방금 설치 한 가정, 완전히 깨끗한 시스템에서 시작 :
첫째, 우리는 Nginx에 컨테이너를 시작합니다 :
이제 실행 df
명령을, 당신은 볼 것이다 :
- 미러, 126메가바이트
- 컨테이너
이 경우에 동작 용기 보낸 어떠한 공간 재사용이없는 미러가 사용되고있다.
이제, 우리는 컨테이너 내에서 1백메가바이트의 빈 파일을 만듭니다
$ docker exec -ti www \
dd if=/dev/zero of=test.img bs=1024 count=0 seek=$[1024*100]
다시 공간을보기 :
당신이 파일은이 컴퓨터에 저장, 컨테이너 증가가 차지하는 공간을 볼 수 있습니까?
위에서 말했듯, 이는 판독 - 기록 층 컨테이너에 저장된다.
컨테이너가 중지되면, 공간이 재활용 될 것이다 컨테이너에 의해 점령 :
어떻게 재활용? 그것은 용기가 제거 될 때 공간이 관련 읽기와 쓰기 레이어에 의해 점령 제거합니다.
또한 모든 컨테이너가 중지 된 제거하는 열쇠가 될 수 있습니다 :
$ docker container prune
删除容器后,镜像也可以回收了:
上面的 docker container prune
命令是删除停止的容器,如果想删除所有容器(包括停止的、正在运行的),可以使用下面这2个命令:
$ docker rm -f $(docker ps -aq)
$ docker container rm -f $(docker container ls -aq)
镜像的磁盘占用
有一些镜像是隐形的:
- 子镜像,就是被其他镜像引用的中间镜像,不能被删除。
- 悬挂状态的镜像,就是不会再被使用的镜像,可以被删除。
下面的命令列出所有悬挂状态的镜像:
$ docker image ls -f dangling=true
删除这类镜像:
$ docker image rm $(docker image ls -f dangling=true -q)
或者:
$ docker image prune
如果想删除所有镜像,可以使用下面的命令:
$ docker image rm $(docker image ls -q)
注意,正在被容器使用的镜像是不能被删除的。
数据卷的磁盘占用
数据卷是容器自身文件体统之外的数据存储。
例如容器中的应用有上传图片的功能,上传之后肯定不能保存在容器内部,因为容器内部的数据会随着容器的死掉而被删除,所以,这些图片要保存在容器之外,也就是数据卷。
比如我们运行了一个 MongoDB 容器做测试,导入了很多测试数据,这些数据就不是在容器内部的,是在数据卷中,因为 MongoDB 的 Dockerfile 中使用了数据卷。
测试完成后,删除了这个 MongoDB 容器,但测试数据还在,没被删除。
删除不再使用的数据卷:
$ docker volume rm $(docker volume ls -q)
或者:
$ docker volume prune
Build Cache 的磁盘占用
Docker 18.09 引入了 BuildKit,提升了构建过程的性能、安全、存储管理等能力。
删除 build cache 可以使用命令:
$ docker builder prune
一键清理
通过上面的说明,我们知道了像容器、镜像、数据卷都提供了 prune
这个子命令,帮助我们回收空间。
其实,docker 系统层面也有 prune
这个子命令,可以一键清理没用的空间:
$ docker system prune
定期执行这个命令是个好习惯。
翻译整理自:
https://medium.com/better-programming/docker-tips-clean-up-your-local-machine-35f370a01a78
推荐阅读:
- 异地多活架构
- 高并发的常用策略
- 阿里开源的分布式事务框架 Seata
- 分布式唯一ID的生成方案
- Zookeeper vs Etcd