什么是容器数据卷
数据如果都在容器中,容器删除数据就会丢失,需求:数据可以持久化,可以存储在本地。 所以需要容器之间可以有一个数据共享的技术!Docker容器中 产生的数据存储到本地,这就是卷技术。这就是目录的挂载,即将我们的容器里的内容挂载到Linux上。
总结:为了容器的持久化和同步操作,并且容器间也可以数据共享
使用数据卷
方式一:直接用命令来挂载 -v
docker run -it -v 主机目录:容器内目录
测试
docker run -itd -v /hmoe/ceshi:home centos /bin/bash
启动后可以通过docker inspect 容器id查看是否挂载成功
测试文件的同步
再测试!
-
停止容器
-
宿主机上修改文件
-
启动容器
-
容器内的数据依旧同步
实战测试:安装MySQL
思考: 数据持久化的问题
获取镜像:ddocker pull mysql:5.7
运行容器,需要做数据挂载,并且mysql需要配置密码:docker run -d-p 192.168.124.128:3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQ_ROOT_PASSWORD=123456 mysql:5.7
启动成功后数据就挂载上了。
假设我们将容器删除,会发现本地的数据卷依旧没有丢失, 这就实现了容器数据持久化功能。
具名和匿名挂载
匿名挂载 -v 容器内路径
docker run -d -P -name nginx01 -v /etc/nginx nginx
查看所有的卷的情况
docker volume ls
这种就是匿名挂载,因为在-v时只谢了容器内路径,没有写容器外路径
具名挂载 -v 卷名:容器内路径 docker -d -P --name nginx02 -v ju-ming:/etc/nginx nginx
查看卷的路径
所有docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxxx
我们通过具名挂载可以只方便的找到存在容器内的卷的位置
如何确定具名挂载还是匿名挂载
-v 容器内的路径 匿名挂载
-v 卷名:容器内路径 具名挂载
-v 宿主机路径:容器内路径
拓展:
通过 -v 容器内路径 ro rw 改变权限
ro readonly只读
rw writeonly 只写
一旦这个设置了容器权限,容器对我们挂载出来的内容就有限定了。只要看到ro就不能在docker变了,只能在宿主机里操作