Docker-compose推荐使用数据容器的方式

在我的应用程序中,我有一个nginx容器,我想用来提供静态webapp文件。 这些webapp文件存在一个名为“webapp”的独立容器中。

将webapp容器安装到nginx容器的build议方法是什么? 我目前的做法是这样的:

version: '2' services: nginx: volumes_from: - webapp webapp: image: someimageurl 

在webapp的Dockerfile中,我公开了一个与nginx容器服务的path相同的卷。

这很好,但问题是,在docker-compose v3中,“volumes_from”正在被删除,并被replace为已命名的卷。 所以我的新configuration将如下所示:

 version: '3' volumes: static-webapp: services: nginx: volumes: - static-webapp:/opt/webapp webapp: image: someimageurl volumes: - static-webapp:/opt/webapp 

这个问题是来自webapp容器的数据只会被复制到'static-webapp'卷中一次。 在更改内容并重新运行docker-compose之后,卷中的内容不变。 我明白,这是devise,不覆盖持久性数据。

我的问题是:我应该如何做与docker合成v3的这个? 我基本上想要一个无名的卷,我可以装入多个容器。

我想到的解决scheme是:

1.)将静态内容捆绑在nginx容器中。 我不喜欢这个,因为那样我就不能把需求分开。

2.)我可以在每个docker-compose运行后手动删除'static-webapp'卷。 这似乎也不理想。

build议的方法是删除容器之间的依赖关系,因为这些依赖关系在逻辑上不适用于容器可能在不能共享文件的不同主机上运行(这就是为什么volume-from从版本3格式中删除的原因)。 在引入命名卷之后,数据容器已经被弃用,尽pipe一些过时的文档提出了另外的build议。

我能想到的选项包括:

  1. 使用版本2撰写文件而不使用群集模式。 如果不使用swarm模式,则无需升级到版本3格式。

  2. 直接将数据添加到每个容器。

  3. 重新构build您的应用程序以不同方式拆分组件。 我不清楚nginx和另一个容器中的应用程序代码的用例,似乎应该只是一个或另一个。

  4. 创build一个包含所有应用程序数据的数据同步实用程序容器,在整个群体中全局运行,并在启动时推出每个群集节点上的卷更改。 这也可以轮询像git回购和不断更新本地音量的任何变化。 您的其他容器然后指向这个本地的命名卷。

  5. 将容器指向远程卷(如NFS),因此只需要从任何主机更新一次数据,并消除任何不同步的主机,但也会在读取中增加额外的延迟。