使用docker-compose与多个存储库

我目前正在努力部署我的服务,我想问一下,当你必须处理多个存储库时,什么是正确的方法。 版本库是独立的,但要运行在生产环境中,一切都需要启动。

我的设置:

  • Git存储库后端:
    • 后端项目的Rails
    • docker-compose:后端(公开3000),db和redis
  • Git仓库前端
    • Express.js服务器
    • docker-compose :(揭露4200)

两者都可以独立运行,testing可以由CI执行

  • Git仓库Nginx的生产
    • 需要连接到其他两个服务(同一个dockernetworking)
    • 将请求转发给正确的服务

我已经尝试将这两个服务作为子模块包含到Nginx存储库中,并使用nginx回购的docker-compose,但我并不满意。

您可以让CI创build并为每个要运行的服务推送映像,并让生产环境运行全部3个容器。

然后,您的生产docker-compose.yml将如下所示:

 lb: image: nginx depends_on: - rails - express ports: 80:80 rails: image: yourorg/railsapp express: image: yourorg/expressapp 

需要注意的是, docker-compose不build议用于生产环境。 你应该看看使用分布式应用程序包 (这是一个实验性的function,将在1.13版本发布到核心)

或者,你可以用一个像ansible或bash脚本的工具来编排你的容器; 只要确保你创build了一个dockernetworking,并将所有的三个容器连接到它,以便他们可以find对方。

编辑:自从Docker v17和弃用DAB s转而使用Compose文件v3之后 ,似乎对于单主机环境, docker-compose是运行多服务应用程序的有效方式。 对于多主机/ HA /集群化scheme,您可能需要考虑Docker Swarm作为自我pipe理解决scheme,或者Docker Cloud作为更多PaaS方法。 无论如何,我build议您在Play-with-Docker (官方在线沙盒)中尝试一下,在这个官方networking沙盒中,您可以分离出多个主机,并且可以随时随地使用swarm群集,而无需拆分自己的盒子。