匿名卷挂载 : -v 的时候只指定容器内的路径 如下面这个:/etc/nginx
1.docker run -d -P --name nginx -v /etc/nginx nginx
2.查看所有卷 docker volume ls
这里发现,这就是匿名挂载,只指定容器内的路径,没有指定容器外的路径
再启动一个具名挂载 docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx nginx
-P就是随机指定端口 具名挂载语法: -v 卷名:容器内路径
再次查看所有卷 docker volume ls 发现有名字了,就是刚才取的,这就是具名挂载
显示卷 juming-nginx 的信息 docker volume inspect juming-nginx
所有docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/卷名/_data 中,所有数据都存放在_data里面
进入cd /var/lib/docker
接着进入cd volumes 我们的卷都在volumes 中
进入juming-nginx
进入_data目录,可以看到我们nginx的配置文件,已经拿到了我们的配置文件
我们通过具名挂载可以方便找到我们的卷,大都数情况都使用具名挂载
那么如何确定是 匿名挂载,具名挂载,还是指定路径挂载呢?
-v 容器内路径 匿名挂载
-v 卷名:容器内路径 具名挂载
-v /宿主机路径:容器内路径 指定路径挂载(只要带斜杠/的就是指定路径挂载)
拓展:
我们经常看到通过-v 容器内路径:ro rw 改变读写权限
ro readonly 只读
rw readwrite 可读可写
一旦这个设置了容器权限,容器对我们挂载出来的内容就限制了,这个是相对容器来说的,假如我们把这个容器挂载出来了,再这个容器中就无法操作了(只针对ro这个,rw有权限)
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:rw nginx
ro ---只要看到ro 就说明这个路径只能通过宿主机来操作,容器内部无法操作,因为他是只读的权限,没有写的权限
初识Dockerfile
Dockerfile就是创建自己的镜像,也能通过hub.docker分享自己自定义的镜像
dockerfile就是用来构建docker镜像的构建文件!命令脚本!先来体验一下
通过这个脚本可以生成镜像,镜像是一层一层的,脚本也是一个个的命令,每个命令都是一层
dockerfile就是再创建镜像的时候连同挂载
1.创建文件
进入文件 cd docker-test-volume/
创建一个dockerfile文件 vim dockerfile 建议名字就叫dockerfile
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "-------end--------"
CMD /bin/bash
3.docker build -f /home/docker-test-volume/dockerfile1 -t zzq/centos:1.0 .
查看docker images
启动自己写的镜像
这个目录就是我们生成镜像的时候自动挂载的,就是数据卷目录
这个卷和外部一定有一个同步的目录