Docker学习007 -- Docker数据卷 数据卷容器

目录

1.数据卷是什么

2.容器中数据管理的方式

3.数据卷分类

3.1宿主机数据卷

3.2命名数据卷 

3.3匿名的数据卷

4.数据卷容器


1.数据卷是什么

在使用docker容器时,会产生一系列的数据文件,这些数据文件会在我们删除docker时被删除,但是其中产生的部分数据时希望被保存下来做其他事情的,docker将应用与运行环境打包成容器发布,我们希望在运行过程中产生的部分数据是可以持久化的,而且容器之间能够实现数据共享。

简单的说:docker容器的数据卷可以被理解成U盘,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,docker不会再容器删除时将其挂载的数据卷删除。

特点:

  1. 数据卷可以在容器间数据共享或重用
  2. 更改可理解生效,但不包含挂载文件中的配置文件
  3. 数据更改只针对容器
  4. 数据卷默认一直存在,但是可以手动删除
  5. 生命周期会伴随着容器使用而存在

2.容器中数据管理的方式

  • 数据卷:容器内数据直接映射到宿主机环境
  • 数据卷容器:使用特定容器维护数据卷

3.数据卷分类

  • 宿主机数据卷:直接在宿主机文件系统同,但是容器可以访问
  • 命名的数据卷:磁盘上Docker管理的数据卷,但是卷有名字
  • 匿名的数据卷:磁盘上Docker管理的数据卷,无名字,docker管理这些文件

3.1宿主机数据卷

3.1.1特点:

  1. 数据可以被保存在任意位置
  2. 宿主机的目录或者文件被挂载到容器中,容器按照挂载目录或文件的绝对路径,来使用或修改宿主机的数据。宿主机挂载不需要预先创建目录
  3. 使用宿主局数据卷的容器可以再通过容器内部的进程对主机文件系统进行修改,共享CURD系统目录和文件

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中的表数据

3.2命名数据卷 

命令

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会在默认路径挂载路径

3.3匿名的数据卷

命令

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 的文件

4.数据卷容器

之前是容器直接与宿主机挂载,现在容器先与数据卷容器挂载,数据卷容器再与宿主机挂载

 

 语法:

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相同的

 所以,通过数据卷容器挂载相同的目录,可以共用一个文件内容

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值