Docker 镜像管理指南 🐳
📦 掌握 Docker 镜像的查看、清理和优化技巧,释放磁盘空间,提升容器效率
📋 目录导航
🔍 镜像查看命令
👀 查看本地镜像列表
1
2
3
4
5
6
7
8
9
10
11
|
# 查看所有本地镜像
docker images
# 查看镜像列表(包含中间镜像)
docker images -a
# 格式化输出镜像信息
docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}"
# 按时间排序显示镜像
docker images --sort=created
|
🔎 镜像筛选与搜索
1
2
3
4
5
6
7
8
9
10
11
|
# 查看特定仓库的镜像
docker images ubuntu
# 使用过滤器查找镜像
docker images --filter "reference=nginx:*"
# 查找特定标签的镜像
docker images --filter "label=version=latest"
# 查看悬空镜像(无标签镜像)
docker images --filter "dangling=true"
|
🗑️ 镜像删除操作
❌ 删除单个镜像
1
2
3
4
5
6
7
8
9
10
11
|
# 通过镜像ID删除
docker rmi abcdef123456
# 通过仓库名和标签删除
docker rmi nginx:latest
# 强制删除镜像(即使有容器在使用)
docker rmi -f nginx:latest
# 删除多个指定镜像
docker rmi redis:alpine mysql:8.0
|
🧹 批量删除操作
1
2
3
4
5
6
7
8
9
10
11
|
# 删除所有悬空镜像
docker image prune
# 强制删除所有悬空镜像(无需确认)
docker image prune -f
# 删除所有未使用的镜像(包括有标签但未使用的)
docker image prune -a
# 强制删除所有未使用的镜像
docker image prune -af
|
📊 空间管理
💾 查看磁盘使用情况
1
2
3
4
5
6
7
8
|
# 查看Docker磁盘使用概况
docker system df
# 详细查看磁盘使用情况
docker system df -v
# 实时监控磁盘使用
watch -n 5 docker system df
|
📈 磁盘使用报告解读
类型(TYPE) |
总数(TOTAL) |
活动数(ACTIVE) |
占用空间(SIZE) |
可回收空间(RECLAIMABLE) |
🖼️ Images(镜像) |
28 |
17 |
10.71GB |
4.376GB (40%) |
🐳 Containers(容器) |
17 |
17 |
569MB |
0B (0%) |
💾 Local Volumes(本地卷) |
3 |
0 |
0B |
0B |
🔨 Build Cache(构建缓存) |
0 |
0 |
0B |
0B |
📉 空间分析命令
1
2
3
4
5
6
7
8
|
# 查看最大的镜像
docker images --format "table {{.Size}}\t{{.Repository}}" | sort -hr
# 查看各镜像的详细大小
docker system df -v | grep -A 10 "Images space usage:"
# 计算镜像总大小
docker images -q | xargs docker inspect --format='{{.Size}}' | awk '{sum+=$1} END {print sum/1024/1024" MB"}'
|
🧹 清理与优化
🗂️ 系统级清理
1
2
3
4
5
6
7
8
|
# 清理所有未使用的Docker对象(镜像、容器、网络、构建缓存)
docker system prune
# 强制清理所有未使用的Docker对象
docker system prune -f
# 清理包括卷在内的所有未使用对象(谨慎使用!)
docker system prune --volumes -f
|
⏰ 定时清理任务
1
2
3
4
5
6
7
8
9
10
11
|
# 创建每日自动清理脚本
#!/bin/bash
# docker-cleanup.sh
echo "$(date): Starting Docker cleanup" >> /var/log/docker-cleanup.log
docker image prune -af >> /var/log/docker-cleanup.log 2>&1
docker system prune -f >> /var/log/docker-cleanup.log 2>&1
echo "$(date): Cleanup completed" >> /var/log/docker-cleanup.log
# 添加cron任务(每天凌晨2点清理)
# 0 2 * * * /path/to/docker-cleanup.sh
|
📝 日志管理
📋 清理日志记录
1
2
3
4
|
# 创建日志目录并清理悬空镜像,记录日志
mkdir -pm 755 /mnt/docker-rmi-log && \
docker image prune --force --filter "dangling=true" > \
"/mnt/docker-rmi-log/$(date +'%Y-%m-%d')_docker_rmi.log"
|
🔍 查看清理历史
1
2
3
4
5
6
7
8
9
10
11
|
# 查看最近的清理日志
ls -lt /mnt/docker-rmi-log/*_docker_rmi.log | head -5
# 查看最近5个日志文件的内容
ls -lt /mnt/docker-rmi-log/*_docker_rmi.log | head -5 | awk '{print $9}' | xargs cat
# 统计清理的镜像数量
grep "Total reclaimed space" /mnt/docker-rmi-log/*.log
# 查看今日清理情况
cat "/mnt/docker-rmi-log/$(date +'%Y-%m-%d')_docker_rmi.log"
|
⚡ 快速参考
🎯 常用命令速查表
操作 |
命令 |
说明 |
查看镜像 |
docker images |
列出本地镜像 |
删除镜像 |
docker rmi <image> |
删除指定镜像 |
强制删除 |
docker rmi -f <image> |
强制删除镜像 |
拉取镜像 |
docker pull <image:tag> |
从仓库拉取镜像 |
查看空间 |
docker system df |
查看磁盘使用情况 |
清理悬空 |
docker image prune |
清理悬空镜像 |
全面清理 |
docker system prune |
清理所有未使用对象 |
🔄 工作流程示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 1. 查看当前镜像状态
docker images
# 2. 检查磁盘使用情况
docker system df
# 3. 清理悬空镜像
docker image prune -f
# 4. 删除特定不再使用的镜像
docker rmi old-image:tag
# 5. 验证清理结果
docker system df -v
|
⚠️ 注意事项
🔴 重要警告
-
💀 数据丢失风险
1
2
|
# --force 参数会强制删除,可能导致数据丢失
# 删除前务必确认镜像不再需要
|
-
🐳 容器依赖检查
1
2
3
4
5
|
# 删除镜像前检查是否有容器在使用
docker ps -a --filter "ancestor=image-name"
# 查看镜像的使用情况
docker image inspect --format='{{.RepoTags}} {{.Containers}}' image-id
|
-
📦 生产环境谨慎操作
1
2
3
4
|
# 在生产环境执行删除操作前:
# 1. 备份重要镜像
# 2. 在测试环境验证
# 3. 选择维护窗口期操作
|
🛡️ 安全建议
-
✅ 定期清理计划
1
2
|
# 建议每周执行一次清理
# 避免磁盘空间不足问题
|
-
📋 日志记录重要性
1
2
|
# 所有清理操作都应记录日志
# 便于审计和问题排查
|
-
🔍 清理前检查
1
2
|
# 执行清理前先使用dry-run模式
docker image prune --dry-run
|
💡 专业提示:定期清理Docker镜像不仅可以释放磁盘空间,还能提高镜像拉取和容器启动的速度。建议建立自动化的清理机制,但务必谨慎操作,避免误删重要镜像。