在 Docker 群中共享绑定卷

Sharing bind volume in Docker swarm

我们使用 open-jdk 镜像来部署我们的 jar。因为我们有多个罐子,所以我们简单地使用绑定模式附加它们并 运行 它们。我不想构建单独的图像,因为我们的部署将在气隙环境中进行,每次我都无法重建图像,因为只有 jars 会发生变化。

现在我们正在努力走向群体。由于它是绑定安装,我无法将副本传播到其他节点。

如果我使用卷,如何将这些罐子放入该卷中?一种可能性是我可以 运行 一个虚拟的 alpine 图像并将该卷挂载到主机,然后我可以与其他容器共享它。但是可以在节点之间共享该卷吗?它是最佳解决方案吗?另外,如果我需要更新 jars 怎么办?

我可以创建 NFS 驱动器,但我正在尝试找出一种没有它的实现方式。由于它是一个孤立的环境并且可能包含关键数据,因此我也无法使用第 3 方插件来完成这项工作。

那么dockerswarm在这个场景下如何实现呢?

使用docker build。真的。

图像应该是应用程序及其运行时的静态副本,而不是关联数据。语句 "only the jars changed" 表示 "we rebuilt the application"。虽然您 可以 使用绑定挂载将应用程序注入到仅运行时容器中,但我认为这并不是真正的最佳实践,而且在已经存在重要的编译时步骤。

如果您处于气隙环境中,则需要弄清楚您将如何提供应用程序更新(无论部署框架如何)。如果可以的话,最好的解决方案是在隔离网络上设置私有 Docker 注册表,docker save 您的图像(嵌入 tars),然后 docker loaddocker tagdocker push 到注册表。然后你可以在任何地方使用注册表标记的图像名称,而不需要担心手动推送图像 and/or jar 文件。

否则您需要手动分发映像 tar 和 docker load,或者手动将更新的 jar 推送到每个 target 系统。像 Ansible 这样的自动化系统很适合这个;我偏爱 Ansible,因为它不需要中央服务器。