如何从图像创建数据卷以便在nginx容器

时间:2016-08-01 13:49:50

标签: docker docker-compose

我有一个图像(不是容器),其中包含在/ store中烘焙的数据。图像没有做任何其他事情,它只是用于保存数据的容器。我想创建一个docker-compose文件,以便我的nginx容器可以访问/ usr / share / nginx / html中的/ store中的所有内容。 / p>

我是否需要先制作中间容器?我不确定docker-compose文件的外观。感谢

4 个答案:

答案 0 :(得分:2)

这是一个快速的步骤:

docker run -v nginx-store:/store --rm store true

docker run -v nginx-store:/usr/share/nginx/html -d --name nginx nginx

第一次运行从nginx-store图像的内容创建一个命名卷store(每当您在容器中装入空卷时都会发生这种情况),并立即退出并删除容器。< / p>

第二次运行将该命名卷与未来的nginx容器一起使用。要在将来修改nginx-store卷,您可以运行使用类似-v nginx-store:/target标志来装载它的任何侧容器。

答案 1 :(得分:1)

管理的最佳方式可能是使用泊坞窗卷来存储您的/存储数据。 您可以通过从该映像创建容器,在其中安装空的docker卷,然后在外部docker卷中复制/ store的内容来执行此操作。

如果您仍然需要使用现有图像中的/ store,则需要从if实例化容器并从nginx容器中检索公开的卷。 (使用volume_from)。在这种情况下,两个容器都需要位于同一主机上。

答案 2 :(得分:0)

您可以尝试使用local-persist volume plugin,如下所示:

version: '2'
services:
  web:
    image: nginx
    volumes:
      - data:/usr/share/nginx/html 
volumes:
  data:
    driver: local-persist
    driver_opts:
      mountpoint: /data/local-persist/data

显然,其他卷插件类型可能会提供更大的灵活性。

https://docs.docker.com/engine/extend/plugins/

答案 3 :(得分:0)

我建议你考虑在你的nginx容器中烘烤/store。它将减少安装的卷数,从而简化整体结构。并且可能会提高性能。

您可以通过多种方式实现这一目标:

  1. 使用数据图像作为nginx图像的基础。在这种情况下,您需要为nginx编写Dockerfile,但这并不是很困难。

  2. 您可以通过创建包含/store端点和true所需数据的容器,从数据图像中提取docker cp。然后将其复制到您的nginx图像。