# 匿名挂载 -v 容器内路径! docker run -d -P --name nginx01 -v /etc/nginx nginx # 查看所有的 volume 的情况 [root@localhost]# docker volume ls DRIVER VOLUME NAME local 0fe4f30cfe99bbd4b8ed708c3e885092aaf35e8f54bc585510498870d71033a8 local 043d85920d701dafeeeabb59dcec331c5fbfb4a299efb66e931e05647b96de28 local 98b395dd27a8347bdaa6db9fa0fc317650dbbc8f31001559571fc39c04927052 local 212fd2597c11b43ed9a88918920ffa1bac0264720285ea5ecd37ee5ee484b4eb local 301f364edfbaef6f5d490e1569de79b91305ffbc0db4c050cbc1f68e9e8c8ef1 local 736dbdc00f40677ee24fc9ef5b020e8c55ae100d95ae83375a0dc55ccf4c80c4 local d4b98d19fd6ab8f2355e8625016e88208296c2fc6e13319488a84120ea2619e9 local e3d72c9b33bb596f86e845e9c77aa54b2eb08342c0d22b033d779d99da16efe1 [root@localhost]# # 这里发现,这种就是匿名挂载,我们在-v只写了容器内的路径,没有具体名字2、具名挂载
[root@localhost ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx WARNING: IPv4 forwarding is disabled. Networking will not work. 61b03844c6968db1ef304712dc36ba8b3fbbfe536586bea3b373199c09dfbfaa [root@localhost ~]# docker volume ls DRIVER VOLUME NAME local 0fe4f30cfe99bbd4b8ed708c3e885092aaf35e8f54bc585510498870d71033a8 local 043d85920d701dafeeeabb59dcec331c5fbfb4a299efb66e931e05647b96de28 local 301f364edfbaef6f5d490e1569de79b91305ffbc0db4c050cbc1f68e9e8c8ef1 local 736dbdc00f40677ee24fc9ef5b020e8c55ae100d95ae83375a0dc55ccf4c80c4 local juming-nginx [root@localhost ~]# # juming-nginx 即为具名挂载
查看默认挂载路径
[root@localhost etc]# docker volume inspect juming-nginx
[
{
"CreatedAt": "2022-05-14T16:45:35+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
"Name": "juming-nginx",
"Options": null,
"Scope": "local"
}
]
[root@localhost etc]#
(所有docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxxx)
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况在使用的具名挂载
如何确定是具名挂载还是匿名挂载,还是指定路径挂载!
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /宿主机路径::容器内路径 # 指定路径挂载!
扩展:
# 通过 -v 容器内路径:ro rw 改变读写权限
ro readonly # 只读
rw readwrite # 只读可写
# 一旦设置了这个容器权限 容器对我们挂载出来的内容就有限定了!
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx/ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx/rw nginx
# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!
二、使用DockerFile创建数据卷
1、初识Dockerfile
Dockerfile 就是用来构建 docker 镜像的构建文件! 命令脚本 ! 先体验以下
通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!
# 在/home下创建一个dockerfile文件 , 名字可以随机 建议Dockerfile # 文件中的内容 指令(大写) 参数 FROM centos VOLUME ["volume01","volume02"] CMD echo "----end----" CMD /bin/bash # 这里的每个命令,就是镜像的一层! 使用 docker build 启动镜像 [root@localhost ~]# docker build -f dockerfile1 -t kuangshen/centos . 启动自己写的容器 [root@localhost ~]# docker run -it kuangshen/centos /bin/bash
查看一下卷挂载的路径 [root@localhost ~]# docker inspect 3b10095bb49a
测试一下刚才的文件是否同步出去了!
这种方式我们未来使用的十分多,因为我们通常会构建自己的镜像!
假设构建镜像的时候没有挂载卷,要手动镜像挂载-v 卷名:容器内路径!
# 创建docker01 docker run -it --name docker01 kuangshen/centos # 创建docker02 docker run -it --name docker02 --volumes-from docker01 kuangshen/centos # 在docker01下的volume01中创建docker01 文件 然后在docker02中的volume01中查看发现有docker01文件 # 创建docker03 docker run -it --name docker03 --volumes-from docker01 kuangshen/centos # 然后在docker01下的volume01中查看发现有docker03 (只要通过 --volumes-from 就可以实现容器间的数据共享了,如果删除docker01那么docker02和docker03依然存在文件)



