如何从图像创建数据卷以在 nginx 容器中使用
how to create data volume from image for use in nginx container
我有一个图像(不是容器),它在 /store 中烘焙了数据。该图像不做任何其他事情,它只是一个用于保存数据的容器。我想创建一个 docker-compose 文件,以便我的 nginx 容器可以访问 /store at /usr/share/nginx/html 中的所有内容
需要先做一个中间容器吗?我不确定 docker-compose 文件的外观。谢谢
最好的管理方法可能是使用 docker 卷来存储您的 /store 数据。
您可以通过从该映像创建一个容器来完成一次,在其中安装一个空的 docker 卷,然后将 /store 的内容复制到外部 docker 卷中。
如果您仍然需要使用现有图像中的 /store,您将需要从 if 中实例化一个容器,并从您的 nginx 容器中检索暴露的卷。 (使用 volume_from)。在这种情况下,两个容器都需要在同一台主机上。
您可以尝试使用 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
显然,其他卷插件类型可能会提供更大的灵活性。
我建议您考虑在您的 nginx 容器中烘焙 /store
。它将减少安装卷的数量,从而简化整体结构。并且可能会提高性能。
您可以通过多种方式做到这一点:
使用您的数据映像作为您的 nginx 映像的基础。在这种情况下,您需要为 nginx 编写 Dockerfile,但这并不难。
您可以通过创建具有 true
端点和 docker cp
所需数据的容器,从数据映像中提取 /store
。然后复制到你的nginx镜像中。
这是一个快速步骤:
docker run -v nginx-store:/store --rm store true
docker run -v nginx-store:/usr/share/nginx/html -d --name nginx nginx
第一个 运行 从您的 store
映像的内容创建一个命名卷 nginx-store
(只要您在容器中安装一个空卷,就会发生这种情况),然后立即退出并删除容器。
第二个 运行 将该命名卷与未来的 nginx 容器一起使用。要在将来修改 nginx-store
卷,您可以 运行 任何使用类似 -v nginx-store:/target
标志安装它的侧容器。
我有一个图像(不是容器),它在 /store 中烘焙了数据。该图像不做任何其他事情,它只是一个用于保存数据的容器。我想创建一个 docker-compose 文件,以便我的 nginx 容器可以访问 /store at /usr/share/nginx/html 中的所有内容
需要先做一个中间容器吗?我不确定 docker-compose 文件的外观。谢谢
最好的管理方法可能是使用 docker 卷来存储您的 /store 数据。 您可以通过从该映像创建一个容器来完成一次,在其中安装一个空的 docker 卷,然后将 /store 的内容复制到外部 docker 卷中。
如果您仍然需要使用现有图像中的 /store,您将需要从 if 中实例化一个容器,并从您的 nginx 容器中检索暴露的卷。 (使用 volume_from)。在这种情况下,两个容器都需要在同一台主机上。
您可以尝试使用 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
显然,其他卷插件类型可能会提供更大的灵活性。
我建议您考虑在您的 nginx 容器中烘焙 /store
。它将减少安装卷的数量,从而简化整体结构。并且可能会提高性能。
您可以通过多种方式做到这一点:
使用您的数据映像作为您的 nginx 映像的基础。在这种情况下,您需要为 nginx 编写 Dockerfile,但这并不难。
您可以通过创建具有
true
端点和docker cp
所需数据的容器,从数据映像中提取/store
。然后复制到你的nginx镜像中。
这是一个快速步骤:
docker run -v nginx-store:/store --rm store true
docker run -v nginx-store:/usr/share/nginx/html -d --name nginx nginx
第一个 运行 从您的 store
映像的内容创建一个命名卷 nginx-store
(只要您在容器中安装一个空卷,就会发生这种情况),然后立即退出并删除容器。
第二个 运行 将该命名卷与未来的 nginx 容器一起使用。要在将来修改 nginx-store
卷,您可以 运行 任何使用类似 -v nginx-store:/target
标志安装它的侧容器。