在 docker 图像内烘焙应用程序 war 文件与作为卷安装

Baking application war file inside docker image vs mounting as volume

我见过的大多数应用程序都有一个 war 文件烘焙在应用程序服务器 (tomcat) 所在的 docker 映像中。我最近遇到一个应用程序 war 作为卷安装到 tomcat 容器。什么时候使用这种方法?我能看到的唯一情况是您缺少 docker 注册表 space 并且您有很多卷 (PV)。我正在将 docker 化和非 docker 应用程序转换为 kubernetes 部署

尤其是在 Kubernetes 上,总是 将您的应用程序代码放在映像中,从不 将其放在卷中。

Docker 图像的核心概念是它是一个独立的应用程序及其 运行 时间。如果你有图像,你可以 运行 它而没有任何其他部分。您不需要在主机或卷中单独复制应用程序即可 运行 图像。

特别是在 Kubernetes 中,还有一个额外的挑战,即几乎总是有多个节点。如果你的代码被“嵌入”到一个图像中,如果你的 pod 规范引用了一个图像,节点可以直接拉取图像并完成。您还可以通过更改部署的 image: 标记轻松升级您的应用程序(或者,如果出现问题,以相同的方式降级)。

卷提出了一些挑战,使它们在这里不合适。直接获取的卷类型不能同时挂载到多个节点上。您需要手动复制应用程序代码(很难直接访问 Kubernetes 上的卷),手动重新启动一切,希望旧 pods 不要读取新文件并感到困惑。

这确实意味着镜像注册表是使用 Kubernetes 所必需的。 (大多数 public 云提供商都有托管注册服务,这通常是一个合理的选择。)