如何在Docker上管理多个项目?

时间:2018-04-03 10:59:15

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

在我们公司~7个项目中,每个项目都基于Docker。每个项目都包含基本服务,如MySQL,Nginx,PHP。一些项目与其他项目进行通信。由于同一端口上有许多服务,我们为每个项目制作新的docker主机(docker-machine)。从这里开始几乎没有问题:

  • VirtualBox为每个Docker主机分配随机IP,具体取决于执行顺序。
  • 难以从项目切换到项目,需要始终设置不同的shell环境。容易犯错。

好吧,我正在寻找更多的企业解决方案来管理很多docker机器。或者是一些可以帮助我了解现状的技术。

2 个答案:

答案 0 :(得分:1)

去年夏天,我遇到了类似的问题。

首先,我开始将我的项目部署到swarm-cluster作为服务,而不是集群几个docker VM。这使我能够只使用服务ID来玩服务。重要的是如何将项目分成服务,这部分可能很麻烦,具体取决于您的项目。

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

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

答案 1 :(得分:0)

虚拟机消耗资源,如果不一定,最好避免使用它。相反,您可以在裸机上部署Docker swarm中的项目。

但是因为每个项目都有一个需要从外部访问的入口点(即https://site1.comhttps://site2.com),所以你不能暴露同一个端口(class BaseTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { ... } } class ChildViewController: BaseTableViewController { override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { ... } } 或{ {1}})用于同一群中的所有前端服务。为此,您可以使用HAProxy或Nginx等反向代理,根据主机名将请求转发给正确的服务。反向代理也可以是群中的服务。在这种情况下,您不应再暴露项目的端口。

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

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