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

Wrap application deployables in Docker Image

我想以最简单的方式将产品部署到生产环境中,但一直在努力解决如何部署的问题。

如果我将 docker 用于生产,我的应用程序可部署文件中有 docker 图像会很好,但我不确定这是否是好的方法。

我有几个顾虑:

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

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

wouldn't the layer system bloat, when I will replace the file every time in new version of image?

不,因为你可以 clean up dangling images

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

Is it good idea to make DB scripts and migration tool part of this image?

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

I don't like them very much i.e. deploy to Tomcat docker image ,create Tomcat image with application already bundled or use host system volume.

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

来自 the discussion,OP 添加:

using this docker create --name <container_name> <image_name> with different image name can retain the container name and I can run Tomcat container with the same volumes-from?

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

这是个主意,但如果已经有一个同名的创建数据容器,它就不会工作。

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

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