Docker构成打包或捆绑资产容器的最佳实践?

时间:2017-04-24 06:35:37

标签: docker docker-compose dockerfile

我对如何实现以下流程感到很困惑

我有两个容器nginx和资产(只有捆绑资产)

所以有2-3个nginx实例和几个资产实例。

因此,从我的本地计算机或构建服务器,我将使用grunt构建资产,并且捆绑的资产将位于图像内。

所以,如果我使用卷捆绑资产,它将如何沿着侧面图像推送。

或者如果我没有使用卷,那么nginx将如何从资产图像​​或(已停止或正在运行)容器获取装载路径。

2 个答案:

答案 0 :(得分:0)

主要有两种方式。

  1. 您将资源添加到nginx图像。在这种情况下,您只需创建一个Dockerfile并将COPY本地资产创建到nginx图像上的某个位置。例如:

    FROM: nginx
    COPY: myassets/dir/*  /var/lib/html
    

    这是最简单的方法。

  2. 装载卷

    如果需要在容器之间共享相同的资产,则可以创建卷并在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将目录从一个容器挂载到另一个容器。