将 docker-compose 与多个存储库一起使用
Posted
技术标签:
【中文标题】将 docker-compose 与多个存储库一起使用【英文标题】:Use docker-compose with multiple repositories 【发布时间】:2017-06-03 13:21:38 【问题描述】:我目前正在努力部署我的服务,我想问一下,当您必须处理多个存储库时,正确的方法是什么。存储库是独立的,但要在生产环境中运行,一切都需要启动。
我的设置:
Git 存储库后端: 后端项目 Rails docker-compose:后端(公开 3000)、db 和 redis Git 存储库前端 Express.js 服务器 docker-compose:(暴露 4200)两者都可以独立运行,测试可以由CI执行
用于生产的 Git 存储库 nginx 需要连接到其他两个服务(同一个 docker 网络) 将请求转发到正确的服务我已经尝试将这两个服务作为子模块包含到 Nginx 存储库中,并使用 nginx 存储库的 docker-compose,但我对此并不满意。
【问题讨论】:
【参考方案1】:您可以让您的 CI 为您要运行的每个服务构建和推送映像,并让生产环境运行所有 3 个容器。
那么,您的作品docker-compose.yml
将如下所示:
lb:
image: nginx
depends_on:
- rails
- express
ports: 80:80
rails:
image: yourorg/railsapp
express:
image: yourorg/expressapp
注意docker-compose
不推荐用于生产环境;您应该考虑使用Distributed Application Bundles(这仍然是一个实验性功能,将在 1.13 版中发布到核心)
或者,您可以使用 ansible
或 bash 脚本之类的工具来编排容器;只需确保您创建了一个 docker 网络并将所有三个容器都附加到该网络上,以便它们可以找到彼此。
编辑:由于 Docker v17 和 DABs 的弃用支持 Compose file v3,似乎对于单主机环境,docker-compose
是运行多服务应用程序的有效方式。对于多主机/HA/集群化场景,您可能需要查看Docker Swarm 以获得自我管理的解决方案,或者查看Docker Cloud 以获得更多的PaaS 方法。无论如何,我建议您在Play-with-Docker 中尝试一下,这是一个官方在线沙盒,您可以在其中分拆多个主机并使用 swarm 集群,而无需分拆您自己的盒子。
【讨论】:
感谢您的回答。我将更多地研究容器编排工具,如 kubernetes 或 docker swarm。 我可以推荐Docker official trainings 以快速了解如何在沙盒、0 设置环境中执行此操作。此外,使用docker-compose
v 3+ 现在可以部署到使用docker stack deploy
的swarm 集群。请务必阅读有关撰写服务的新 deploy
选项的文档。
docker-compose
的其中一张图片更新时会自动更新吗?
docker-compose
自动拉取本地不可用的图像。如果您的撰写服务没有使用image
而是使用build
,并且您已经使用docker-compose build
重新构建了映像,那么docker-compose up
将重新创建与该映像关联的容器。如果图像在本地可用,其repo/name:tag
与撰写文件中声明的图像相同,则不会。如果您不确定,只需在up
之前执行docker-compose pull
以上是关于将 docker-compose 与多个存储库一起使用的主要内容,如果未能解决你的问题,请参考以下文章