Docker 在使用过程中会占用大量磁盘空间。无需担心,通过以下方法可以有效地管理和回收磁盘空间。

Docker 数据管理

设置默认路径

默认情况下,Docker 容器数据存储在 /var/lib/docker/containers/ 目录下。

容器的日志可以通过 docker logs 命令访问,同时可以使用 docker logs -f 实时查看日志,类似于 tail -f 的效果。如果使用 Docker Compose,可以通过 docker-compose logs <服务名> 来查看特定服务的日志。

如果深入了解日志的存储位置,每个容器的日志默认以 json-file 格式存储在 /var/lib/docker/containers/<容器id>/<容器id>-json.log 文件中。

您可以通过以下方式修改其默认参数:

  1. 修改 Docker 守护进程配置

编辑 /etc/docker/daemon.json 文件(如不存在则创建):

{
  "log-driver": "json-file",
  "log-opts": {
    # 单个日志文件最大大小
    "max-size": "10m",
    # 最多保留3个日志文件(轮转时删除旧文件)
    "max-file": "3"
  },
  # 数据根目录
  "data-root": "/var/lib/docker"
}
  1. 重新加载 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker

快速检查磁盘使用情况

首先查看 Docker 整体磁盘使用情况:

docker system df

常规清理操作

安全清理(推荐)

定期运行以下命令,安全删除已停止的容器、未使用的网络和悬空镜像:

docker system prune

深度清理(谨慎使用)

此命令会删除所有未关联到运行容器的镜像:

docker system prune -a

分类清理指南

镜像清理

镜像相当于应用程序的快照。查看所有镜像:

docker image ls -a

删除指定镜像:

docker image rm <name_or_id>

可同时删除多个镜像,使用空格分隔。

容器清理

容器是镜像的运行实例。查看所有容器:

docker container ls -a

停止容器:

docker container stop <name_or_id>

删除容器:

docker container rm <name_or_id>

提示

  • 可同时操作多个容器,使用空格分隔
  • 使用 --rm 参数启动容器可在停止时自动删除

网络清理

网络配置文件占用空间较小。查看所有网络:

docker network ls

删除网络:

docker network rm <name_or_id>

卷清理

卷用于持久化存储数据,占用空间取决于使用情况。查看所有卷:

docker volume ls

重要提醒:删除卷前务必做好数据备份!

备份方法示例

MySQL 数据库备份:

docker exec mysql /usr/bin/mysqldump -u root -pmypasswd mydb > backup.sql

文件拷贝备份:

docker cp mycontainer:/some/file ./host/directory
删除操作

删除指定卷:

docker volume rm <name>

删除未使用卷:

docker volume prune

删除所有卷(谨慎操作):

docker volume prune -a

彻底清理

一键删除所有未使用的镜像、容器、网络和卷:

docker system prune -a --volumes

添加 -f 参数可强制清除所有 Docker 数据:

docker system prune -a --volumes -f

警告:此操作将清除所有 Docker 数据,请确保已备份重要信息。

最佳实践建议

定期维护计划

#每周清理一次
0 3 * * 0 docker system prune -f

#每月深度清理一次
0 4 1 * * docker system prune -a -f --volumes

监控磁盘使用

# 添加到 crontab,每小时检查一次
0 * * * * df -h /var/lib/docker | awk 'NR==2 {if ($5 > 85) print "警告: Docker 磁盘使用率超过85%"}'

容器启动时限制资源

docker run --log-opt max-size=10m --log-opt max-file=3 --restart=unless-stopped your_image

通过合理的日志管理和定期清理,可以有效控制 Docker 对磁盘空间的占用,保持系统高效运行。

更多推荐