Docker 在 CentOS 上的自动化运维落地方案
一、总体架构与工具选型
- 单机与多容器应用:用 Docker Engine + Docker Compose 定义服务、网络、卷与重启策略,一条命令完成拉起、升级与回滚,适合大多数业务与测试环境。
- 多机与弹性伸缩:用 Kubernetes(或轻量替代 Docker Swarm)做编排、自愈、灰度与滚动升级,适合生产级可用性与规模化。
- 可视化与自助化:用 Portainer 做 Web 可视化管理,用 Spug 做批量执行、发布与任务编排,降低运维门槛。
- 选型建议:
- 小团队/快速交付:Compose + Portainer/Spug
- 中大型/高可用:Kubernetes(或 Swarm) + 可视化平台
二、标准化交付与自动化流程
- 镜像与代码:以 Dockerfile 固化运行环境与依赖;用 多阶段构建 减小镜像体积;按语义化版本或 Git SHA 打标签;将镜像推送到私有仓库(如 Harbor)。
- 编排与配置:用 docker-compose.yml 或 Kubernetes 清单 定义副本数、资源限制、健康检查、探针、环境变量与密钥挂载;通过 .env 与 ConfigMap/Secret 管理差异化配置。
- 发布与回滚:
- Compose:使用 docker-compose up -d --build 拉起新版本;回滚用 docker-compose up -d --no-deps 并指定旧镜像标签。
- K8s:用 Deployment 的滚动更新策略(maxSurge/maxUnavailable),回滚用 kubectl rollout undo。
- 自愈与重启:容器设置 restart policy(如 always / unless-stopped);K8s 通过 livenessProbe/readinessProbe 自动重启异常容器。
- 可观测性:统一输出 JSON 日志 到 stdout/stderr,接入 ELK 或 Loki;暴露 /metrics 供 Prometheus 抓取并配置 Grafana 面板。
- 安全基线:以 非 root 用户运行容器;启用 seccomp/AppArmor 或镜像最小权限;镜像 漏洞扫描 与 准入控制;密钥走 Secret 而非环境变量明文。
三、关键自动化场景与命令示例
-
场景1:单机一键交付与自启动
- 安装 Docker(CentOS 7/8 示例):
- sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- sudo yum install -y docker-ce docker-ce-cli containerd.io
- sudo systemctl start docker && sudo systemctl enable docker
- 运行示例容器(设置自启动策略):
- sudo docker run -d --name web --restart always -p 8080:80 nginx:1.25
- 说明:上述流程覆盖安装、启动与设置 开机自启;容器通过 –restart 实现故障与重启后的自动拉起。
-
场景2:多容器应用编排(Compose)
- 示例 compose.yml(节选):
- version: “3.8”
- services:
- web:
- image: myorg/web:1.2.3
- ports: [“8080:80”]
- restart: unless-stopped
- healthcheck: test: [“CMD”, “curl”, “-f”, “http://localhost/health”]
- environment:
- db:
- image: postgres:15
- environment:
- POSTGRES_PASSWORD_FILE=/run/secrets/db_pwd
- secrets:
- secrets:
- db_pwd:
- file: ./secrets/db_pwd.txt
- 常用命令:
- 启动:docker-compose up -d
- 滚动更新:docker-compose up -d --build --no-deps web
- 回滚:docker-compose up -d --no-deps web(改用旧镜像标签)
- 查看状态:docker-compose ps && docker-compose logs -f
-
场景3:多机编排与自愈(Kubernetes)
- 部署应用(示例):
- kubectl apply -f deploy.yaml(包含 Deployment/Service/ConfigMap/Secret)
- 滚动升级与回滚:
- kubectl set image deployment/web web=myorg/web:1.2.4
- kubectl rollout status deployment/web
- kubectl rollout undo deployment/web
- 有状态服务(如 Zookeeper)可用 Operator 管理集群生命周期、持久化与恢复,降低人工介入。
-
场景4:可视化与自助化运维
- Portainer:部署后通过 Web 界面管理容器、镜像、网络与卷,适合团队自助与审计。
- Spug:Docker Compose 快速部署,提供 主机批量执行、在线终端、文件分发、应用发布、计划任务、监控报警 等能力,适合中小团队的自动化运维平台化。
四、高可用与弹性扩展实践
- 服务可用性:为关键容器配置 restart policy 与 健康检查探针;K8s 通过 ReplicaSet/Deployment 保证副本数,异常自动重建。
- 数据与持久化:数据库等有状态服务使用 PV/PVC 或本地卷,结合 StatefulSet;定期 备份与演练恢复。
- 弹性与调度:K8s 设置 requests/limits 与 HPA(基于 CPU/内存或自定义指标);节点资源不足时 Cluster Autoscaler 自动扩容。
- 发布策略:优先 滚动更新 与 蓝绿/金丝雀 发布,降低变更风险;保留最近 N 个可回滚版本镜像。
- 监控告警:以 Prometheus + Alertmanager 监控容器与节点指标,异常触发 钉钉/企业微信/邮件 告警。
五、落地检查清单
- 基础:Docker 已安装、服务 开机自启、镜像仓库可达、时间同步(NTP)正常。
- 交付:镜像有 版本标签、Compose/K8s 清单纳入 Git 管理、敏感信息走 Secret。
- 运行:容器 重启策略 合理、健康检查通过、日志与 metrics 正常采集。
- 发布:具备 灰度/回滚 流程与演练记录、变更前后指标与业务验证。
- 安全:镜像 漏洞扫描、最小权限运行、网络策略(隔离)、密钥轮换与审计。