我对如何实现以下流程感到很困惑
我有两个容器nginx和资产(只有捆绑资产)
所以有2-3个nginx实例和几个资产实例。
因此,从我的本地计算机或构建服务器,我将使用grunt构建资产,并且捆绑的资产将位于图像内。
所以,如果我使用卷捆绑资产,它将如何沿着侧面图像推送。
或者如果我没有使用卷,那么nginx将如何从资产图像或(已停止或正在运行)容器获取装载路径。
答案 0 :(得分:0)
主要有两种方式。
您将资源添加到nginx图像。在这种情况下,您只需创建一个Dockerfile并将COPY
本地资产创建到nginx图像上的某个位置。例如:
FROM: nginx
COPY: myassets/dir/* /var/lib/html
这是最简单的方法。
装载卷
如果需要在容器之间共享相同的资产,则可以创建卷并在nginx容器中装入此卷。在尝试创建nginx容器之前,需要创建卷。
docker volume create myassets
下一步是将文件复制到新创建的卷。如果您的docker主机是本地的(例如:VirtualBox,Docker for Mac或Windows,Vmware Fusion,Parallel),那么您可以使用您的资产安装本地目录并将其复制到卷。例如:
docker run --rm -v /Users/myname/html:/html -v myassets:/temp alpine sh -c "cp -rp /html/* /temp"
如果您的docker主机托管在其他地方(AWS,Azure,远程服务器......),那么您就不能依赖已安装的本地驱动器。您需要远程复制文件。
docker run -d --name foo -v myassets:/temp alpine tail -f /dev/null
docker cp myassets/* foo:/temp
docker rm -f foo
这将创建一个名为foo
的容器,该容器在后台-d
中保持运行(tail -f)。然后我们将文件寄存器复制到安装myassets卷的位置,然后在完成时终止容器。
当您在nginx容器上安装卷时,它将覆盖该容器位置中的任何内容。
docker run -d -v myassets:/var/lib/html nginx
答案 1 :(得分:0)
您可以使用docker-compose为每个应用创建多容器泊坞窗环境,其中构建了多个资产泊坞窗图像,这些图像作为nginx容器的数据卷挂载。
请参阅docker-compose reference进行数据量安装,并stackoverflow question将目录从一个容器挂载到另一个容器。