1、什么是容器数据卷
docker run --name some-mysql -d mysql:5.7
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker 和宿主机共享数据,使用的技术叫做数据卷技术。
场景
如果容器使用mysql创建了数据库。默认数据库数存户在容器中,但是容器随时可能会被移动或者删除,数据就随着消失,这是不合理的。
- 对于容器有没有一种基于外部的共享配置存储,多个容器之间,无论在哪里启动度可以访问这些文件。
解决
docker提供了数据卷技术
卷(volume)就是目录或者文件,存在一个或者多个容器中,有docker挂载到容器,但是不输入unionfs,因此绕过uinonfs,提供共享存储的数据。
数据卷基本结构
2、数据卷的特点
- 数据卷可以在容器之间共享数据
- 卷中的更改可以直接生效,容器内部的数据也随之改变
- 数据卷中更改不包含在镜像的更新中
- 数据卷的生命周期一致持续到没有任何容器使用它
3、如何使用docker数据卷
在run运行容器时,加上-v的选项
docker run -itd --name centos7-volume-demo1 -v /home/volume/test:/hemo/volume/test centos:centos7
- -v:执行数据卷的挂载,后面的参数,宿主机目录:容器目录相当于一个挂载链接
- 进入容器可以看到挂载的目录
- 在容器中添加一个文件编辑文件
- 在容器外部宿主机也可看到相同的文件产生
4、数据卷命令
查看数据卷(inspect)
docker inspect 133619e99716a# 查看数据卷内部信息
停止容器
docker stop id
- 修改容器或者宿主机的内容,他们都会互相影响
- 将容器删除,对宿主机对文件进行修改,重启新容器挂载新的数据卷,数据是否可用
- 删除容器
- 启动新容器挂载同一个宿主机的目录数据卷
数据共享正常docker run -itd --name centos-volume-demo2 -v /home/volume/test/:/home/test centos:centos7
mysql镜像容器实战
使用mysql的镜像,完成数据卷容器挂载,将外部宿主机文件挂载到容器。让容器mysql数据进行共享和持久化。如果一旦把mysql删除,在继续启动容器,上一个容器的数据没丢失
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=123456-pw -d musql:版本号
-e :表示运行的时候执行的环境变量,表示启动mysql时,可以使用root:123456
测试
一、创建一个容器
docker run -itd --name mysql5.7-demo1 -e MYSQL_ROOT_PASSWORD=123456 -p 3310:3306 -d mysql:5.7
进入容器,使用密码和登录到mysql客户端,检查挂载目录,容器运行后,和镜像中配置一致,两个目录文件夹
启动两个新的容器
目的:测试两个新的容器之间是否数据共享
- 启动第一个容器,并且挂载两个文件夹到容器中
docker run -itd --name mysql-volume-demo1 -p 3311:3306 -v /hemo/test/mysql/conf:/home/mysql/conf.d -v /home/test/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
编写数据到mysql中
mysql -h 主机地址(docker容器里面的远程地址) -P(端口号必须是远程地址端口号) -u用户名 -p用户密码
匿名具名挂载
1.匿名挂载
docker run -itd --name docker-volumn-demo1 -v /home/usr tomcat:9.0
2.具名挂载
docker run -itd --name docker-volumn-demo1 -v first-volume:/home/usr tomcat:9.0
3.宿主路径挂载
docker run -itd --name docker-volumn-demo1 -v /home/test:/home/usr tomcat:9.0
数据卷的使用
第一种:-v宿主机路径:容器路径
第二种:-v容器路径
第三种:-v数据卷名字:容器路径
我们可以调用docker volume查看数据卷的元数据信息
docker volume子命令
帮助我们查看所有本地数据卷的信息
docker volume ls
帮助我们查看数据卷详细信息
docker volume inspect 数据卷名字
Mountpoint 指的是当前数据卷的宿主机路径
在这路径中我们配置一个demo01.txt
编辑一些文本信息
进入容器中查看是否在usr/local中存在
docker volume prune
我们必须在删除一些数据卷时删除使用的容器,否则容器就会一直使用数据卷,导致数据卷删除不成功
对数据卷设置读写权限
可以创建数据卷,创建容器时,对容器设置读写权限。可以在挂载时使用ro 或者rw来控制
ro表示只读readonly#容器数据卷只能在宿主机修改编写
rw表示读写readwrite
docker run -itd --name centos7-volume-demo2 -v second-volume:/usr/local:ro centos:centos7
数据卷容器
什么是数据卷容器
我们可以把挂载宿主机目录文件的容器看成是父容器,利用这个父容器创建多个子容器,依然可以继承这种挂载,这种父容器叫做数据卷容器
数据卷容器测试
- 具名创建一个数据卷
容器可宿主机打通挂载,可以共享数据。在宿主机创建的文件,容器可以使用 - 实现子容器创建和继承
在创建容器时,继承一个已经存在的容器,数据卷的挂载就会被同样继承
docker run -itd --name volume-demo2 --volumes-from volume-demo1 centos:centos7
–volumes-from volume-demo1就是通过继承数据卷找到volume-demo1和宿主机的共享目录,从而一并找到共享数据