docker 清理方案

docker system df命令,

类似于Linux上的df命令,用于查看Docker的磁盘使用情况:


linlf@dacent:~$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              7                   2                   122.2GB             79.07GB (64%)
Containers          2                   2                   61.96GB             0B (0%)
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B

我们在使用docker的过程中发现基于swarm使用Storage Driver: overlay的方式进行存储.但是发现这个特别占用存储空间.

清理所有停止的容器

docker container prune 

清理所有不用数据(停止的容器,不使用的volume,不使用的networks,悬挂的镜像)

docker system prune -a

overlay存储

我们通过上面的操作清除了一些无用的数据,但是,overlay还是特别大.我们先了解下overlay存储.

overlayfs

集成进了linux 3.18内核.
overlay存储驱动主要使用的是overlayfs技术.中文名是叠合式文件系统.多个文件系统可以mount之后进行合并.
docker 镜像层 lowerdir
docker 容器层 upperdir
docker 容器挂载点 merged

这个三个层对应了 overlayFs的结构. 我们通过docker inspect 可以查看到如下结构

"GraphDriver": {
            "Name": "overlay",
            "Data": {
                "LowerDir": "/mnt/docker/overlay/5eb97eb91bed89a9c879142900419ad118215af05c291989282c130d031d7019/root",
                "MergedDir": "/mnt/docker/overlay/454f70c61de03ce2a517d7e2ea8c19e319a95cd2275d8b826f4244071315e513/merged",
                "UpperDir": "/mnt/docker/overlay/454f70c61de03ce2a517d7e2ea8c19e319a95cd2275d8b826f4244071315e513/upper",
                "WorkDir": "/mnt/docker/overlay/454f70c61de03ce2a517d7e2ea8c19e319a95cd2275d8b826f4244071315e513/work"
            }
        }

镜像在 /root
挂载点在 /merged
容器在 /upper
工作目录 /work

overlayfs数据清理

我们做了一个实验,我们启动一个容器(版本不同),之后

docker stop conatiner
docker rm container

通过对数据大小的监控,我们发现 overlay会随着新镜像的产生而产生一些数据,随着容器的关闭删除,这个文件并没有缩小体积.如何解决呢? 看来我们忽视了一个问题.我们使用 docker system prune以为可以不需要的数据都清理了,但是关于images中是这样描述的" dangling images" 悬挂的镜像 .关于这个词汇我还没有理解.不过通过测试,即使我把容器停止也无法清理镜像,所以,我无法理解 悬挂是怎样的状态.

docker rmi images

最后我们通过手动删除镜像,则之前产生的overlay数据就随之减少了.

tips:
查看overlay 大小 du --max-depth=1 -h
查看数量 ls|wc -w

整理

镜像有新版本产生的话,我们可以按照这样的流程操作

docker stop container
docker rm container
docker rmi image
docker pull image
docker run ...

这样就避免了系统磁盘一眨眼的时间就满了.

其他

docker 时间同步?

ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone

docker 存储地方修改

ExecStart=/usr/bin/dockerd --graph="/mnt/data/images"



作者:一笑yo
链接:https://www.jianshu.com/p/6ca10427ad77
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值