Docker 在容器之间共享数据
Docker Share Data Between Containers
我有 3 张 docker 图像,每一张都包含不同的数据集。我正在尝试创建一个卷,然后将这 3 个数据集容器安装到该卷。然后绑定一个从另一个主要图像创建的容器,并使用来自同一位置(这是主要图像)的这 3 个独立数据集。
这三个容器的文件系统如下所示:
container1: /datasets/xxx/01.jpg...
container2: /datasets/yyy/01.jpg...
container3: /datasets/zzz/01.jpg...
我的 docker 命令流程是这样的:
docker volume create my-data
docker run -ti -d -v my-data:/datasets dataset/xxx:latest
docker run -ti -d -v my-data:/datasets dataset/yyy:latest
docker run -ti -d -v my-data:/datasets dataset/zzz:latest
最后,主要的:
docker run -ti -v my-data:/datasets major-application/app:latest
完成这些步骤后,当我在从主要应用程序映像创建的容器中执行 ls /datasets
时,我只看到 /datasets/xxx/01.jpg...
目录。 --volumes-from
命令也没有运气。我在这里错过了什么?
像这样将 xxx、yyy、zzz 文件夹挂载到不同的卷怎么样:
docker run -ti -d -v my-data-xxx:/datasets/xxx dataset/xxx:latest
docker run -ti -d -v my-data-yyy:/datasets/yyy dataset/yyy:latest
docker run -ti -d -v my-data-zzz:/datasets/zzz dataset/zzz:latest
然后是主要的:
docker run -ti -v my-data-xxx:/datasets/xxx -v my-data-yyy:/datasets/yyy -v my-data-zzz:/datasets/zzz major-application/app:latest
命名您的容器并在不同的目录安装卷,您可以使用 --volumes-from
从每个容器安装卷:
docker run --rm -it --name xxx -d -v xxx:/datasets/xxx dataset/xxx:latest
docker run --rm -it --name yyy -d -v yyy:/datasets/yyy dataset/yyy:latest
docker run --rm -it --name zzz -d -v zzz:/datasets/zzz dataset/zzz:latest
注意:您不必明确create
卷。
然后使用--volumes-from
:docker run --rm -it --volumes-from xxx --volumes-from yyy --volumes-from zzz ubuntu:18.04 ls -alF /datasets
如果图像中的数据集是静态的 (dataset/abc:latest
),那么您可以使用数据集扩展 major-application/app:latest
图像,例如 Dockerfile
:
FROM dataset/xxx:latest as xxx
FROM dataset/yyy:latest as yyy
FROM dataset/zzz:latest as zzz
FROM major-application/app:latest
VOLUME [/datasets]
COPY --from=xxx /datasets/xxx /datasets/xxx
COPY --from=yyy /datasets/yyy /datasets/yyy
COPY --from=zzz /datasets/zzz /datasets/zzz
我有 3 张 docker 图像,每一张都包含不同的数据集。我正在尝试创建一个卷,然后将这 3 个数据集容器安装到该卷。然后绑定一个从另一个主要图像创建的容器,并使用来自同一位置(这是主要图像)的这 3 个独立数据集。
这三个容器的文件系统如下所示:
container1: /datasets/xxx/01.jpg...
container2: /datasets/yyy/01.jpg...
container3: /datasets/zzz/01.jpg...
我的 docker 命令流程是这样的:
docker volume create my-data
docker run -ti -d -v my-data:/datasets dataset/xxx:latest
docker run -ti -d -v my-data:/datasets dataset/yyy:latest
docker run -ti -d -v my-data:/datasets dataset/zzz:latest
最后,主要的:
docker run -ti -v my-data:/datasets major-application/app:latest
完成这些步骤后,当我在从主要应用程序映像创建的容器中执行 ls /datasets
时,我只看到 /datasets/xxx/01.jpg...
目录。 --volumes-from
命令也没有运气。我在这里错过了什么?
像这样将 xxx、yyy、zzz 文件夹挂载到不同的卷怎么样:
docker run -ti -d -v my-data-xxx:/datasets/xxx dataset/xxx:latest
docker run -ti -d -v my-data-yyy:/datasets/yyy dataset/yyy:latest
docker run -ti -d -v my-data-zzz:/datasets/zzz dataset/zzz:latest
然后是主要的:
docker run -ti -v my-data-xxx:/datasets/xxx -v my-data-yyy:/datasets/yyy -v my-data-zzz:/datasets/zzz major-application/app:latest
命名您的容器并在不同的目录安装卷,您可以使用 --volumes-from
从每个容器安装卷:
docker run --rm -it --name xxx -d -v xxx:/datasets/xxx dataset/xxx:latest
docker run --rm -it --name yyy -d -v yyy:/datasets/yyy dataset/yyy:latest
docker run --rm -it --name zzz -d -v zzz:/datasets/zzz dataset/zzz:latest
注意:您不必明确create
卷。
然后使用--volumes-from
:docker run --rm -it --volumes-from xxx --volumes-from yyy --volumes-from zzz ubuntu:18.04 ls -alF /datasets
如果图像中的数据集是静态的 (dataset/abc:latest
),那么您可以使用数据集扩展 major-application/app:latest
图像,例如 Dockerfile
:
FROM dataset/xxx:latest as xxx
FROM dataset/yyy:latest as yyy
FROM dataset/zzz:latest as zzz
FROM major-application/app:latest
VOLUME [/datasets]
COPY --from=xxx /datasets/xxx /datasets/xxx
COPY --from=yyy /datasets/yyy /datasets/yyy
COPY --from=zzz /datasets/zzz /datasets/zzz