【DevOps系列】Docker数据卷(volume)详解

这篇具有很好参考价值的文章主要介绍了【DevOps系列】Docker数据卷(volume)详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【DevOps系列】Docker数据卷(volume)详解

一、概述

Docker的镜像是由多个只读的文件系统叠加在一起形成。启动一个容器的时候,docker会加载只读层并在只读层的上面(栈顶)增加一个读写层。如果需要修改只读层的文件,那么这个文件层需要复制到读写层。该文件的只读版本还在,只是被上面写层的文件副本隐藏。当删除docker或重新启动时,之前的更改文件会消失。在Docker中,只读层与读写层的组合称为Union File System(联合文件系统)。Docker将运用与运行的环境打包形成容器运行,Docker容器产生的数据,如果不通过docker commits生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有,为了能保存数据在Docker,Docker设计了一个机制既(Volume)

为了很好的实现数据保存和数据共享,Docker提出了Volume这个概念,就是绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上,这个目录或文件称为数据卷

二、数据卷

【DevOps系列】Docker数据卷(volume)详解,Spring Cloud,devops,docker,eureka

数据卷(Volume)是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供以下一些特性:

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

三、为什么使用数据卷volume

卷是在一个或多个容器内被选定的目录,为docker提供持久化数据或共享数据,是docker存储容器生成和使用的数据的首选机制。对卷的修改会直接生效,当提交或创建镜像时,卷不被包括在镜像中。

数据卷的作用:

  1. 持久化数据
  2. 共享数据

数据卷的特点:

  1. 即使生效
  2. 卷的更新不影响镜像
  3. 即使容器停止或被删除,卷默认也一致存在

四、数据卷volume基本操作

4.1 创建数据卷

使用如下命令可以创建一个数据卷

  • docker volume create 卷名
docker volume create db_vol

使用这种方式创建的数据卷可也被docker volume管理,如查看,删除等。

4.2 查看数据卷

docker volume ls

4.3 查看数据卷详细信息

  • docker volume inspect 卷名
docker volume inspect db_vol

4.4 数据卷删除

  • docker volume rm 卷名
docker volume rm db_vol

五、数据卷的使用

5.1 先创建数据卷在挂载

docker volume create data_volume

5.2 创建容器使用数据卷

docker run -d -it \
> --name volumetest \
> --mount source=data-vol,target=/data \
> ubuntu

注:加了“\”意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行输入,直到读到结束符。

简写方式(-v):

docker run -d -it \
> --name volumetest \
> -v data-vol:/data \
> ubuntu

5.3 直接挂载宿主机目录

通过这种方式不需要事先创建数据卷,直接指定宿主机的一个目录挂载到容器中,但宿主机中对应的目录要存在,否则会报一下异常

docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /root/vdata.
1). mount方式创建容器命令如下:
docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/lisen/vdata,target=/vdata \
> ubuntu
2). -v方式创建命令如下:
docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata ubuntu

5.4 只读数据卷

创建的数据卷默认是可以读写的,这适合于绝大多数情况,也可以将卷设置为只读的

1). mount方式创建容器命令如下:
docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/lisen/vdata,target=/vdata,ro \
> ubuntu
2). -v方式创建(可以理解为简写方式):
docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata:ro ubuntu

数据卷的主要作用是数据持久化和数据共享,所以一般不用只读方式。

5.5 数据卷容器

用途:数据卷容器主要目的是多个容器之间共享一些持续更新的数据,数据卷容器也是一个容器,专门提供数据卷给其他容器挂载。

1).新建数据卷容器
docker run -it -d --name data-volume-con -v /data ubuntu
2).新建一个容器来使用数据卷容器
docker run -it -d --name db-con-1 --volumes-from data-volume-con ubuntu

参数–volumes-from用于指定数据卷容器;进入新建的容器,在挂载的目录中(data目录,既创建数据卷容器时指定的目录)新建一个测试文件。

5.6 数据卷容器

1).数据卷的备份

创建一个容器,该容器既挂载了需要备份的数据卷(有volumes-from参数指定),又挂载了用来备份数据的数据卷(可以用-v参数指定),通过tar压缩命令,将volumes-from参数指定的需要备份的数据卷,压缩到用来备份的数据卷中(等同于保存到了宿主机对应的目录中)。

docker run --rm \
> --name backup \
> --volumes-from data-volume-con \
> -v /host-backup:/con-backup \
> ubuntu tar cvf /con-backup/backup200201.tar /data
  • –rm 参数,指定了创建的容器为临时容器,运行完后将自动删除,我们只是借助这个容器完成备份,备份完成后数据存放于宿主机中,容器自然也就不需要了。
  • –volumes-from 参数,指定了需要备份的数据卷容器
  • -v 参数,指定了用来备份数据的数据卷,/host-backup为宿主机目录,/con-backup为对应的容器目录
  • tar 命令完成数据压缩,注意压缩的源为容器目录,因为压缩命令实际上实在容器中执行的,确切的说是在backup容器中执行(–name参数指定的),压缩完成后自然也会保存到宿主机目录。
2).数据还原

新建一个数据卷容器,这个容器作为存放还原数据的容器。

