我们使用 open-jdk 镜像来部署我们的 jars。由于我们有多个 jar,我们只需使用绑定(bind)模式附加它们并运行它们。我不想构建单独的图像,因为我们的部署将在气隙环境中,并且每次我都无法重建图像,因为只有 jars 会发生变化。
现在我们正试图走向 swarm。由于它是绑定(bind)挂载,因此我无法将副本传播到其他节点。
如果我使用卷,我怎样才能将这些 jar 放入该卷中?一种可能性是我可以运行一个虚拟的 alpine 镜像并将卷安装到主机,然后我可以与其他容器共享它。但是可以在节点之间共享该卷吗?它是最佳解决方案吗?另外,如果我需要更新 jar ,该怎么做?
我可以创建 NFS 驱动器,但我试图找出一种没有它的实现方式。由于它是一个孤立的环境并且可能包含关键数据,因此我也无法使用 3rd 方插件来完成这项工作。
那么在这种场景下如何实现 docker swarm 呢?
最佳答案
使用docker build
.真的。
图像应该是应用程序及其运行时的静态副本,而不是相关数据。 “只有 jars 改变了”这句话的意思是“我们重建了应用程序”。虽然您可以使用绑定(bind)挂载将应用程序注入(inject)到仅运行时的容器中,但我认为这并不是真正的最佳实践,而且在已经存在重要编译时间步骤的语言中,这是双重正确的。
如果您处于隔离环境中,则需要弄清楚您将如何提供应用程序更新(无论部署框架如何)。如果可以管理,最好的解决方案是在隔离网络上设置私有(private) Docker 注册表,docker save
您的图像(嵌入 tar ),然后 docker load
, docker tag
, 和 docker push
他们进入注册表。然后,您可以在任何地方使用带有注册表标记的图像名称,而无需担心手动推送图像和/或 jar 文件。
否则需要手动分发镜像 tar 和 docker load
它,或者手动将更新的 jar 推送到每个目标系统。像 Ansible 这样的自动化系统对此效果很好;我偏爱 Ansible,因为它不需要中央服务器。
关于docker - 在 Docker swarm 中共享绑定(bind)卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51437493/