Docker容器数据卷

Docker

6. 容器数据卷(老师:狂神)

【狂神说Java】Docker最新超详细版教程通俗易懂

6.1 什么是容器数据卷
6.1.1 docker的理念

将应用和运行的环境打包形成容器运行,运行可以伴随着容器,但是对于数据的要求,我们希望能够持久化。

所以希望容器之间有可能可以共享数据,Docker容器产生的数据,如果不通过docker commit 生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。

为了能保存数据在Docker中就可以使用卷,让数据挂载到本地!这样数据就不会因为容器删除而丢失了。

6.1.2 作用

卷就是目录或者文件,存在一个或者多个容器中,由docker挂载到容器,但不属于联合文件系统,因此
能够绕过 Union File System , 提供一些用于持续存储或共享数据的特性。

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂
载的数据卷。

6.1.3 特点
  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可以直接生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

总结:容器数据卷就是容器的持久化以及容器间的继承和数据共享。

6.2 使用数据卷
6.2.1 容器中直接使用命令来添加
# 命令
docker run -it -v 宿主机绝对路径目录:容器内目录 镜像名

在这里插入图片描述

查看数据卷是否挂载成功

docker inspect 容器id

在这里插入图片描述

测试容器与宿主机之间数据共享

容器中

在这里插入图片描述

宿主机中
在这里插入图片描述

【容器停止退出后,主机修改数据后依然会同步】

在这里插入图片描述

6.2.2 使用docker安装mysql

启动mysql容器

docker run -d -p 3310: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连接

在这里插入图片描述

【进行凡是涉及端口的操作时,一定得先设置服务器的防火墙】

6.2.3 通过Docker File添加数据卷

DockerFile 是用来构建Docker镜像的构建文件,是由一些列命令和参数构成的脚本。

1、在宿主机 /home 目录下新建一个 docker-test-volume文件夹

在这里插入图片描述

2、编写DockerFile文件

在这里插入图片描述

3、build后生成镜像,获得一个新镜像 dingjiaxiong/centos

在这里插入图片描述

在这里插入图片描述

4、启动容器

在这里插入图片描述

5、在数据卷中新建一个文件

在这里插入图片描述

6、查看下这个容器的信息

docker inspect 容器id

在这里插入图片描述

7、这个卷在主机对应的默认位置

在这里插入图片描述

6.3 匿名和具名挂载
6.3.1 匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
# 匿名挂载的缺点,就是不好维护,通常使用命令 docker volume维护
docker volume ls
6.3.2 具名挂载
-v 卷名:/容器内路径
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx nginx
# 查看挂载路径
docker volume inspect nginxconfig

【如何判断挂载的是卷名而不是本机目录名】

不是/开始就是卷名,是/开始就是目录名

6.3.3 改变文件的读取权限
# ro: readonly
# rw: readwrite
# 指定容器对我们挂载出来的内容的读写权限
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:rw nginx
6.4 数据卷容器

命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。

【容器间传递共享】

1、先启动一个父容器docker01,然后在dataVolumeContainer2新增文件

在这里插入图片描述

在这里插入图片描述

退出不停止:Ctrl + P + Q

创建docker02,docker03 让他们继承docker01

--volumes-from

在这里插入图片描述

3、回到docker01发现可以看到 02 和 03 添加的共享文件

在这里插入图片描述

4、删除docker01,docker02 修改后docker03还能不能访问

在这里插入图片描述

5、删除docker02 ,docker03还能不能访问

在这里插入图片描述

6、新建docker04继承docker03,然后再删除docker03,看下是否可以访问

在这里插入图片描述

【结论】

容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。
cker02 ,docker03还能不能访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ding Jiaxiong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值