什么是容器数据卷
数据卷就是数据(一个文件或者文件夹)。数据卷是特殊的目录,可以绕过联合文件系统,为一个或多个容器提供访问。
数据卷设计的目的是数据的永久化,是完全独立于容器的生命周期,不会在容器删除时删除其挂载的数据卷,也不会存在类似垃圾收集机制,对容器引用的数据卷进行处理。
在docker的使用过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,所以这就涉及到Docker容器的数据操作。 容器中数据管理主要有两种方式:数据卷和数据卷容器。
数据卷存在于宿主机中,独立于容器,和容器的生命周期是分离的,数据卷存在于宿主机的文件系统中,数据卷可以目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换。
总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的
使用数据卷
方式一:直接使用命令来挂载 -v
docker run -it -v 主机目录:容器目录
# 测试
[root@ajie ~]# docker run -it -v /home/test:/home centos /bin/bash
# 启动成功以后,我们可以通过 docker inspect 容器id 来查看相关的信息
测试文件的同步
再次测试
1.关闭容器
2.在主机上对文件进行修改
3.启动容器
4.在容器中查看文件内容
好处:我们通常在容器内无法修改配置文件,有了数据卷的挂载,我们可以在主机修改配置文件,修改后的内容会自动同步到容器中
实战:安装mysql
下载mysql镜像
启动mysql
# 官方启动命令
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
# -d 后台启动
# -it 交互模式
# -p 端口映射
# -v 卷挂载
# -e 配置mysql的密码
# --name 给容器起名字
[root@ajie ~]# docker run -d -it -p 3301:3306 -v /home/mysql/my.conf:/etc/my.conf -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=ajie910 --name mysql01 mysql:5.7
注意事项:用图形化界面连接这个数据库的时候,一定要确保阿里云的安全组开启了
用图形化界面SQLyog测试连接
本地创建数据库
查看主机数据是否同步成功
查看容器删除以后,数据是否依然存在
具名和匿名挂载
# 匿名挂载
# -v 容器内路径
[root@ajie ~]# docker run -d -P --name nginx01 -v /etc/nginx nginx
# 查看 volume 的情况
[root@ajie ~]# docker volume ls
如图所示,像这种卷的名字由很长的复杂的字符串表示的就属于匿名挂载
# 具名挂载
# -v 卷名称:容器内路径
[root@ajie ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
如图所示,这就是具名挂载,就是卷名称是具体的名字
查看卷在主机中挂载的位置
# docker volume inspect 卷名称
[root@ajie ~]# docker volume inspect juming-nginx
如上图所示,卷默认都挂载在主机的/var/lib/docker/volumes
下
我们通过具名挂载可以方便的找到我们的卷,因此我们大多数情况下使用的也是匿名挂载
# 如何确定是具名挂载还是匿名挂载,还是指定路径挂载!
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /宿主机路径:容器内路径 # 指定路径挂载
扩展
# 通过 -v 容器内路径:ro rw改变读写权限
ro readonly # 只读
rw readwrite # 可读可写