前言
大家好,我是奇想派,一名致力分享,誓要成为编程达人的程序员。
很多开发敌人,在应用 docker 的时候,常常下载镜像,镜像打标签,而后不清理无用的镜像,长此以往,docker 就会把宿主机的磁盘空间占满,这个时候要怎么办?教你两个秘籍,通过 docker 自带的 prune 命令或者迁徙 docker 下的 overlay2 文件夹。
不懂怎么操作?那就跟着奇想派进行实操吧!
办法 1:清理 docker 空间,通过 prune
1、命令查看磁盘应用状况。
du -hs /var/lib/docker/
2、清理 docker 磁盘
# 相似于 Linux 上的 df 命令,用于查看 Docker 的磁盘应用状况:
docker system df
#能够用于清理磁盘,删除敞开的容器、无用的数据卷和网络,以及 dangling 镜像(即无 tag 的镜像)。docker system prune
#清理得更加彻底,能够将没有容器应用 Docker 镜像都删掉。留神,这两个命令会把你临时敞开的容器,以及临时没有用到的 Docker 镜像都删掉了…
#所以应用之前肯定要想分明.。我没用过,因为会清理 没有开启的 Docker 镜像。docker system prune -a
#docker system df -v 命令能够进一步查看空间占用细节,以确定是哪个镜像、容器或本地卷占用过高空间
docker system df -v
主动清理命令
docker system prune 可对空间进行主动清理。该命令所清理的对象如下:已进行的容器
未被任何容器应用的卷
未被任何容器所关联的网络
所有悬空的镜像
对于下面提到的一些镜像或容器的状态,须要咱们心里有点数:已应用的镜像:指所有已被容器(包含 stop 的)关联的镜像,也就是 docker ps - a 所看到的所有容器对应的 image。未援用镜像:没有被调配或应用在容器中的镜像
悬空镜像(dangling image):未配置任何 Tag(也就是无奈被援用)的镜像。通常是因为镜像编译过程中未指定 - t 参数配置 Tag 导致的。docker system prune 后能够加额定的参数,如:docker system prune -a:一并革除所有未被应用的镜像和悬空镜像。docker system prune -f:用以强制删除,不提示信息。另外除了 system 级别的,还有针对容器或是镜像级别的删除命令:docker image prune:删除悬空的镜像。docker container prune:删除无用的容器。-- 默认状况下 docker container prune 命令会清理掉所有处于 stopped 状态的容器
-- 如果不想那么仁慈通通都删掉,也能够应用 --filter 标记来筛选出不心愿被清理掉的容器。例子:革除掉所有停掉的容器,但 24 内创立的除外:--$ docker container prune --filter "until=24h"
docker volume prune:删除无用的卷。docker network prune:删除无用的网络
手动革除
对于悬空镜像和未应用镜像能够应用手动进行个别删除:1、删除所有悬空镜像,不删除未应用镜像:docker rmi $(docker images -f "dangling=true" -q)
2、删除所有未应用镜像和悬空镜像
docker rmi $(docker images -q)
3、清理卷
如果卷占用空间过高,能够革除一些不应用的卷,包含一些未被任何容器调用的卷(-v 详细信息中若显示 LINKS = 0,则是未被调用):删除所有未被容器援用的卷:docker volume rm $(docker volume ls -qf dangling=true)
4、容器清理
如果发现是容器占用过高的空间,能够手动删除一些:删除所有已退出的容器:docker rm -v $(docker ps -aq -f status=exited)
删除所有状态为 dead 的容器
docker rm -v $(docker ps -aq -f status=dead)
办法 2:迁徙 /var/lib/docker 目录
/var/lib/docker/overlay2 占用很大,清理 Docker 占用的磁盘空间,迁徙 /var/lib/docker 目录。
1 进行 docker 服务。
systemctl stop docker
2 创立新的 docker 目录,执行命令 df -h, 找一个大的磁盘。我在 /home 目录上面建了 /home/docker/lib 目录,执行的命令是:
mkdir -p /home/docker/lib
3 迁徙 /var/lib/docker 目录上面的文件到 /home/docker/lib:
rsync -avz /var/lib/docker /home/docker/lib/
4 配置 /etc/systemd/system/docker.service.d/devicemapper.conf。查看 devicemapper.conf 是否存在。如果不存在,就新建。
sudo mkdir -p /etc/systemd/system/docker.service.d/
sudo vi /etc/systemd/system/docker.service.d/devicemapper.conf
5 而后在 devicemapper.conf 写入:(同步的时候把父文件夹一并同步过去,实际上的目录应在 /home/docker/lib/docker)
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph=/home/docker/lib/docker
6 从新加载 docker
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
7 为了确认一切顺利,运行
docker info
命令查看 Docker 的根目录. 它将被更改为 /home/docker/lib/docker
...
Docker Root Dir: /home/docker/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
...
8 启动胜利后,再确认之前的镜像还在:
linlf@dacent:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
AAA/AAA v2 7331b8651bcc 27 hours ago 3.85GB
BBB/BBB v1 da4a80dd8424 28 hours ago 3.47GB
9 确定容器没问题后删除 /var/lib/docker/ 目录中的文件。
rm -rf /var/lib/docker/*
参考文档
https://blog.csdn.net/qq_3767…
https://blog.csdn.net/cmrsaut…
https://blog.csdn.net/weixin_…
博主集体博客网站:奇想派
本文原创作者:奇想派、一名致力分享的程序员。
文章首发平台:微信公众号【编程达人】
原创不易!各位小伙伴感觉文章不错的话,无妨关注公众号,进行 点赞(在看)、转发 三连走起!谢谢大家!