docker run -it --name data-volume-con2 -v /data ubuntu

创建一个临时容器,既挂载了用于存放还原数据的数据卷容器,又挂载了存有备份数据的数据卷,然后使用tar命令,将备份的数据解压到存放还原数据的数据卷中。文章来源地址https://www.toymoban.com/news/detail-724241.html

  • –rm 参数,请参见“数据备份”部分的解释
  • –volumes-from 参数,指定用于保存还原数据的容器
  • -v 参数, 用于指定存有备份数据的数据卷,/host-backup是宿主机上用来存放备份数据的目录,将其挂载到容器的/container-back目录,tar命令通过/container-back

到了这里,关于【DevOps系列】Docker数据卷(volume)详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot

    以下服务器的操作系统均为Centos7 服务器A:Gitlab 服务器B:GitlabRunner、Docker、docker-compose、Java1.8、maven3.6.3、git ps:这里可以把服务器B的GitlabRunner、Java1.8、maven3.6.3、git单独提出来,独立部署,需要java的原因是maven,maven用于打包。 应用服务器B就只需要docker和docker-compose就可以

    2024年02月13日
    浏览(52)
  • DevOps系列文章之 docker插件实现多实例部署(IDEA插件)

    1. Docker的安装以及开启远程访问 1.1 安装 # 检查虚拟机内核版本,必须是3.10及以上 uname -r # 安装docker yum install docker # 输入y确认安装 # 启动docker systemctl start docker # 查看docker版本 docker -v # 开机启动docker systemctl enable docker # 停止docker systemctl stop docker # 重启docker systemctl restart do

    2024年02月10日
    浏览(43)
  • DevOps系列文章之Docker部署web ssh工具sshwifty

    1.sshwifty简介 sshwifty是一款Web SSH Telnet(WebSSH WebTelnet 客户端工具。 2.shwifty 特点 shwifty 是为 Web 设计的 SSH 和 Telnet 连接器。它可以部署在您的计算机或服务器上,为任何兼容(标准)的网络浏览器提供 SSH 和 Telnet 访问接口。 1.检查docker版本 [root@jeven ~] # docker version Client: Docke

    2024年02月10日
    浏览(53)
  • DevOps系列之 Python操作数据库

    安装pymysql pip install pymysql pymysql操作数据库 1.连接数据库 使用Connect方法连接数据库 pymysql.Connections.Connection(host=None, user=None, password=\\\'\\\', database=None, port=0, charset=\\\'\\\') 参数说明: host – 数据库服务器所在的主机。 user – 登录用户名。 password – 登录用户密码。 database – 连接的数据

    2024年02月02日
    浏览(36)
  • DevOps系列文章之 DevOps 运维服务体系

    DevOps 体系是从原始运维一步步走过来的,原始运维好比是本,有了本进而想继续提升效率、减少出错、优化流程,就发展到了 DevOps,AIOps……各种Ops 首先,运维的业务职能规范后形成章程、纲领,在互联网快速发展的特点下,形成了一套应对”快”和”变”的体系,并不停

    2024年02月12日
    浏览(106)
  • DevOps系列文章 之 Python基础

    1.定义 1、集合是一个无序的,不重复的数据组合,它的主要作用如下: 1.去重,把一个列表变成集合,就自动去重了 2.关系测试,测试两组数据之前的交集、差集、并集等关系 2、集合类型 1.数学上,把set称做由不同的元素组成的集合,集合(set)的成员通常被称做集合元素

    2024年02月11日
    浏览(39)
  • DevOps系列文章 之 Python 基础

    考点:字符串:str( )、整型数:int( )、浮点数:float( ) 考点:条件分支 考点:引入随机数 考点:while循环语句 考点:for循环语句 Python语言支持以下类型的运算符 以下假设变量a为10,变量b为20: 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个

    2024年02月11日
    浏览(43)
  • DevOps系列文章 之 Springboot单元测试

    在没有代码生成工具或尝试一门新的 ORM 框架时,当我们希望不去另外写 Service 和 Controller 来验证 DAO 层的代码不希望只通过接口请求的方式来验证时,这时候单元测试的方式就可以帮助我们满足这一需求。 在我们开发Web应用时,经常会直接去观察结果进行测试。虽然也是一

    2024年02月15日
    浏览(52)
  • DevOps系列文章之 Dockerfile 使用流程

    主要步骤: Step1、准备项目应用程序包 Step2、编写Dockerfile及启动脚本 Step3、docker build 构建镜像 Step4、docker run 启动容器 Step5、docker exec 进入容器进行验证 Step6、镜像的导入导出 Step7、提交容器生成新镜像 Step1、准备项目应用程序包 根据项目需要,将应用程序包、Nginx配置文件

    2024年02月16日
    浏览(40)
  • DevOps系列文章之 Git知识大全

    常用命令   其他参数 --inital-branch 初始化的分支 --bare 创建一个裸仓库(纯 Git 目录,没有工作目录) --template 可以通过模板来创建预先建好的自定义 git 目录   用户名配置 git config --global user.name \\\"yourname\\\" git config --global user.email yourname@xx.com instead of 配置 git config --global url.git

    2024年02月16日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包