15.11.1 运维标准流程与日常巡检

本节建立 Docker 运维的标准流程与日常巡检规范,提供可执行的命令与模板,确保容器平台稳定可控、故障可预防、变更可追溯。

一、运维标准流程(含执行要点与示例)

原理草图:流程闭环

文章图片
  1. 需求与评审
    - 输出:变更目标、影响面、风险等级、回滚方案。
    - 示例:评审表字段(简化)
变更对象: docker-host-01
影响容器: api-gateway, order-service
窗口期: 23:00-01:00
回滚方案: 回滚镜像 tag 到 v1.3.2
  1. 变更计划
    - 明确步骤、验证标准、监控指标。
    - 示例:变更计划片段
步骤1: 拉取新镜像 v1.3.3
步骤2: 重建容器并健康检查
步骤3: 观察 30 分钟 CPU/内存/错误率
  1. 实施与验证(命令示例)
# 1) 拉取新镜像
docker pull registry.local/app/api-gateway:v1.3.3

# 2) 备份当前容器配置(导出启动参数)
docker inspect api-gateway > /var/backup/api-gateway.inspect.json

# 3) 重建容器
docker stop api-gateway
docker rm api-gateway
docker run -d --name api-gateway \
  -p 8080:8080 \
  -e ENV=prod \
  --restart=always \
  registry.local/app/api-gateway:v1.3.3

# 4) 验证健康
docker ps --filter "name=api-gateway"
curl -s http://127.0.0.1:8080/health
  1. 监控与观察期(命令示例)
# 观察资源与重启情况
docker stats --no-stream
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.RunningFor}}"

# 观察事件(5分钟内)
docker events --since 5m
  1. 记录与归档(模板示例)
变更时间: 2024-06-01 23:05
执行人: ops01
结果: 成功
异常: 无
监控指标: CPU 45%, 内存 60%, 5xx=0
  1. 复盘与优化
    - 若失败,记录触发条件与改进项,形成标准化操作清单。

二、日常巡检维度(含命令与预期结果)

1. 节点与资源

# 负载与资源
uptime
free -m
df -h
df -i

# Docker 守护进程
systemctl status docker
docker version

预期:负载不持续高于 CPU 核心数,磁盘使用率 < 85%,Docker 服务为 active。

2. 容器与服务

# 容器状态与重启次数
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.RestartCount}}"

# 健康检查
docker inspect --format '{{.State.Health.Status}}' api-gateway

预期:业务容器状态为 Up,重启次数不异常,Health 为 healthy。

3. 镜像与仓库

# 镜像版本与大小
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"

# 清理过期镜像(示例:删除<none>)
docker image prune -f

预期:镜像 tag 统一、无过期悬挂镜像。

4. 日志与事件

# 查看近100行日志
docker logs --tail 100 api-gateway

# 事件异常定位
docker events --filter "event=die" --since 1h

预期:无频繁 die/oom 事件,错误关键词可控。

5. 安全与配置

# 容器运行用户
docker inspect --format '{{.Config.User}}' api-gateway

# 端口暴露检查
docker ps --format "table {{.Names}}\t{{.Ports}}"

预期:非必要端口不暴露,容器运行用户非 root(有条件时)。

6. 备份与恢复

# 数据卷备份(示例:/data)
tar -czf /backup/api-gateway_$(date +%F).tar.gz /data

# 恢复验证
tar -tzf /backup/api-gateway_2024-06-01.tar.gz | head

预期:备份可读、可解压、关键目录存在。


三、巡检执行与频率建议(含可执行脚本)

每日:节点资源、容器健康、关键告警
每周:镜像清理、日志容量、事件异常
每月:权限审计、基线核查、灾备演练抽检

一键巡检脚本(可落地)

# /usr/local/bin/docker_daily_check.sh
#!/bin/bash
echo "== Host =="
uptime
free -m | awk 'NR==2{print "MemUsed(MB):",$3,"MemTotal(MB):",$2}'
df -h | awk 'NR>1{print $1,$5,$6}'

echo "== Docker =="
systemctl is-active docker
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.RestartCount}}"
docker events --since 10m --format '{{.Time}} {{.Type}} {{.Action}} {{.Actor.Attributes.name}}' | tail -n 5

四、告警与响应(含排错命令)

阈值建议
CPU/内存 > 80%、磁盘使用率 > 85%、容器重启次数 > 3

排错命令示例

# 1) 资源高:定位最耗资源容器
docker stats --no-stream

# 2) 容器频繁重启:查看退出原因
docker inspect --format '{{.State.ExitCode}} {{.State.OOMKilled}} {{.State.Error}}' api-gateway
docker logs --tail 200 api-gateway

# 3) 网络异常:检查端口与连通性
ss -lntp | grep 8080
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8080/health

五、巡检记录模板要素(可复制)

巡检时间: 2024-06-01 09:00
巡检人: ops01
节点/容器: docker-host-01 / api-gateway, order-service
问题: 无
处理动作: 无
结论: 正常

六、常见问题与快速处理

  1. 容器频繁重启
    - 排查:退出码、OOM、日志错误。
docker inspect --format '{{.State.ExitCode}} {{.State.OOMKilled}}' api-gateway
docker logs --tail 100 api-gateway
  1. 镜像拉取失败
    - 排查:仓库可用性与认证。
curl -I http://registry.local/v2/
docker login registry.local
  1. 磁盘占满
    - 排查并清理无用资源。
docker system df
docker system prune -af

七、练习(动手任务)

  1. 编写并执行 docker_daily_check.sh,输出巡检信息并保存到 /var/log/docker_check.log
  2. 模拟容器重启:运行一个会退出的容器并排查重启原因。
  3. 清理悬挂镜像并验证 docker system df 变化。
  4. 设计一份“变更计划”并包含回滚策略(文本即可)。

通过规范化流程与可执行的巡检机制,形成“发现—响应—恢复—复盘”的闭环,降低运维风险并提升平台稳定性。