/etc/docker/daemon.json
1 |
|
1 |
|
每次创建一个容器时,都会有一些文件和目录被创建,例如:
/var/lib/docker/containers/ID
目录,如果容器使用了默认的日志模式,他的所有日志都会以JSON形式保存到此目录下。/var/lib/docker/overlay2
目录下含有容器的读写层,如果容器使用自己的文件系统保存了数据,那么就会写到此目录下。
当停止容器后,容器占用的空间就会变为可回收的(使用docker system df
查看),删除容器时会删除其关联的读写层占用的空间。
1 |
|
查看
system 空间占用大小
1 |
|
TYPE 列出了docker 使用磁盘的 4 种类型:
- Images:所有镜像占用的空间,包括拉取下来的镜像,和本地构建的。
- Containers:运行的容器占用的空间,表示每个容器的读写层的空间。
- Local Volumes:容器挂载本地数据卷的空间。
- Build Cache:镜像构建过程中产生的缓存空间(只有在使用 BuildKit 时才有,Docker 18.09 以后可用)。
- 最后的 RECLAIMABLE 是可回收大小。
查看空间占用细节
可以进一步通过 -v
参数查看空间占用细节,以确定具体是哪个镜像、容器或本地卷占用了过高空间。示例输出如下:
1 |
|
目录文件大小
1 |
|
查看
1 |
|
镜像/容器内空间
镜像
1 |
|
结合业务情况做进一步处理,重新 build 镜像。
容器
按容器显示磁盘使用情况
该docker ps -s
命令为每个容器显示两个不同的磁盘大小:
1 |
|
- “大小”信息显示用于每个容器的可写层的数据量(在磁盘上)
- “虚拟大小”是用于容器和可写层使用的只读图像数据的磁盘空间总量。
清理
慎重执行
1 |
|
清理container log
1 |
|
修改文件 /etc/docker/daemon.json
,并增加以下配置,控制日志的文件个数和单个文件的大小
1 |
|
1 |
|
docker overlay2占用大
目录下的文件都是docker使用的存储, 存的是我们的镜像文件和容器内的文件。
结构
容器层对应两个目录:一个以CacheID命名。一个以CacheID-init 命名。
-
带init的目录 目录是只读的
-
没有init的容器目录 容器的读写目录,容器中写入时候会把文件拷贝进来(读操作直接在每层操作,不需拷贝)
比如进入容器,在home下写一个hello.txt的文件,于是宿主机该目录下的diff目录中多了一个 home目录,下边多了一个hello.txt文件。
1 |
|
没有init的容器目录
1 |
|
镜像层存储目录,一个以CacheID命名的目录
清理
-
删除不用的镜像
docker system prune
(清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像) -
检查各容器的磁盘占用,如果有发现磁盘占用过高的情况则对应处理,如果容器内服务有写文件行为,则写文件的目录应当挂载到宿主机上,而不是直接往容器的本地写
使用
docker system df [-v]
参考容器和volume占用 -
检查是否有容器内的服务会往容器内的本地写文件 (容器占用大,volume占用小)
-
需要应急处理的话可以先进入容器内直接删除容器内可以删除的文件
检查磁盘分区挂载情况
1 |
|
如图有个200G的盘没有挂载,mount point 是空的
格式化分区, Linux操作系统分区格式Ext2,Ext3,Ext4的区别
# 格式化成ext4
mkfs.ext4 /dev/vdb1
格式化之后,就可以挂载分区了。
1 |
|
这样设置,机器重启后挂载点消失,所以必须设置永久挂载
1 |
|
要挂载的分区设备号 | 挂载点 | 文件系统类型 | 挂载选项 | 是否使用dump备份 | 是否开机的时候使用fsck检验所挂载的磁盘 |
---|---|---|---|---|---|
UUID=bf731254-57ae-4653-b3bf-a1383360c2e1 | /data | ext4 | defaults | 0 | 0 |
多目录挂载
1 |
|
创建1个分区,
分区类型选择 Linux LVM(8e00)
p 打印结果,w 保存
1 |
|
基本概念:
PV(Physical Volume)- 物理卷 物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。
VG(Volumne Group)- 卷组 卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
LV(Logical Volume)- 逻辑卷
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
1 |
|
剩下就是和挂载单个磁盘一样
1 |
|
开机挂载
1 |
|
docker数据迁移
默认docker数据目录 /var/lib/docker
1 |
|
遇到Error response from daemon: layer does not exist
pod起不来,ImageInspectError之类的报错。参考
- 重新pull成功,但是images看不到
- rmi会报错,
Error response from daemon: unrecognized image ID sha256:xxx
后面删除/data/docker/image
目录,重启docker,才重新拉取成功,pod也最好delete一