docker组成如何安装从一个容器的path到另一个容器?

我有nignx container和一个asset container ,它们的所有资产都是从grunt或其他工具构build的。

现在在docker compose文件中,我想将asset container's文件夹path装入nginx container所以nginx可以提供这些文件。

  • 我们怎么做到这一点? 我不记得,但我认为有一个select,我们可以分享一个容器与另一个容器的path。

  • 假设如果我把nginx放大到2个容器,那么这个挂载是否适用于nginx的所有实例?

  • 如果我放大asset container那么会发生什么?

  • 我也想和我的主机一起安装,所以开发可以轻松完成。

你想要做的是使用一个卷,然后将该卷挂载到任何您希望显示的容器中。

完全在Docker中

您可以在Docker中完全执行此操作。

这里是一个例子(当然,你的真实文件比这个更重要)。

 version: '3' services: nginx: volumes: - asset-volume:/var/lib/assets asset: volumes: - asset-volume:/var/lib/assets volumes: asset-volume: 

底部是定义的单个卷,名为“资产卷”。

然后在每个服务中,告诉Docker在某个path上安装该卷。 我在容器中显示示例path,只需将它们调整为希望它们在容器中的任何path即可。

卷是一个独立的实体,不属于任何特定的容器。 它被安装到每个人中,并被共享。 如果一个容器修改了内容,那么他​​们都会看到更改。

请注意,如果您希望只有一个可以进行更改,则可以在某些服务中始终将该卷挂载为只读,方法是将:ro添加到卷string的末尾。

 services: servicename: volumes: - asset-volume:/var/lib/assets:ro 

使用主机目录

或者,您可以使用主机上的目录并将其安装到容器中。 这样做的好处是可以使用Docker以外的工具(如GUI文本编辑器和其他工具)直接在文件上工作。

这是一样的,除非你没有在Docker中定义一个卷,而是挂载外部目录。

 version: '3' services: nginx: volumes: - ./assets:/var/lib/assets asset: volumes: - ./assets:/var/lib/assets 

在本例中,使用相对path./assets将本地目录“assets”安装到两个容器中。

两者都取决于环境

您也可以为不同的开发和生产环境进行设置。 把所有东西放在docker-compose.yml中, 除了卷装。 然后再制作两个文件。

  • 泊坞窗,compose.dev.yml
  • 泊坞窗,compose.prod.yml

在这些文件中只放入最小configuration来定义卷装载。 我们将这个与docker-compose.yml混合以获得最终的configuration。

然后用这个。 它将使用docker-compose.yml中的configuration文件,并将第二个文件中的任何内容用作覆盖或补充configuration。

 docker-compose -f docker-compose.yml \ -f docker-compose.dev.yml \ up -d 

而对于生产,只需使用prod文件而不是dev文件。

这里的想法是保持docker-compose.yml中的大部分configuration,并且只有替代文件中的最小差异集合。

例:

泊坞窗,compose.prod.yml

 version: '3' services: nginx: volumes: - asset-volume:/var/lib/assets 

泊坞窗,compose.dev.yml

 version: '3' services: nginx: volumes: - ./assets:/var/lib/assets