在 CI/CD 流水线中集成 Docker Compose,最适合需要同时管理多个容器服务(如应用 + 数据库)的中小型项目,能通过单一配置文件保证环境一致性。
先说结论:使用 Docker Compose 可以简化多服务编排,但需确保流水线服务器已安装 Docker 引擎且权限配置正确。
- 适合:多容器依赖的中小型项目自动化部署
- 先准备:确认 CI/CD runner 具备 Docker 执行权限
- 验收:检查容器运行状态及服务端口连通性
命令速用版
docker-compose up -d `--build`
docker-compose down为什么会这样
Docker Compose 的核心价值在于环境一致性。开发、测试和生产环境均基于同一 docker-compose.yml 配置,避免“开发能跑、测试报错”的情况。在流水线中,它承担“环境模拟 + 服务部署”角色,自动化处理应用与依赖服务的启动顺序和网络配置。
分步处理
1. 环境准备:在构建服务器上安装 Docker 和 Docker Compose。若使用 Jenkins 容器化部署,需挂载 Docker.sock 文件或安装 Docker 客户端,确保容器内能调用宿主机 Docker 引擎。
2. 编写编排文件:创建 docker-compose.yml,定义服务、镜像、端口和卷。对于包含 build 指令的服务,Compose 引擎会根据上下文路径和 Dockerfile 构建镜像。
3. 配置流水线:在 Jenkins 或 GitLab CI 配置文件中添加构建步骤。Jenkins 中可生成 API Token 配合 Gitlab Webhooks 触发构建;GitLab CI 则直接在.gitlab-ci.yml 中定义脚本。
4. 执行部署:流水线触发后,执行构建命令。若未指定 Dockerfile,将默认使用上下文目录下的 Dockerfile 文件。构建完成后,Compose 会自动替换旧容器并启动新实例。
怎么验证是否生效
执行docker ps查看容器状态是否为 Up。通过docker-compose logs检查服务日志是否有报错。访问映射的服务端口,确认业务接口返回正常。
常见坑
1. 权限问题:Jenkins 容器内用户需加入 docker 组,避免频繁使用 sudo 带来的权限问题。
2. 镜像清理:长期运行后可能积累大量悬空镜像,建议在流水线末尾添加清理命令。
3. 网络冲突:多服务协同时需注意网络配置,自动化处理应用与依赖服务的启动顺序,无需人工干预。
参考来源
- Docker Compose CI/CD 集成完全指南:自动化构建、测试与部署-CSDN 博客
- 从零搭建 Docker + Jenkins CI/CD 流水线:实现项目自动化构建与部署
- CI/CD 流水线中 docker-compose up `--build` 的正确打开方式,资深架构师绝不外传的 3 大技巧-CSDN 博客
- Spring Boot 应用的 GitLab CI/CD Docker 部署全过程