【发布时间】:2014-07-25 12:24:17
【问题描述】:
这是我的情况:
- 我有一个用 Go 编写的项目存储在 Github 上
- 我在负载平衡器后面有 3 个应用服务器(app1、app2、app3)
- 我有一个 Dockerfile 作为 git 项目的一部分,当用于构建映像时,它知道如何安装我的所有应用程序依赖项(包括 Go)并为我的应用程序获取工作环境
- 我在所有 3 个应用服务器上都运行了容器,并且一切都运行得非常好
现在我想更改一些代码并将我的更改重新部署到这 3 台服务器。我可以想到 3 种可能的方法来促进自动化:
- 作为我的 dockerfile 的一部分,我可以添加一个从 Github 提取我的代码并构建它的步骤。因此,要重新部署,我需要一个脚本来登录 3 个服务器并重建和运行容器,从而在该过程中提取所有新代码。我最多只需要推送到服务器就是 Dockerfile。
- 作为 Dockerfile 的一部分,我可以使用 ADD 命令将我的代码捆绑到容器中。然后,我需要使用 Capistrano 或 Fabric 将整个项目部署到每台服务器,然后终止旧容器,重新构建并运行。
- 我可以使用指定的机器(或我的开发环境)基于当前源代码构建新的镜像。然后将此图像推送到注册表。然后有一个脚本登录到我的服务器并拉下新图像,杀死旧容器并运行新容器。
第 1 项似乎是最简单的,但我读过的关于 Dockers 的大多数其他讨论倾向于第 3 项这样的情况,这对我来说似乎相当冗长。
这里(或不是这里)最好的选择是什么,我是 Docker 新手,所以我错过了什么吗?我问了一个了解 Docker 的人,他们的回答是“你没有以 Docker 的方式思考”,那么 Docker 的方式是什么?
【问题讨论】:
-
他们说征求意见的问题不适合堆栈溢出。但我不确定在哪里问这个问题会更好...... :)
标签: deployment docker