【问题标题】:Wrap application deployables in Docker Image在 Docker Image 中包装应用程序部署
【发布时间】:2015-10-05 07:31:41
【问题描述】:

我想让部署到生产环境变得最简单,但在如何做到这一点时遇到了困难。

如果我将 docker 用于生产,最好将 docker 映像与我的应用程序部署一起使用,但我不确定这是否是个好方法。

我有几个问题:

  1. 图层系统会不会膨胀,什么时候我在新版本的图像中每次都替换文件?
  2. 将数据库脚本和迁移工具作为此映像的一部分是个好主意吗?
  3. 最后一个问题是如何方便地运行它。我不想去那里停止 tomcat 容器并使用新应用程序映像中的卷再次启动它(因为新的应用程序容器名称不能相同)。

我已经看到了这样做的方法,但我不太喜欢它们,即部署到 Tomcat docker 映像,使用已捆绑的应用程序创建 Tomcat 映像或使用主机系统卷。我喜欢安装“CD”之类的东西。我想用其他方法评估我的想法,谈论运行它的正确工具可能是为了其他问题。

【问题讨论】:

    标签: deployment docker production-environment


    【解决方案1】:

    图层系统不会膨胀,什么时候我每次在新版本的图像中替换文件?

    不,因为你可以clean up dangling images

    docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
    

    将数据库脚本和迁移工具作为此映像的一部分是个好主意吗?

    是的,如果您的启动脚本知道检测是否需要应用它们。

    我不太喜欢它们,即部署到 Tomcat docker 映像,使用已捆绑的应用程序创建 Tomcat 映像或使用主机系统卷。

    如果您的数据卷容器与应用程序是分开的,那应该不是问题。

    来自the discussion,OP 补充道:

    使用这个docker create --name <container_name> <image_name> 与不同的图像名称可以保留容器名称,我可以运行具有相同volumes-from 的Tomcat 容器?

    docker run -it --rm -p 8888:8080 --volumes-from <container_name> <image_name>
    

    是这样的想法,但如果已经有一个具有该名称的创建数据容器,它就行不通了。

    如果其中没有持久性数据,可以 docker rm 那个数据容器,然后用相同的名称重新创建它。

    如果有持久数据,那么最好通过中间 (docker run) 容器复制新更新的数据,该容器将临时挂载数据容器。

    【讨论】:

    • 抱歉,这可能是个愚蠢的问题,但我的 Tomcat 容器需要知道它从哪个容器中使用可部署项。如果我将使用 app 1.1 创建新容器,我将无法使用相同的名称命名容器并使用 --volumes-from 与其链接。所以我至少需要替换 Tomcat 容器的数据卷名称,对吧?
    • @Zveratko 一个数据卷容器包含数据,没有应用,所以版本在这里不适用,它的名字永远不会改变。
    • 但这就是我想要的,普通的 Tomcat 容器,并让它使用另一个包含应用程序二进制文件的容器(仅数据)(这个容器将根据应用程序版本进行版本控制/标记)。它需要更多的编排,但我认为这是非常合法的方法,不是吗?
    • @Zveratko 它是,但是当你创建你的数据容器时,你可以给它一个固定的名字,然后在你的 tomcat 容器中使用那个名字。
    • 但是我需要替换它的内容。我的意思是放入正确的二进制文件。我询问将二进制文件包装在图像中。因此,我将为每个应用程序版本提供 docker 映像。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    相关资源
    最近更新 更多