什么是容器数据卷
数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可持久化
Mysql ,容器删除了,就是删库跑路了! 虚修:Mysql数据可以存储在本地
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
这就是卷技术,目录的挂载,将我们容器内的目录挂载到Linux上面!
总之:容器的持久化和同步操作!容器之间也是可以数据共享的
使用数据卷
docker run -it -v 主机目录 : 容器内目录#测试liuyang@docker:~$ docker run -it -v /home/ceshi:/home centos /bin/bash
好处:我们以后修改文件直接在我们本地修改就可以
实战:安装Mysql
思考:Mysql数据持久化问题!
# 获取镜像liuyang@docker:~$ docker pull mysql:5.7# 运行容器,需要做数据挂载! # 安装启动mysql,需要配置密码 这是要注意的点# 官方测试:docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag# 启动我们的mysql-d 后台启动-p 端口映射-v 卷挂载-e 环境配置--name 容器名字liuyang@docker:~$ docker run -d -p 3306: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# 启动成功后 用我们的Navicat链接测试
把mysql容器删除,我们本地的数据卷依旧存在,这就是实现数据的持久化
具名和匿名挂载
匿名挂载
-v 容器内路径!
# 命令docker run -d -P --name nginx01 -v /etc/nginx nginx# 查看所有的volume的情况liuyang@docker:/home/mysql/data$ docker volume lsDRIVER VOLUME NAMElocal 1f3d5e801bc190063497540445209e8fede19c5bc9572f81e5c927063b1e427a# 这里发现,这种就是匿名挂载,我们在-v只写了容器内的路径,没有写容器外的路径!
具名挂载
liuyang@docker:/home/mysql/data$ docker run -d -P --name nginx02 -v juming-name:/etc/nginx nginx3dbfc3172868568a165da218a0b18935b916dfffab4851e978ec516fa5632b25liuyang@docker:/home/mysql/data$ docker volume lsDRIVER VOLUME NAMElocal juming-name# 通过 -v 卷名:容器内路径# 查看一下这个卷liuyang@docker:/home/mysql/data$ docker volume inspect juming-name[{"CreatedAt": "2020-09-13T19:42:02+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/juming-name/_data","Name": "juming-name","Options": null,"Scope": "local"}]
所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxxx/_data
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况在数据的 具名挂载
**
如何确定具名挂载还是匿名挂载,还是指定路径挂载?
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /宿主机路径:容器内路径 # 指定路径挂载
拓展
# 通过 -v 容器内路径: ro rw 改变读写权限ro readonly #只读rw readwrite #可读可写# 一旦这个设置了容器权限,容器对我们的挂载出来的内容就有限定了!docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginxdocker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx# ro 只要看到ro就说明这个路径智能通过宿主机来操作,容器内部是无法操作的!
初始Dockerfile
Dockerfile就是用来构建docker镜像的构建文件!命令脚本!先体验一下!
通过这个脚本可以生成镜像,镜像一层一层的,脚本一个个的命令,每个命令都是一层
创建dockerfile
# 创建一个dockerfile文件,名字可以随机 建议dockerfile# 文件中的内容 指令(大写) 参数FROM centosVOLUME ["volume01", "volume02"]CMD echo "-------end-------"CMD /bin/bash# 这里的每个命令,就是镜像的一层!

启动下自己写的容器

这个卷和外部已经有一个同步的目录!
查看一下卷挂载的路径
测试一下刚才的文件是否同步出去了
这种方式未来使用的十分多,因为我们通常会构建自己的镜像!
假设构建镜像时候没有挂在卷,要手动镜像挂载 -v 卷名:容器内路径
数据卷容器
多个mysql同步数据

# 启动3个容器,通过我们刚才自己的镜像启动


测试:可以删除docker01,查看一下docker02还可以访问这个文件
拷贝概念
结论
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止
但是一旦持久化到了本地,这个时候,本地的数据是不会删除的!
