Docker Swarm – 跨主机部署共享代码库

我有一个关于将应用程序部署到基于Docker群的生产的最佳实践的问题。

为了简化与这个问题有关的讨论/问题让我们考虑下面的情况: 在这里输入图像说明

我们的群体包含:

  • 6台服务器(不同的主机)
  • 在每台服务器上,我们将有一个服务
  • 每个服务将只有一个任务/副本泊坞窗运行
  • Memcached1和Memcached2使用来自docker中心的公共图像
  • “回收数据1”和“回收数据2”使用私人存储库中的定制图像
  • “客户端1”和“客户端2”使用来自私人存储库的定制图像

最后,对于我们的示例应用程序,我们有6个不同的服务器上运行的docker。 2个docker是memcached,其中4个是与memcached进行通信的客户端。 “客户端1”和“客户端2”将根据某种规则将数据插入到memcached中。 “回收数据1”和“回收数据2”将根据某种规则更新或删除memcached中的数据。 就那么简单。

我们与memcached进行通信的应用程序是自定义的,它们是由我们编写的。 这些应用程序的代码驻留在github(或任何其他存储库)上。 将此应用程序部署到生产中的最佳方式是什么?

  1. 构build包含复制代码的图像,您可以使用这些代码将部署到群集中
  2. 构build将使用代码驻留在图像外部的音量的图像。

考虑到我第一次将swarm部署到生产环境中,我可以看到许多与第一种方法相关的问题。将代码合并到映像中似乎对我来说是不合逻辑的,考虑到在99%的时间,将要发生的更新将是基于代码的。 这将需要每次更新在特定泊坞窗上运行的代码(无论该更改是多么小)的时候都需要构build映像。

方式2对我来说似乎更合乎逻辑。 但在这个具体的时刻,我不确定这是可能的吗? 所以这里有很多问题:

  1. 如果我们要托pipe多个在后台运行相同代码的docker,最好的方法是什么?
  2. 是否有可能在docker群,有一个中央主机,服务器(经理,在任何地方),我们可以克隆我们的仓库,并共享这些仓库作为整个docker群的卷? (在我们的示例中,所有4个客户服务都将在我们拥有代码的地方安装音量)
  3. 如果这是可能的,docker-compose.yml的实现是什么?