Docker Compose 标准工作流与平滑更新

Docker Compose 是管理多容器微服务应用(如 Web + 数据库 + 缓存)的标准工具。


一、 典型工作流

  1. 项目启动(后台运行)
    docker compose up -d
    注:加上 --build 参数可在启动前强制重新构建镜像
  2. 状态与调试
    • 检查状态:docker compose ps
    • 实时日志:docker compose logs -f <服务名>
  3. 关闭项目(保留数据)
    docker compose down
    该命令会停止并移除容器和网络,但不会删除 docker-compose.yml 中定义的命名数据卷(Volumes)。
  4. 彻底卸载(删除数据)
    docker compose down -v
    加上 -v 选项会删除命名卷与匿名卷,数据库中的数据会被永久抹除。

二、 容器平滑更新(三步法)

当远端有镜像发布更新时,最标准的更新流程不需要手动删容器,采用以下三步可实现应用零感/平滑升级,并自动清理垃圾:

[1. 拉取新镜像] ➔ [2. 智能重建容器 GV] ➔ [3. 清理废弃悬挂镜像]

1. 第一步:拉取最新镜像层

docker compose pull
  • 读取 YAML 配置中的标签(如 latest),到仓库拉取最新的镜像。

2. 第二步:执行 up 自动重建(核心)

docker compose up -d
  • 核心逻辑:Docker Compose 会对比本地容器和新拉取的镜像。如果发现镜像发生更新,它会自动停止旧容器,删除旧容器,并用新镜像启动新容器
  • 平滑性:未更新的其他关联服务(如数据库)在此期间保持正常运行,不受波及。

3. 第三步:清理废弃的旧镜像层

docker image prune -f
  • 容器升级后,原本的旧镜像会变成无标签的悬挂状态(Dangling),执行此命令可快速释放磁盘空间。

🚀 快捷一键更新链:

docker compose pull && docker compose up -d && docker image prune -f

💡 生产案例:一键更新 CLIProxyAPI 容器

cd /root/cli-proxy-api/ && docker compose pull && docker compose up -d && docker image prune -f

三、 常用更新快捷别名与 Agent 技能调优

为了提升运维效率,系统的终端环境变量 ~/.bashrc 中已注入快捷别名,可直接调用:

  • up-cli:一键平滑更新 CLIProxyAPI 代理网关。
  • up-ignis:一键平滑更新 Ignis 知识库看板。
  • up-cf:一键平滑更新 Cloudflare Tunnel 隧道网关。
  • up-all:顺序平滑升级服务器上的所有容器并自动回收垃圾磁盘空间。

同时,该工作流已固化为 Agent 动态技能 docker-container-update(路径:~/.hermes/skills/devops/docker-container-update/SKILL.md)。当向 Agent 下发“检查并更新容器”指令时,Agent 会自动调用该技能在后台进行安全静默更新。


四、 配置强制重建

如果你没有更新远程镜像,只是修改了本地的 .env 环境变量或被挂载的配置文件,并希望强制重建容器:

docker compose up -d --force-recreate
  • 该参数会强制销毁当前容器并重新生成,无需理会镜像是否有变化。

相关链接