1.什么叫做容器卷技术
是一种容器内数据和宿主机数据相互映射同步的过程,如下所示:
2.如何去做容器数据卷
可以通过命令 docker run -it -v 主机目录位置:容器目录位置 镜像id /bin/bash
可以通过以下方式进行查看是否挂载成功
3. 测试容器和宿主机是否相互会同步数据
1)首先在宿主机上添加个文件,查看在容器里面是否会有数据同步过去,可以看到确实同步过去了,宿主机添加了文件,容器中的目录也添加了
在容器上上的test.java文件中添加update container,在宿主机上可以看到update container
2)停止容器,在宿主机上更新文件,看是否能将数据同步到容器中,
最终结果:
4.实战mysql 的数据同步
用容器部署mysql的时候,如果删除容器了,那么数据也会随之丢失,因此需要用到容器卷挂载的技术。
4.1)下载mysql容器
docker pull mysql:5.7
4.2)运行容器
docker run -d -p 3310:3306 -v /root/mysql/config:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 镜像id
4.3)用客户端来连接数据库,并创建一个数据库,看看在客户端创建是否在宿主机上存在相同的数据
4.4)删除容器测试宿主机上的文件是否还存在
5. 匿名挂载和具名挂载
5.1)匿名挂载
docker run -d -P --name nginx02 -v /etc/nginx 4f380adfc10f
-d : 后台运行 -P 随机指定端口 --name 指定容器名称
注意这里 以前是 -v 主机路径:容器内部的路径,现在是 -v 容器内路径,主机路径没有,那我们会很好奇这个容器内的路径会挂载到哪,这个在具名挂载来说,你可以认为是在一个默认地址下的上图中2中的某一个目录下
5.2)具名挂载
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx 4f380adfc10f
这里相比于匿名挂载,就是多了写明了卷的名字,也就是挂载在哪个目录下,也就是容器中的/etc/nginx挂载到juming-nginx这个目录下,那么这个目录存在哪呢?
可以通过docker volume 查看相关卷,通过docker volume --help 来看下具体的使用方式
我们通过docker volume inspect 卷的名称
通过docker volume ls 可以查看所有的卷,可以看到我们挂载的具名卷,通过docker volume inspect 卷的名称可以看到这个卷是和
5.3)匿名挂载和具名挂载的区别
匿名挂载 -v 容器内的地址 系统生成的卷名称
具名挂载 -v 卷的名称:容器内的地址 指定生成的卷的名称 ,这个卷的名称会和/var/lib/docker/volumes/卷的名称/_data相对应,简单点说就是宿主机上的某个默认地址和容器上的某个地址相对应
指定路径 -v 宿主机名称:容器内的地址 宿主机上的指定路径 和 容器上的目录对应
5.4)扩展
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:ro 4f380adfc10f
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:rw 4f380adfc10f 默认的
有时候我们会指定在docker上容器上的目录不能更改,只能通过宿主机的卷来更改,后续再同步过去,这边可以利用
-v 容器路径:ro 代表只读 readonly
-v 容器路径:rw 代表读写 readwrite(默认读写)
文章评论