本文共 2811 字,大约阅读时间需要 9 分钟。
背景
容器数据卷是用来保存容器里的数据的,用来实现数据持久化和数据共享。
这里记录一下容器内添加数据卷的方式
添加数据卷的方式
直接命令添加
$ docker run -it -v /c/Users/songzeceng/dataVolume:/dataVolumeContainer centos
-v表示指定数据卷,/c/Users/songzeceng/dataVolume表示宿主机上的路径,windows下只能使用C:/Users下的目录,/dataVolumeContainer表示容器上的路径,两个路径如果不存在会自行创建,而且会保持数据同步。
我们可以在docker inspect的输出中,得到以下路径绑定信息
$ docker inspect 780b449de985... "HostConfig": { "Binds": [ "/d/myDataVolume:/dataVolumeContainer" ],... "Mounts": [ { "Type": "bind", "Source": "/d/myDataVolume", "Destination": "/dataVolumeContainer", "Mode": "", "RW": true, "Propagation": "rprivate" } ],...
RW为True表示可读可写,如果为False,表示容器里只能访问绑定目录,但不能写。对应命令如下
$ docker run -it -v /c/Users/songzeceng/dataVolume:/dataVolumeContainer:ro centos
DockerFile添加
先创建一个Dockerfile文件,写入以下内容
FROM centosVOLUME ["/dataVolumeContainer1", "/dataVolumeContainer2"]CMD echo "finished"CMD /bin/bash
然后运行以下命令,把Dockerfile编译成一个szc/centos镜像
$ docker build -f Dockerfile -t szc/centos .
最后启动szc/centos容器即可
数据卷容器
别的容器可以挂载到一个容器上,来实现容器间的传递共享。被挂载的容器被称为数据卷容器。
先启动一个容器dc01,在目录dataVolumeContainer2下创建文件并输入内容
$ docker run -it --name dc01 szc/centos[root@5488bf4c2782 /]# cd dataVolumeContainer2/[root@5488bf4c2782 dataVolumeContainer2]# touch 777 dc01.txt[root@5488bf4c2782 dataVolumeContainer2]# vi dc01.txt
然后启动子容器dc02,挂载到dc01上
$ docker run -it --name dc02 --volumes-from dc01 szc/centos
那么dc02拥有dc01的一切,包括新建的文件
[root@dc9aa236c280 /]# lsbin dataVolumeContainer2 etc lib lost+found mnt proc run srv tmp vardataVolumeContainer1 dev home lib64 media opt root sbin sys usr[root@dc9aa236c280 /]# cd dataVolumeContainer2[root@dc9aa236c280 dataVolumeContainer2]# lsdc01.txt[root@dc9aa236c280 dataVolumeContainer2]# cat dc01.txtdc01
再启动一个挂载到dc01的dc03,dc03再在dataVolumeContainer2下创建文件并输入内容,数据同样会被其他两个容器共享
C:\Users\songzeceng>docker run -it --name dc03 --volumes-from dc01 szc/centos[root@c3041cf19df7 /]# ls -ltotal 56lrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bindrwxr-xr-x 2 root root 4096 Mar 8 07:33 dataVolumeContainer1drwxr-xr-x 2 root root 4096 Mar 8 07:37 dataVolumeContainer2....[root@c3041cf19df7 /]# cd dataVolumeContainer2[root@c3041cf19df7 dataVolumeContainer2]# lsdc01.txt[root@c3041cf19df7 dataVolumeContainer2]# touch dc03.txt[root@c3041cf19df7 dataVolumeContainer2]# vi dc03.txt[root@c3041cf19df7 dataVolumeContainer2]#
dc02里再度查询
[root@dc9aa236c280 dataVolumeContainer2]# ls -ltotal 8-rw-r--r-- 1 root root 5 Mar 8 07:34 dc01.txt-rw-r--r-- 1 root root 5 Mar 8 07:42 dc03.txt[root@dc9aa236c280 dataVolumeContainer2]#
容器挂载到数据卷容器后,就没有容器的从属关系了,此时如果关闭容器dc01,dc02和dc03依旧可以访问并修改数据卷中的数据。因此,数据卷的生命周期是超越容器的,只要有容器使用它,这个数据卷就一直存在。
转载地址:https://blog.csdn.net/qq_37475168/article/details/105028540 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!