docker compose 本身不监听 git 变更,而是由 ci/cd 工具(如 jenkins、gitlab ci)在检测到 git 推送后调用,执行拉取代码、构建镜像、重启服务等自动化部署流程。

Docker Compose 本身不直接监听 Git 变更,但可以和 Git 仓库深度协同,成为自动化部署流程中“执行层”的核心。关键不在于 Compose 自己拉代码,而在于它被 CI/CD 工具(如 Jenkins、GitLab CI、GitHub Actions)调用,在代码更新后快速重建并上线服务。
Git 仓库是部署的触发源和代码来源
所有代码变更都提交到 Git 仓库(GitHub/Gitee/GitLab),这是整个流程的起点。自动化部署依赖两个基础能力:
- 代码可追溯:每次提交都有唯一 commit hash,便于回滚或定位问题
-
分支策略清晰:例如用
main分支代表生产就绪代码,CI/CD 工具只监听该分支的推送 -
配套文件齐全:项目根目录必须包含
docker-compose.yml(定义服务、网络、卷等),以及可能需要的.env或构建上下文(如Dockerfile)
Jenkins 或 Git CI 是调度中枢
它监听 Git Webhook(推荐)或轮询仓库,一旦检测到新提交,就按预设流程执行:
- 从 Git 拉取最新代码(含
docker-compose.yml) - 运行测试(可选,比如用
docker-compose run --rm test启一个临时测试容器) - 构建镜像(如果用的是本地
Dockerfile,执行docker-compose build) - 停止旧容器、启动新服务:
docker-compose up -d --force-recreate --remove-orphans
注意:Jenkins 容器需挂载宿主机的 docker.sock 和 docker-compose 二进制文件,才能在容器内操作宿主机 Docker 引擎。
docker-compose.yml 是部署的“说明书”
这个文件决定了部署行为是否可靠、可复现。生产环境建议:
- 镜像使用明确标签(如
myapp:1.2.0),避免用latest导致不可控更新 - 挂载外部配置(如
./config:/app/config),让配置与镜像分离,便于不同环境切换 - 设置健康检查(
healthcheck)和重启策略(restart: unless-stopped),提升稳定性 - 生产环境慎用
build:指令,优先用预构建并推送到私有 Registry 的镜像
安全与权限不能跳过
自动部署涉及服务器操作,权限控制必须到位:
- Git 仓库如果是私有的,Jenkins 或 CI Runner 必须配置 SSH Key 或 Personal Access Token 才能拉代码
- 部署目标服务器上,运行
docker-compose的用户需属于docker用户组 - 敏感信息(数据库密码、JWT密钥)不要硬编码在
docker-compose.yml中,改用environment+.env文件,并确保.env不提交到 Git











