docker容器数据卷

本文介绍了Docker数据卷的概念、特点,如数据卷可在容器间共享且更改直接生效,不受容器生命周期影响。详细讲解了如何使用数据卷,包括-v选项的挂载方式,并通过mysql镜像实战展示了数据卷的持久化存储。还涵盖了数据卷命令的使用,如inspect、prune,以及数据卷的读写权限设置和数据卷容器的应用。
摘要由CSDN通过智能技术生成

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和宿主机的共享目录,从而一并找到共享数据
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值