Deployment 在Docker映像中包装应用程序可部署项

Deployment 在Docker映像中包装应用程序可部署项,deployment,docker,production-environment,Deployment,Docker,Production Environment,我想让部署到生产环境中变得最简单,但却在为如何做到这一点而苦苦挣扎 若我将docker用于生产,那个么将docker映像与我的应用程序可部署组件结合在一起会很好,但我不确定这是否是一个好方法 我有几点担心: 当我每次在新版本的图像中替换文件时,图层系统不会膨胀吗 将DB脚本和迁移工具作为此映像的一部分是一个好主意吗 最后一个问题是如何方便地运行它。我不想去那里停止tomcat容器并使用新应用程序映像中的卷再次启动它(因为新应用程序容器名称不能相同) 我已经看到了实现这一点的方法,但我不太喜欢这些

我想让部署到生产环境中变得最简单,但却在为如何做到这一点而苦苦挣扎

若我将docker用于生产,那个么将docker映像与我的应用程序可部署组件结合在一起会很好,但我不确定这是否是一个好方法

我有几点担心:

  • 当我每次在新版本的图像中替换文件时,图层系统不会膨胀吗
  • 将DB脚本和迁移工具作为此映像的一部分是一个好主意吗
  • 最后一个问题是如何方便地运行它。我不想去那里停止tomcat容器并使用新应用程序映像中的卷再次启动它(因为新应用程序容器名称不能相同) 我已经看到了实现这一点的方法,但我不太喜欢这些方法,即部署到Tomcat docker映像,使用已经绑定的应用程序创建Tomcat映像,或者使用主机系统卷。我喜欢像安装“CD”这样的东西。我想用其他方法来评估我的想法,谈论运行它的合适工具可能还有其他问题

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

    不,因为你可以

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

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

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

    如果您的数据卷容器与应用程序分离,那么这不应该是一个问题

    从中,OP补充道:

    使用具有不同映像名称的
    docker create--name
    可以保留容器名称,并且我可以从中运行具有相同卷的Tomcat容器

    docker run-it--rm-p 8888:8080--
    
    这是一个想法,但是如果已经有一个具有该名称的createdatacontainer,那么它将不起作用

    如果其中没有持久性数据,则可以对该数据容器进行docker rm,并使用相同的名称重新创建它


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

    对于可能愚蠢的问题,很抱歉,但我的Tomcat容器需要知道它是从哪个容器使用可部署的。如果我将使用app1.1创建新容器,我将无法使用--volumes from为容器命名并与之链接。因此,我至少需要替换Tomcat容器的数据卷名称,对吗?@Zveratko数据卷容器包含数据,没有应用程序,因此版本在这里不适用,其名称永远不会更改。但这就是我想要的,普通Tomcat容器,并让它使用另一个容器(仅数据)来保存应用程序二进制文件(此版本将根据应用程序版本进行版本控制/标记)。它需要更多的编排,但我认为这是一种相当合法的方法,不是吗?@Zveratko是的,但是当你创建数据容器时,你可以给它一个固定的名称,并将其与tomcat容器一起使用。但是,我需要替换它的内容。我的意思是放入正确的二进制文件。我想知道如何将二进制文件包装在侧图像。然后我会有每个应用程序版本的docker图像。
    docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
    
    docker run -it --rm -p 8888:8080 --volumes-from <container_name> <image_name>