为什么
容器的数据只存在容器内,如果容器被删,数据也会被一并删掉
用卷技术可以将容器内数据映射到服务器上,达到同步
数据持久化和同步,容器之间数据共享!
数据卷挂载(创建容器时)
-v - volume全称
docker run -it -v 本机目录:容器内目录

//测试[root@d7e95b07ab8f home]# touch parallel.java[root@d7e95b07ab8f home]# lsparallel.java[root@d7e95b07ab8f home]# read escape sequence[root@izwz9i11llygg6kvs2igtmz ceshi]# cd /home/ceshi[root@izwz9i11llygg6kvs2igtmz ceshi]# lsparallel.java[root@izwz9i11llygg6kvs2igtmz ceshi]#//inspect命令检查//以下是挂载相关配置信息"Mounts": [{"Type": "bind","Source": "/home/ceshi","Destination": "/home","Mode": "","RW": true,"Propagation": "rprivate"}],//这样我们的本机文件夹和容器文件夹是一个“双向绑定”关系了相当于“硬链接”的概念
MySql同步数据
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
-d 后台运行-p 本机端口:容器端口-v 本机目录:容器目录-e 环境配置--name 重命名容器名
匿名挂载
可以看到它在volume name中是一个编码的形式,我们把这样的叫做匿名挂载。
docker run -d -P -v /etc/nginx --name nginx02 nginx-P 随机端口
//代码运行记录[root@izwz9i11llygg6kvs2igtmz mysql]# docker run -d -P -v /etc/nginx --name nginx02 nginx4cb252a598aab63d77a22b27cae86fed9147cce2211a8c41373a99a46a731cf8[root@izwz9i11llygg6kvs2igtmz mysql]# docker volume lsDRIVER VOLUME NAMElocal 3b118d8f565bb9441d2640ed6b3325b1a11e7a9da68b48c9d2648061fe4c63f4local 5c0f49e2fb6b4cfc678a395e6fe7f139452814f1b66d98fa5f8a68015e98d95clocal 2353adb8b0e506d39cf7a6d627d480e6247f8482b648a57f1e654e15d28eb45blocal beb3ddb83851d2a6bfdde65ba41e860b818ef9e7b93e42efe4be4cf12bf763a4local c7a826f9f75bf8756a02a9a06cf106f36d3ebab82e767bfbec76a4c7a1a41424local ea98d50d4b9dc8d3ff81b0bae0007c0ad6265d1aecb7061e2c07b2d48c3c9d2c
具名挂载(推荐)
主要在 -v 具名:容器目录
docker run -d -P -v 具体名字:/etc/nginx --name nginx02 nginx
[root@izwz9i11llygg6kvs2igtmz mysql]# docker run -d -P -v specificName:/etc/nginx --name nginx03 nginx7e12e95a7410a35fcb82176d37267f475a3cfef69b3d5f575496475e363e5da3[root@izwz9i11llygg6kvs2igtmz mysql]# docker volume lsDRIVER VOLUME NAMElocal 3b118d8f565bb9441d2640ed6b3325b1a11e7a9da68b48c9d2648061fe4c63f4local 5c0f49e2fb6b4cfc678a395e6fe7f139452814f1b66d98fa5f8a68015e98d95clocal 2353adb8b0e506d39cf7a6d627d480e6247f8482b648a57f1e654e15d28eb45blocal beb3ddb83851d2a6bfdde65ba41e860b818ef9e7b93e42efe4be4cf12bf763a4local c7a826f9f75bf8756a02a9a06cf106f36d3ebab82e767bfbec76a4c7a1a41424local ea98d50d4b9dc8d3ff81b0bae0007c0ad6265d1aecb7061e2c07b2d48c3c9d2clocal specificName
查找挂载目录
查找挂载目录不论是具名还是匿名都可以查,根据volume name进行查找
docker inspect specificName
[root@izwz9i11llygg6kvs2igtmz mysql]# docker inspect specificName[{"CreatedAt": "2020-08-06T17:07:23+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/specificName/_data","Name": "specificName","Options": null,"Scope": "local"}]
这就是匿名挂载的本地数据路径"Mountpoint": "/var/lib/docker/volumes/specificName/_data",
总结
具体路径挂载-v 宿主机路径:容器路径//匿名挂载-v 容器路径//匿名挂载-v 具名:容器路径
拓展权限
docker run -d -P -v 具体名字:/etc/nginx:ro --name nginx02 nginxdocker run -d -P -v 具体名字:/etc/nginx:rW --name nginx02 nginxRO 只能通过宿主机来修改RW 宿主机和容器都可修改
DockerFile(创建镜像时)
这种方式相当于是在创建镜像的时候通过命令来进行挂载操作,上面的-v 是在创建容器的时候进行挂载操作
核心操作
//编辑一个文件vim dockerfile1//文件内容FROM centosVOLUME ["volume01","volume02"]CMD echo "----end----"CMD /bin/bash//构建镜像docker build -f /home/test_volume/dockerfile -t kuangshen/centos:1.0 .
运行结果
运行结果[root@izwz9i11llygg6kvs2igtmz test_volume]# docker build -f /home/test_volume/dockerfile -t sms/centos:1.0 .Sending build context to Docker daemon 2.048kBStep 1/4 : FROM centos---> 831691599b88Step 2/4 : VOLUME ["volume01","volume02"]---> Running in ef3b8edec5d6Removing intermediate container ef3b8edec5d6---> 02bb64ce3956Step 3/4 : CMD echo "----end----"---> Running in fcc14de27af0Removing intermediate container fcc14de27af0---> 5a895f2b4e27Step 4/4 : CMD /bin/bash---> Running in 2fbec8aada1dRemoving intermediate container 2fbec8aada1d---> 5303b29ad6f9Successfully built 5303b29ad6f9Successfully tagged sms/centos:1.0[root@izwz9i11llygg6kvs2igtmz test_volume]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEsms/centos 1.0 5303b29ad6f9 4 seconds ago 215MBhello-world latest bf756fb1ae65 7 months ago 13.3kB[root@izwz9i11llygg6kvs2igtmz test_volume]#
inspect一下
inspect一下镜像对应的容器"Volumes": {"volume01": {},"volume02": {}},//挂载详细"Mounts": [{"Type": "volume","Name": "ed99b948e40fdf2c2d099f32e928d4e20c1231a15b94b50d9d331800b00934fb","Source": "/var/lib/docker/volumes/ed99b948e40fdf2c2d099f32e928d4e20c1231a15b94b50d9d331800b00934fb/_data","Destination": "volume01","Driver": "local","Mode": "","RW": true,"Propagation": ""},{"Type": "volume","Name": "34c8a98b85ab4d5b1020033851fbd35ebd7a6c8965140d56bda790deb3ea3191","Source": "/var/lib/docker/volumes/34c8a98b85ab4d5b1020033851fbd35ebd7a6c8965140d56bda790deb3ea3191/_data","Destination": "volume02","Driver": "local","Mode": "","RW": true,"Propagation": ""}],

