清理Docker占用的磁盘空间,迁移 /var/lib/docker 目录
一、分析并清理Docker磁盘占用
当Docker服务运行一段时间后,可能会占用大量磁盘空间。我们可以通过以下命令来分析和清理。
1. 检查Docker目录的总大小
使用 du 命令可以快速查看 /var/lib/docker 目录的磁盘占用情况。
sudo du -hs /var/lib/docker/
示例输出可能显示一个较大的数值,例如 237G,表明Docker数据占用了237GB空间。
2. 查看Docker各组件的磁盘使用详情
Docker提供了一个专门的命令 docker system df,类似于Linux的 df,可以详细列出镜像、容器、数据卷和构建缓存占用的空间。
docker system df
输出会清晰地展示不同类型资源的总大小、活跃大小以及可回收空间。例如,镜像可能占用了122.2GB,其中79.07GB可以被回收。
3. 执行基础清理
要清理停止的容器、未使用的网络、悬空镜像(无标签的镜像)以及构建缓存,可以使用 docker system prune 命令。
docker system prune
执行前会提示将删除的内容,确认后即可释放空间。
4. 执行彻底清理
如果需要更彻底的清理,删除所有未被任何容器使用的镜像,可以使用 docker system prune -a。此操作不可逆,请谨慎使用,因为它会删除所有未关联到容器的镜像。
二、迁移Docker数据目录
如果根分区空间不足,可以将Docker的数据目录迁移到其他有足够空间的磁盘分区,例如 /data。
1. 停止Docker服务
在迁移数据前,必须先停止Docker守护进程。
sudo systemctl stop docker
2. 创建新的数据目录
在目标磁盘(如 /data)下创建新的Docker数据目录。
sudo mkdir -p /data/docker
3. 迁移现有数据
使用 rsync 命令将原有数据安全地迁移到新目录。该命令会保留所有文件权限和属性。
sudo rsync -avz /var/lib/docker/ /data/docker/
4. 配置Docker使用新目录
最简单的方法是修改Docker的配置文件 daemon.json。如果该文件不存在,可以创建它。
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
在文件中添加或修改以下内容,指定新的数据根目录:
{
"data-root": "/data/docker"
}
5. 重新加载并启动Docker
保存配置文件后,重新加载systemd配置并重启Docker服务。
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker
6. 验证迁移结果
启动Docker后,使用 docker info 命令检查Docker的根目录是否已更新。
docker info | grep "Docker Root Dir"
输出应显示新的路径,例如 Docker Root Dir: /data/docker。
7. 确认数据完整性
运行 docker images 和 docker ps -a 等命令,确认所有镜像和容器数据都已正确迁移。
8. 清理旧目录
在确认一切正常后,可以安全地删除原有的 /var/lib/docker 目录以释放空间。