如何使用docker自动化多服务器部署

Mat*_*son 9 deployment docker

这是我的情况:

  • 我有一个用Go编写的项目存储在Github上
  • 我在负载均衡器(app1,app2,app3)后面有3个应用服务器
  • 我有一个Dockerfile作为git项目的一部分,当用于构建映像时,它知道如何安装我的所有应用程序依赖项(包括Go)并为我的应用程序获得工作环境
  • 我在所有3个应用程序服务器上运行容器,一切都运行得非常好

现在我想更改一些代码并将我的更改重新部署到这3个服务器.我可以想到3种可能的方法来促进自动化:

  1. 作为我的dockerfile的一部分,我可以添加一个从Github中提取代码并构建它的步骤.因此,要重新部署,我需要一个登录3个服务器并重建并运行容器的脚本,从而在此过程中提取所有新代码.我最需要推送到服务器的是Dockerfile.
  2. 作为我的Dockerfile的一部分,我可以使用ADD命令将我的代码捆绑到容器中.然后我需要使用像Capistrano或Fabric之类的东西将我的整个项目部署到每个服务器,然后杀死旧容器,重建并运行.
  3. 我可以使用指定的机器(或我的开发环境)根据当前源代码构建新图像.然后将此图像推送到注册表.然后有一个脚本登录到我的服务器并拉下新图像,杀死旧容器并运行新容器.

1号似乎是最容易的,但我在Dockers上阅读的大多数其他讨论都倾向于像3这样的情况,这对我来说似乎相当啰嗦.

什么是最好的选择(或不在这里),我是Docker的新手,所以我错过了什么?我问过一个知道Docker的人,他们的回答是"你没有想到Docker的方式",那么Doc​​ker的方式是什么?

iva*_*ant 5

我认为选项3的想法是,您只构建一次图像,这意味着所有服务器都将运行相同的图像.另外两个可能产生不同的图像.

例如,在一个稍微复杂的场景中,如果你选择1,那么三个版本甚至可以选择不同的提交.