与来自主机的容器共享目录或卷
我有一个目录(也许以后的卷),我想与我所有的互动容器分享。 我知道,本地Docker卷存储在/var/lib/docker/volumes
而docker run -v
似乎是最简单的方法,但我认为Data Volume Container
是一种更加标准化的方式。 我不知道,如何从一个目录或现有的另一个卷创build这个卷容器。 也许是错误的方法?
有两种创build和共享卷的方法:1.使用Dockerfile
上的VOLUME
指令。 2在容器运行时指定-v <volume_name>
选项,稍后使用--volumes-from=<container>
与每个需要共享数据的后续容器。 以下是前者的例子:
- 用
-v
启动你的第一个容器,然后在共享卷的目录下添加一个testing文件。
docker run -it -v /test-volume --name=testimage1 ubuntu:14.04 /bin/bash root@ca30f0f99401:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test-volume ===> test-volume dir got created here root@ca30f0f99401:/# touch test-volume/1 root@ca30f0f99401:/# cat > test-volume/1 Test Message!
- 在主机操作系统中,您可以通过检查容器来获取卷的详细信息:
docker inspect ca30f0f99401 | grep -i --color -E '^|Vol'
"Mounts": { "Name": "025835b8b47d282ec5f27c53b3165aee83ecdb626dc36b3b18b2e128595d9134", "Source": "/var/lib/docker/volumes/025835b8b47d282ec5f27c53b3165aee83ecdb626dc36b3b18b2e128595d9134/_data", "Destination": "/test-volume", "Driver": "local", "Mode": "", "RW": true "Image": "ubuntu:14.04", "Volumes": { "/test-volume": {} }
- 启动共享卷的另一个容器,并检查共享文件夹/文件是否存在。
$ docker run -it --name=testimage2 --volumes-from=testimage1 ubuntu:14.04 /bin/bash root@60ff1dcebc44:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test-volume tmp usr var root@60ff1dcebc44:/# cat test-volume/1 Test Message!
- 转到步骤3与新容器共享音量。
通过编写一个专用的Dockerfile来创build一个数据卷容器,您将:
-
COPY
你的文件夹 - 声明将本地容器path文件夹复制为
VOLUME
然后docker create <imagename>
,你得到一个(创build的)容器,你可以在所有其他的容器中装载 ,只要你使用--volumes-from <containername>
选项运行它们。