Docker资源速查手册:5分钟掌握镜像容器管理精髓
Docker资源速查手册:5分钟掌握镜像容器管理精髓
容器化运维的第一课不是部署应用,而是快速掌控资源全局。本文将揭秘生产环境最常用的高效查询技巧,让你成为容器世界的"鹰眼"。
一、基础查询:新手必会三板斧
1. 镜像资产清单
# 查看完整镜像列表
docker images
# 输出示例
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx alpine f0f3a7e8a3d2 2 weeks ago 23.5MB
redis 6.2 a1b2c3d4e5f6 3 months ago 104MB
关键字段解析:
- IMAGE ID:镜像指纹(前12位可唯一标识)
- CREATED:镜像构建时间(排查过期镜像)
- SIZE:虚拟大小(实际占用可能更小)
2. 容器运行状态
# 查看所有容器(含已停止)
docker ps -a
# 精简输出模式
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Status}}"
状态关键词速查:
| 状态 | 含义 | 处理建议 |
|---|---|---|
| Up 2 days | 正常运行 | 监控资源消耗 |
| Exited (0) | 正常退出 | 可安全清理 |
| Exited (137) | 内存溢出终止 | 检查内存限制 |
| Restarting (1) | 持续重启 | 查看日志定位问题 |
3. 空间占用分析
# 查看Docker磁盘使用
docker system df
# 输出示例
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 15 8 5.23GB 2.1GB (40%)
Containers 20 5 1.2GB 890MB (74%)
Local Volumes 3 2 345MB 123MB (35%)
二、生产环境高阶查询
1. 精准过滤技巧
# 按状态过滤容器
docker ps -f "status=exited"
# 按时间过滤镜像
docker images --filter "before=2024-01-01"
# 组合过滤示例
docker ps -f "name=web" -f "status=running"
常用过滤器速查:
| 过滤条件 | 示例 | 用途 |
|---|---|---|
| status | status=created | 按生命周期状态筛选 |
| label | label=env=prod | 按标签过滤 |
| ancestor | ancestor=nginx | 按基础镜像筛选 |
2. 结构化输出处理
# JSON格式输出(需jq工具)
docker images --format '{{json .}}' | jq -r '.Repository'
# CSV格式导出
docker ps -a --format "{{.ID}},{{.Image}},{{.Status}}" > containers.csv
3. 快速定位工具
# 模糊搜索镜像
docker images | grep -i "redis"
# 查看容器启动命令
docker inspect --format='{{.Config.Cmd}}' 容器ID
三、企业级监控方案
1. 终端仪表盘
# 安装ctop实时监控
docker run --rm -ti \
--name=ctop \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
quay.io/vektorlab/ctop:latest
2. Prometheus监控体系
# docker-compose监控配置
services:
node-exporter:
image: prom/node-exporter
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
cadvisor:
image: gcr.io/cadvisor/cadvisor
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
3. 日志聚合方案
# 查看容器实时日志
docker logs -f --tail 100 容器ID
# ELK日志收集配置
docker run --log-driver=syslog \
--log-opt syslog-address=udp://logserver:514 \
nginx:alpine
四、故障排查实战案例
案例1:僵尸容器占用磁盘
- 现象:磁盘空间报警但未见大文件
- 排查步骤:
docker system df发现回收空间为0docker volume prune清理无效卷docker image prune -a删除悬空镜像
案例2:异常镜像版本
- 现象:测试环境正常,生产环境报错
- 快速对比:
# 开发环境 docker inspect dev_app | jq '.[].RepoDigests' # 生产环境 docker inspect prod_app | jq '.[].RepoDigests'
五、高效管理速查表
| 场景 | 命令组合 | 输出示例 |
|---|---|---|
| 找最新容器 | docker ps -l |
显示最近创建容器 |
| 查看镜像分层 | docker history nginx:alpine |
显示构建历史 |
| 批量停止容器 | docker stop $(docker ps -q) |
停止所有运行容器 |
| 按时间排序镜像 | docker images --format "table {{.ID}}\t{{.CreatedSince}}" |
显示镜像年龄 |
掌握这些技巧,日常运维效率可提升300%。建议将常用命令封装为Shell别名:
alias dimg='docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.CreatedSince}}"'
alias dps='docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.RunningFor}}"'
浙公网安备 33010602011771号