介绍
当我们使用docker时,经常会创建新镜像和新容器,不清理无用的镜像。时间久了,硬盘就会满了。
清理docker空间,通过prune
命令查看磁盘使用情况。
1
| du -hs /var/lib/docker/
|
清理docker磁盘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| #类似于Linux上的df命令,用于查看Docker的磁盘使用情况:
docker system df
#可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。
docker system prune
#清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了…
#所以使用之前一定要想清楚.。我没用过,因为会清理 没有开启的 Docker 镜像。
docker system prune -a
#命令可以进一步查看空间占用细节,以确定是哪个镜像、容器或本地卷占用过高空间
docker system df -v
#删除悬空的镜像。
docker image prune
#删除无用的容器
docker container prune
#删除无用的卷
docker volume prune
#删除无用的网络
docker volume prune
|
手动清除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| 对于悬空镜像和未使用镜像可以使用手动进行个别删除:
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)
|
迁移 /var/lib/docker 目录
/var/lib/docker/overlay2 占用很大,清理Docker占用的磁盘空间,迁移 /var/lib/docker 目录。
停止docker服务。
创建新的docker目录,执行命令df -h,找一个大的磁盘。 我在 /home目录下面建了 /home/docker/lib目录,执行的命令是:
1
| mkdir -p /home/docker/lib
|
迁移/var/lib/docker目录下面的文件到 /home/docker/lib
1
| rsync -avz /var/lib/docker /home/docker/lib/
|
配置 /etc/systemd/system/docker.service.d/devicemapper.conf。查看 devicemapper.conf 是否存在。如果不存在,就新建。
1
2
3
| sudo mkdir -p /etc/systemd/system/docker.service.d/
sudo vi /etc/systemd/system/docker.service.d/devicemapper.conf
|
然后在 devicemapper.conf 写入:(同步的时候把父文件夹一并同步过来,实际上的目录应在 /home/docker/lib/docker )
1
2
3
4
5
| [Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph=/home/docker/lib/docker
|
重新加载 docker
1
2
| systemctl daemon-reload
systemctl restart docker
|
确定容器没问题后删除/var/lib/docker/目录中的文件。
1
| rm -rf /var/lib/docker/*
|