一、需求
容器和本地主机之间如何挂载和共享数据卷
二、挂载数据卷
数据卷的内容保存在/var/lib/docker/volume/数据卷名/_data/中,数据卷的内容会和容器的挂载点始终保持一致。
“数据卷名”可以用户指定,如果不指定,就会随机生成一个“数据卷名”。
三、挂载宿主机目录
# 将宿主机的/host/dir挂载到了容器的/container/dir目录
docker run --name vocotainer1 -v /host/dir:/container/dir ubuntu
宿主机的目录和容器的目录必须使用绝对路径。
如果宿主机不存在/host/dir目录,则会创建一个空文件夹。
在/host/dir下的所有文件和文件夹都可以在容器中在/container/dir下被访问。
如果镜像中本来就存在/container/dir文件夹,那么该文件夹下所有内容都会被删除,保证与宿主机中文件夹一致。
三、同时创建多个数据卷
# 创建了两个数据卷
docker run --name vocotainer2 -v co2vo1:/data -v co21vo2:/dir1 ubuntu
同理一次指定多个宿主机的目录挂载到容器中也是可行的。
四、与其他容器共享数据卷(--volumes-from)
# 创建了一个名为vocotainer3的容器,并与vocontainer1共享数据卷。
# 因为vocontainer1的挂载点在/container/dir上,所以如果vocotainer3的挂载点也将会是/container/dir
docker run --name vocotainer3 -- volumes-from vocontainer1 ubuntu
通常如果有一些文件如果需要被多个容器共享,一种常见的做法就是创建一个数据容器(该容器仅仅用来共享数据而不做其他用途),其他容器与之共享数据卷
五、实例
#1.创建一个名为container1的容器,并将本地主机的/dir1目录挂载到容器中的/codir1中。
#********** Begin *********#
docker pull busybox
docker run --name container1 -v /dir1:/codir1 busybox
#********** End **********#
#2.创建一个名为container2的容器,与container1共享数据卷。
#********** Begin *********#
docker run --name container2 --volumes-from container1 busybox
#********** End **********#
我们可以看到/var/lib/docker/volumes/下什么也没有,但是在主机下新建了/dir1/文件夹
参考:https://www.educoder.net/shixuns/pebvjtk9/challenges
软件工程小施同学
认证博客专家
学堂在线讲师
每一个伟大,都源于一个勇敢的开始(微博:“软件工程小施同学”,公号”微程序学堂“)