【问题标题】:How to deliver dockerized app to client?如何将 dockerized 应用程序交付给客户端?
【发布时间】:2015-08-11 17:22:11
【问题描述】:

我的应用程序由 Web 服务器 (node.js)、多个工作人员 (node.js) 和 Postgres 数据库组成。通常我会使用 postgres 插件在 heroku 上创建应用程序,然后使用Procfile 中定义的进程将应用程序推送到那里。

但是,客户希望通过 docker 将应用程序交付到他的私有服务器。所以流程应该是这样的:我在我的 node.js 应用程序中进行了一些更改(在工作人员的 Web 服务器中),“推送”更改到 repo(docker 集线器?)和客户端,当他准备好“拉”更改的应用程序(图像?) 到他的服务器和应用程序(docker 容器?)使用新的更新代码重新启动。

我是 docker 新手,即使在阅读了几篇文章/教程后,我也不确定如何使用 docker...

因此,理想情况下,如果有一个包含我的应用程序代码的 docker 映像(在 docker hub 中),数据库和客户端可以以某种方式拉取它并运行它... docker 可以吗?

【问题讨论】:

    标签: docker


    【解决方案1】:

    标准策略是将系统的每个组件打包到单独的 docker 映像中(这称为微服务架构),然后创建一个“编排”——一组用于部署、启动/停止和更新的脚本。

    例如:

    • 部署脚本从 docker repo(Docker Hub 或您的私有 repo)中拉取镜像并调用启动脚本
    • 启动脚本只是为每个组件执行docker run
    • 停止每个组件的脚本调用docker stop
    • 更新脚本调用停止脚本,然后从 repo 更新图像,然后调用启动脚本

    互联网上有一些旨在简化编排的软件项目,例如this SO answer 有一个完整的列表。但通常普通的 bash 脚本也能正常工作。

    【讨论】:

    • 如果您为系统的每个组件构建和分发完整的操作系统映像,每个服务的 docker 映像可能会变得非常麻烦。它非常适用于go 之类的东西,其中没有依赖项和微小的图像,对于具有多个臃肿的 os 包依赖项的应用程序来说则不然。您可以在一个容器中运行多个受监督的进程。您还可以分发可以运行所有单独服务的单个基础映像。
    • @Matt 这是真的,微服务架构并不总是那么方便。但有时这可能是有益的,例如我们运行多个 python 应用程序,因此我们有所有这些应用程序的通用 python 基础映像 -> docker 映像大小相对较小。
    • 是的,小就是好。小而普通的图像很棒。构建、存储和分发大图像很容易,这些大图像基本上只是相互复制,内容差异很小。当您可能对单个图像执行相同操作时,但会以两种不同的方式将两种不同的方式启动到两个不同的容器服务中。
    • 仅供参考,您似乎忘记在最后一段中包含链接。
    猜你喜欢
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2020-09-28
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    相关资源
    最近更新 更多