目录
1.数据卷是什么
2.容器中数据管理的方式
3.数据卷分类
3.1宿主机数据卷
3.2命名数据卷
3.3匿名的数据卷
4.数据卷容器
在使用docker容器时,会产生一系列的数据文件,这些数据文件会在我们删除docker时被删除,但是其中产生的部分数据时希望被保存下来做其他事情的,docker将应用与运行环境打包成容器发布,我们希望在运行过程中产生的部分数据是可以持久化的,而且容器之间能够实现数据共享。
简单的说:docker容器的数据卷可以被理解成U盘,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,docker不会再容器删除时将其挂载的数据卷删除。
特点:
3.1.1特点:
3.1.2宿主机数据卷实战
①先创建mysql容器
命令:
docker run
-v 宿主机挂载路径 :容器路径
测试路径: -v /data/mysql:/var/lib/mysql
docker run -itd --name mysql --restart always -p 3306:3306 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin mysql:5.7.37 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
②本地连接mysql容器,并创建数据库
navicat连接到mysql,创建mytest数据库,新建tb_user表,并在表中新增两条数据
此时在宿主机中 /data/mysql 可以看到新建了一个mytest文件
③删除mysql容器
删除mysql容器,此时宿主机的 /data/mysql 文件仍然存在
使用navicat 访问mysql 已经访问不到了
④重新创建mysql容器
再次创建mysql容器
⑤再次查看数据库,看是否还有之前创建的数据库
⑥以上,实现了mysql删除后,数据仍然存在的操作。
但是存在问题:如果初始化的mysql有表数据,但是通过这种方式,会将 / data/mysql的数据覆盖mysql中的表数据
命令
docker run
-v 卷名 :容器路径
测试路径: -v testnginx:/var/lib/mysql
docker run -itd --name nginx2 -v testnginx:/etc/nginx nginx:1.19.3-alpine
通过 docker volume ls 查看所有的卷
通过 docker volume inspect testnginx 查看卷的路径
命名数据卷没有指定路径,定义卷名,docker会在默认路径挂载路径
命令
docker run
-v 容器路径
测试路径: -v /var/lib/mysql
docker run -itd --name nginx1 -v /etc/nginx nginx:1.19.3-alpine
启动一个nginx1容器,使用匿名数据卷
docker volume ls 查看所有的数据卷
docker volume inspect 卷名 查看数据卷地址
进入路径中,同样生成名为 _data 的文件
之前是容器直接与宿主机挂载,现在容器先与数据卷容器挂载,数据卷容器再与宿主机挂载
语法:
docker run
data-volum 数据卷容器名称
0.使用 centos:7.8.2003作为数据卷容器
docker pull centos:7.8.2003
①数据卷容器先与宿主机挂载,挂载目录为 nginx 和mysql两个目录
docker run -d --name data-volume -v /data/nginx:/usr/share/nginx/html -v /data/mysql:/var/lib/mysql centos:7.8.2003
****这里注意,不需要管centos是否启动,都可以作为数据卷容器使用
docker ps 查看到centos没有启动, /data 目录生成了两个文件夹
②此时新建一个nginx容器,将容器通过 volums-from 挂载到 /data/nginx目录
docker run -itd --name nginx01 -p 80:80 --volumes-from data-volume nginx:1.19.3-alpine
通过ls查看目录下没有任何文件,此时通过浏览器访问nginx页面也没有内容
③ 在 /data/nginx 创建一个index.html 并输入内容
再次通过浏览器访问,可以看到index.html 的内容
④此时再启动一个nginx02,端口映射为81,挂载的仍是data-volum,此时通过浏览器访问nginx02,得到的页面内容也是和nginx01相同的
所以,通过数据卷容器挂载相同的目录,可以共用一个文件内容