【问题标题】:How to automate multi server deployment using docker如何使用 docker 自动化多服务器部署
【发布时间】:2014-07-25 12:24:17
【问题描述】:

这是我的情况:

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

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

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

第 1 项似乎是最简单的,但我读过的关于 Dockers 的大多数其他讨论倾向于第 3 项这样的情况,这对我来说似乎相当冗长。

这里(或不是这里)最好的选择是什么,我是 Docker 新手,所以我错过了什么吗?我问了一个了解 Docker 的人,他们的回答是“你没有以 Docker 的方式思考”,那么 Docker 的方式是什么?

【问题讨论】:

  • 他们说征求意见的问题不适合堆栈溢出。但我不确定在哪里问这个问题会更好...... :)

标签: deployment docker


【解决方案1】:

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

例如在稍微复杂一点的场景中,如果您使用选项 1,这三个构建甚至可以选择不同的提交。

【讨论】:

  • 好点,我没有想到它的一致性方面,我猜这就是 docker 的全部意义所在。
  • 好的,一切都很好,但是提到“登录到我的服务器并拉下新映像的脚本,杀死旧容器并运行新容器”是什么?一个普通的旧 bash 脚本?还是什么工具?
【解决方案2】:

选项 2 和 3 的组合可用于Fabricio。它是Fabric 的扩展,因此您的项目的fabfile.py 可能看起来像这样:

from fabricio import docker, tasks

app = tasks.ImageBuildDockerTasks(
    service=docker.Container(
        name='app',
        image='registry/project/image:tag',
        options={'publish': '8000:8000'},
    ),
    hosts=['user@host1', 'user@host2', 'user@host3'],
)

使用上面的配置定义,您可以在项目根目录中输入fab --list 并查看可用的 Fabricio 命令列表:

Available commands:

    app           prepare -> push -> backup -> pull -> migrate -> update
    app.deploy    prepare -> push -> backup -> pull -> migrate -> update
    app.prepare   prepare Docker image
    app.pull      pull Docker image from registry
    app.push      push Docker image to registry
    app.rollback  rollback Docker service to a previous version
    app.update    update service to a new version

还有一堆examples of how to use Fabricio,包括Docker swarm mode,可能对你的配置很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多