前言

大家好,我是奇想派,一名致力分享,誓要成为编程达人的程序员。

很多开发敌人,在应用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/dockerDebug Mode (client): falseDebug Mode (server): falseRegistry: https://index.docker.io/v1/...

8 启动胜利后,再确认之前的镜像还在:

linlf@dacent:~$ docker imagesREPOSITORY      TAG         IMAGE ID       CREATED       SIZEAAA/AAA        v2          7331b8651bcc     27 hours ago     3.85GBBBB/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_...


博主集体博客网站:奇想派

本文原创作者:奇想派、一名致力分享的程序员。

文章首发平台:微信公众号【编程达人】

原创不易!各位小伙伴感觉文章不错的话,无妨关注公众号,进行点赞(在看)、转发三连走起!谢谢大家!