跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Docker存储清理
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Docker存储清理 = == 介绍 == Docker存储清理是管理Docker磁盘空间的重要操作。随着容器和镜像的频繁创建、删除,Docker会积累未使用的数据(如悬空镜像、停止的容器、未使用的卷和网络),占用大量磁盘空间。本指南将详细介绍如何识别和清理这些资源,适用于初学者和需要优化存储的高级用户。 == 为什么需要清理Docker存储 == Docker的默认存储驱动(如`overlay2`)会保留以下冗余数据: * '''悬空镜像'''(Dangling images):未被任何容器引用的中间镜像层。 * '''未使用的容器''':已停止但未删除的容器。 * '''孤儿卷'''(Orphaned volumes):未被任何容器使用的数据卷。 * '''缓存构建层''':构建镜像时生成的临时层。 长期不清理可能导致磁盘空间耗尽,影响系统性能。 == 清理方法 == === 1. 查看当前磁盘使用情况 === 使用以下命令查看Docker存储分布: <syntaxhighlight lang="bash"> docker system df </syntaxhighlight> '''输出示例:''' <pre> TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 10 6 2.1GB 800MB (38%) Containers 4 1 120MB 60MB (50%) Local Volumes 3 1 500MB 400MB (80%) Build Cache 5 0 300MB 300MB (100%) </pre> === 2. 删除悬空镜像 === 悬空镜像是未被标记或引用的镜像层,通常由重复构建或删除操作产生: <syntaxhighlight lang="bash"> docker image prune </syntaxhighlight> 若需强制删除所有未被使用的镜像(包括未被容器引用的): <syntaxhighlight lang="bash"> docker image prune -a </syntaxhighlight> === 3. 清理停止的容器 === 删除所有已停止的容器: <syntaxhighlight lang="bash"> docker container prune </syntaxhighlight> === 4. 清理未使用的数据卷 === 孤儿卷可能包含旧数据,手动清理需谨慎: <syntaxhighlight lang="bash"> docker volume prune </syntaxhighlight> === 5. 清理构建缓存 === 构建镜像时生成的缓存层可通过以下命令清理: <syntaxhighlight lang="bash"> docker builder prune </syntaxhighlight> === 6. 一键清理所有未使用对象 === 综合清理镜像、容器、卷和网络: <syntaxhighlight lang="bash"> docker system prune -a --volumes </syntaxhighlight> {{Warning|使用<code>-a</code>会删除所有未使用的镜像(不仅仅是悬空镜像),<code>--volumes</code>会删除未使用的卷。}} == 实际案例 == === 案例1:开发环境定期清理 === 开发者每天构建多次镜像,导致磁盘快速占满。可通过定时任务(Cron)每周运行: <syntaxhighlight lang="bash"> 0 3 * * 0 docker system prune -f </syntaxhighlight> === 案例2:CI/CD流水线优化 === 在CI/CD中,每次构建后清理缓存和悬空镜像: <syntaxhighlight lang="bash"> #!/bin/bash docker build -t my-app . docker run --rm my-app test docker image rm my-app docker builder prune -f </syntaxhighlight> == 高级技巧 == === 限制Docker日志大小 === 容器日志可能占用大量空间。全局限制日志大小(在<code>/etc/docker/daemon.json</code>中配置): <syntaxhighlight lang="json"> { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } </syntaxhighlight> === 手动删除特定卷或镜像 === 若需精确删除某个对象,先查询ID再操作: <syntaxhighlight lang="bash"> # 列出所有卷 docker volume ls # 删除指定卷 docker volume rm my_volume </syntaxhighlight> == 存储驱动的影响 == 不同存储驱动(如<code>overlay2</code>、<code>devicemapper</code>)的清理机制略有差异。可通过以下命令查看当前驱动: <syntaxhighlight lang="bash"> docker info | grep "Storage Driver" </syntaxhighlight> == 总结 == 定期清理Docker存储可节省磁盘空间并提升性能。关键命令总结: {| class="wikitable" ! 操作 !! 命令 |- | 删除悬空镜像 || <code>docker image prune</code> |- | 删除所有未使用镜像 || <code>docker image prune -a</code> |- | 清理停止的容器 || <code>docker container prune</code> |- | 清理未使用的卷 || <code>docker volume prune</code> |- | 一键清理所有资源 || <code>docker system prune -a --volumes</code> |} {{Tip|生产环境中慎用<code>-a</code>参数,避免误删依赖项。}} [[Category:集成部署]] [[Category:Docker]] [[Category:Docker存储]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:Mbox
(
编辑
)
模板:Tip
(
编辑
)
模板:Warning
(
编辑
)
模块:Arguments
(
编辑
)
模块:Message box
(
编辑
)
模块:Message box/ambox.css
(
编辑
)
模块:Message box/configuration
(
编辑
)
模块:Yesno
(
编辑
)