docker容器数据卷
-v命令添加容器数据卷
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it -v /myDataVolume:/dataVolumeContainer centos #无文件夹自动创建 如果在下面打开数据卷出现查看文件报错“cannot open directory:Permission denied”可以加上 --privileged=true
#查看数据卷是否挂载成功
docker inspect a39157bb935e #后面为container ID
#当出现包含下面的语句块时,证明挂载成功
"Binds": [
"/myDataVolume:/dataVolumeContainer"
]
开启后容器和主机进行数据共享
#宿主机下创建一个文件进行测试
root@ubuntu18-04:/myDataVolume# touch host.txt
#在容器中查看文件夹 有相同的文件 可以进行数据共享
[root@a39157bb935e dataVolumeContainer]# ls
host.txt
#容器卷操作
[root@a39157bb935e dataVolumeContainer]# vi host.txt
[root@a39157bb935e dataVolumeContainer]# touch container.txt
[root@a39157bb935e dataVolumeContainer]# ls
container.txt host.txt
#宿主机操作
root@ubuntu18-04:/myDataVolume# ls
container.txt host.txt
root@ubuntu18-04:/myDataVolume# cat host.txt
container
root@ubuntu18-04:/myDataVolume#
#重新进入 容器关闭后执行以下命令重新进入还可以看到挂载的数据卷
docker start 容器名
docker attach 容器名
设置权限
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名 #只读
DockerFile添加容器数据卷
root@ubuntu18-04:/# mkdir mydocker #根目录下创建mydocker文件夹
root@ubuntu18-04:/# cd mydocker/
root@ubuntu18-04:/mydocker# vim dockerfile #编写dockerfile文件
root@ubuntu18-04:/mydocker# ls
dockerfile
root@ubuntu18-04:/mydocker# cat dockerfile
#volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,----------success1"
CMD /bin/bash
root@ubuntu18-04:/mydocker# docker build -f /mydocker/dockerfile -t hnn/centos . #生成新的镜像
root@ubuntu18-04:/mydocker# docker run -it hnn/centos
[root@62fd5b21b538 /]# ls #进入后就会有两个数据卷dataVolumeContainer1,dataVolumeContainer2
bin dev lib media proc sbin tmp
dataVolumeContainer1 etc lib64 mnt root srv usr
dataVolumeContainer2 home lost+found opt run sys var
#执行以下命令查看容器卷数据卷的映射位置
root@ubuntu18-04:/myDataVolume# docker inspect 62fd5b21b538 #容器名
#出现以下数据块可以看到容器卷数据卷的映射位置
"Mounts": [
{
"Type": "volume",
"Name": "0082ef01c1ee5a02778691ccd957e27a21bf344f10037eacd89b911dc7083b3e",
"Source": "/var/lib/docker/volumes/0082ef01c1ee5a02778691ccd957e27a21bf344f10037eacd89b911dc7083b3e/_data",
"Destination": "/dataVolumeContainer1",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "1959db85a71366b4ea781859872c4b930e9599f159ec5bb50ad60ab5b57b55d8",
"Source": "/var/lib/docker/volumes/1959db85a71366b4ea781859872c4b930e9599f159ec5bb50ad60ab5b57b55d8/_data",
"Destination": "/dataVolumeContainer2",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
以上成功添加数据卷,可以进行数据共享
容器数据卷之间的关联(–volumes-from)
#创建一个容器
root@ubuntu18-04:/# docker run -it --name dc01 hnn/centos
#在第一个容器内创建一个测试文件
[root@092f5d34f720 /]# cd dataVolumeContainer2
[root@092f5d34f720 dataVolumeContainer2]# touch dc01_add.txt
#执行以下命令使新的容器关联另外一个容器的数据卷
root@ubuntu18-04:/# docker run -it --name dc02 --volumes-from dc01 hnn/centos
#另一个容器内可以看到相同的文件
[root@740ea90ebdfc /]# cd dataVolumeContainer2
[root@740ea90ebdfc dataVolumeContainer2]# ls
dc01_add.txt
[root@740ea90ebdfc dataVolumeContainer2]# touch dc02_add.txt #创建测试文件
#再创建一个容器
root@ubuntu18-04:/# docker run -it --name dc03 --volumes-from dc01 hnn/centos
[root@e47368fb1878 /]# cd dataVolumeContainer2
[root@e47368fb1878 dataVolumeContainer2]# touch dc03_add.txt #创建测试文件
#Ctrl+P+Q 退出 再次进入dc01 可以看到后面创建的数据
root@ubuntu18-04:/# docker attach dc01
[root@092f5d34f720 dataVolumeContainer2]# ls
dc01_add.txt dc02_add.txt dc03_add.txt
#Ctrl+P+Q 退出 删除dc01 仍可以看到全部的数据
root@ubuntu18-04:/# docker rm -f dc01
dc01
root@ubuntu18-04:/# docker attach dc02
[root@740ea90ebdfc dataVolumeContainer2]# ls
dc01_add.txt dc02_add.txt dc03_add.txt
[root@740ea90ebdfc dataVolumeContainer2]# touch dc02_update.txt
#Ctrl+P+Q 退出 进入dc03 虽然dc02 dc03 都是继承于dc01 仍可以看到dc02数据的更新
root@ubuntu18-04:/# docker attach dc03
[root@e47368fb1878 dataVolumeContainer2]# ls
dc01_add.txt dc02_add.txt dc02_update.txt dc03_add.txt
以上,可以看出:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止