【问题标题】:How to manage multiple projects on Docker?如何在 Docker 上管理多个项目?
【发布时间】:2018-04-03 10:59:14
【问题描述】:

在我们公司有大约 7 个项目,每个项目都基于 Docker。每个项目都包含基础服务,如 MySQL、Nginx、PHP。一些项目与其他项目进行通信。由于同一端口上有许多服务,我们为每个项目创建新的 docker 主机(docker-machine)。从这里开始会出现一些问题:

  • VirtualBox 为每个 Docker 主机分配随机 IP,取决于执行顺序。
  • 很难从一个项目切换到另一个项目,需要一直设置不同的shell envs。容易出错。

嗯,我正在寻找更多的企业解决方案来管理许多 docker 机器。或者一些可以帮助我解决当前情况的技术。

【问题讨论】:

  • 为什么不使用不同的端口?
  • @constantin-galbenu 因为我们想在本地机器上使用端口 80 打开我们的网站。例如 site.com、site2.com 而不是 site.com:5001、site2.com:5002。
  • 为此,您只能在服务前拥有一台机器和一个反向代理(即 HAProxy 或 Nginx)。
  • @constantin-galbenu 我们将相同的 docker-compose 配置部署到测试和暂存服务器。这意味着这些服务器上的端口也不会是 80。
  • 所以你在两台服务器上放了一个类似的反向代理

标签: docker networking docker-compose docker-swarm docker-machine


【解决方案1】:

去年夏天我也遇到过类似的问题。

首先,我开始将我的项目部署到 swarm-cluster 作为服务,而不是集群多个 docker 虚拟机。这使我能够只使用服务 ID 来玩转服务。重要的是如何将项目分成服务,这部分可能会根据您的项目而繁琐。

https://docs.docker.com/engine/swarm/swarm-tutorial/deploy-service/

然后,我在 swarm-manager 上构建了一次配置和监控软件并使用它。您可以使用 docker-manager 上的自动化工具来控制服务。

【讨论】:

    【解决方案2】:

    虚拟机会消耗资源,如果不是必须的,最好避免它。相反,您可以在裸机上部署 docker swarm 中的项目。

    但是因为每个项目都有一个需要从外部访问的入口点(即https://site1.comhttps://site2.com),所以您不能为所有项目公开相同的端口(@98​​7654324@ 或80)前端服务在同一个集群中。为此,您可以使用 HAProxy 或 Nginx 等反向代理,根据主机名将请求转发到正确的服务。反向代理也可以是 swarm 中的服务。在这种情况下,您不应再公开项目的端口。

    反向代理还有许多其他的advantages,比如 SSL 终止(这使得 SSL 证书管理变得更加容易)。

    如果您将项目添加到同一个自定义网络,那么来自不同项目的服务可以使用它们的 docker 服务名称和内部端口(即80)安全直接地通信。

    【讨论】:

      猜你喜欢
      • 2018-02-14
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 2019-05-21
      • 1970-01-01
      相关资源
      最近更新 更多