docker - 在 Docker swarm 中共享绑定(bind)卷

标签 docker docker-compose docker-swarm

我们使用 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/

相关文章:

Docker compose 'scale' 命令未跨多台机器扩展

docker - GitHub Actions 中的 SSH "Host key verification failed"- 但已知主机中存在 key

docker - 我们可以用 docker-compose.yml 替换 dockerfile 吗?

docker-compose - 使用 Traefik 2 从非 www 重定向到 www

go - 如何让 docker-compose 容器看到 Redis 主机?

docker - 无需 Docker Enterprise 即可基于第 7 层路径路由到 Docker 容器

docker - 在哪里使用Swarm在Docker容器中找到使用docker-compose构建的dotnet应用程序构建的发布文件?

mongodb - Mongo docker-具有indexCreate的Dockerfile

Docker 和 ElasticBeanstalk 的 Ubuntu 版本更新错误

docker - Docker 是否应该在所有容器关闭时释放所有内存?