将 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 与多个存储库一起使用的主要内容,如果未能解决你的问题,请参考以下文章

使用 docker-compose 从私有仓库拉取镜像

将 nodemon 与 docker 和 docker-compose 一起使用

将 Laravel 存储库与数据表一起使用

将存储库模式与文档数据库一起使用是不是有意义?

将存储库模式(和查询范围)与关系一起使用

如何将 Xcode 与克隆的 git 存储库一起使用