且看下docker info:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Containers: 43 Images: 57 Server Version: 1.9.1 Storage Driver: devicemapper Pool Name: docker-8:5-12884902107-pool Pool Blocksize: 65.54 kB Base Device Size: 107.4 GB Backing Filesystem: Data file: /dev/loop0 Metadata file: /dev/loop1 Data Space Used: 107.4 GB Data Space Total: 107.4 GB Data Space Available: 0 B Metadata Space Used: 70.27 MB Metadata Space Total: 2.147 GB Metadata Space Available: 2.077 GB Udev Sync Supported: true Deferred Removal Enabled: false Deferred Deletion Enabled: false Deferred Deleted Device Count: 0 Data loop file: /data1/docker/devicemapper/devicemapper/data Metadata loop file: /data1/docker/devicemapper/devicemapper/metadata Library Version: 1.02.107-RHEL7 (2015-12-01) Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 3.10.0-327.13.1.el7.x86_64 Operating System: CentOS Linux 7 (Core) CPUs: 32 Total Memory: 94.15 GiB Name: 158-5.i.bbtfax.com ID: TFQT:NSMK:UZP5:3ZMA:QLXD:O6JI:UENZ:PVE2:NR2S:5XIN:U3OB:6673 WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled |
metadata一般不会太大,暂且不论。
- data默认107.4G (话说这还是centos7上的,曾经似乎只有10G),如何修改?
- 43个容器,57个镜像; 看来所有容器数据、和镜像数据都在这里了
- 从上面信息来看,设备数据已经满了,如下也能查看
- 镜像依赖:
如果 image2是在image1上修改得到的,则image1无法先于image2被删除 - 容器依赖:
如果有容器在使用某镜像,则该镜像无法被删除 - 删除文件后空间不会收缩
创建一个大文件,空间膨胀;然后再删除大文件,空间不会缩回;但是,似乎会被重用这部分空间;问题:如何查看不能被重用的空间的大小呢?
问题:
一个docker存储空间被占满了:
- 如果扩容?
- 扩容必丢数据?如何备份数据?又如何导入数据?
关于loop-lvm 和 direct-lvm:
- loop-lvm不需要过多的配置,出于开箱即用的考虑,docker存储驱动默认使用的是loop-lvm,但是,非常不建议生产环境使用该方式(为什么?)
- direct-lvm配置比较复杂
docker存储空间扩容(不丢数据): https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/
docker在线扩容脚本: http://phpor.net/blog/post/3624
扩容注意事项:
扩容不要等到一点儿空间也没有的时候才做,否则后果有二:
- 要么进程申请不到存储资源,使得负载奇高,而且进程无法被杀死,只能重启docker宿主机
- 要么所有docker容器存储系统变为只读,只能重启docker daemon(所有容器都将需要重启)
参考资料:
- http://coolshell.cn/articles/17200.html
- https://jpetazzo.github.io/2014/01/29/docker-device-mapper-resize/
- https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/