【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这个概念,就是绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上,这个目录或文件称为数据卷

二、数据卷

数据卷(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命令,将备份的数据解压到存放还原数据的数据卷中。

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


目录
相关文章
|
2月前
|
关系型数据库 MySQL Docker
【Docker】4、Docker 数据卷
【Docker】4、Docker 数据卷
33 0
|
4月前
|
关系型数据库 MySQL 数据库
百度搜索:蓝易云【【Docker】Docker部署Mysql并设置数据持久化教程】
通过以上步骤,您已经成功地在Docker中部署了MySQL,并设置了数据持久化,确保数据在容器重新启动或迁移时得以保留。
51 0
|
5月前
|
数据管理 数据库 数据安全/隐私保护
数据管理与持久化:深度解析Docker数据卷
Docker 数据卷在容器化应用中扮演着关键角色,它们提供了一种灵活且可持久化的方式来处理应用数据。本文将深入讨论 Docker 数据卷的基本概念、使用方法以及一系列高级应用场景,通过更为丰富和实际的示例代码,帮助大家全面掌握数据卷的使用和管理。
|
5月前
|
Shell Linux Docker
Docker -v 挂载主机目录到容器中(及数据卷容器)
Docker -v 挂载主机目录到容器中(及数据卷容器)
94 0
|
6天前
|
存储 运维 Docker
Docker从入门到精通:Docker 容器数据卷详解
Docker 数据卷是持久化容器数据的关键机制,允许跨容器或主机共享,即使容器删除数据仍保留。创建数据卷可通过命令行或容器启动时指定,挂载到容器目录以读写。使用 `docker volume` 命令可管理数据卷,适用于持久化存储、数据共享及备份场景。了解和善用数据卷能优化 Docker 应用程序的运维。
17 0
|
22天前
|
关系型数据库 MySQL 应用服务中间件
docker镜像、容器数据卷
docker镜像、容器数据卷
|
2月前
|
Devops 开发工具 数据安全/隐私保护
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
63 0
|
2月前
|
数据管理 应用服务中间件 nginx
Docker卷和数据管理
Docker卷和数据管理
17 1
|
3月前
|
存储 机器学习/深度学习 Cloud Native
深入浅出Docker容器数据卷
深入浅出Docker容器数据卷
41 1
|
4月前
|
消息中间件 Kubernetes NoSQL