docker专题(五)-- docker数据卷

9.1 容器中管理数据的主要两种方式

  • 数据卷(Data Volumes): 容器内数据直接映射到本地主机环境;如何在容器内创建数据卷,并且把本地的目录或文件挂载到容器内的数据卷中。

  • 数据卷容器(Data Volume Containers):使用特定容器维护数据卷。如何使用数据卷容器在容器和主机、容器和容器之间共享数据,并实现数据的备份和恢复。

9.1.1 数据卷

数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录

直接映射进容器,类似于Linux中的mount操作。

  • 数据卷可以提供很多有用的特性,如下所示:

  1. 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效方便;

  2. 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;

  3. 对数据卷的更新不会影响镜像,解耦了应用和数据;

  4. 卷会一直存在,直到没有容器使用,可以安全地卸载它

  • Demo示例:

在主机和容器之间创建数据卷,实现数据共享(共享目录)

docker run -it -v /root/mydatavolume:/root/container/mydatavolume centos /bin/bash

-v 指定数据卷的目录

默认:挂载的数据卷默认权限是读写(RW),也可以通过指定ro参数标识为只读

docker run -it -v /root/mydatavolume:/root/container/mydatavolume:ro centos /bin/bash

9.1.2 数据卷容器

如果用户需要在多个容器之间共享一些持续更新的数据,最简单 的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的 目的是专门用来提供数据卷供其他容器挂载。

  1. 创建一个数据卷容器dbdatacontainer,在这个容器中创建一个数据卷挂载: /dbdata

docker run -it -v /dbdata --name dbdatacontainer centos
  1. 可以在其他的容器中使用 --volumes-from来挂载dbdatacontainer容器中的数据卷

docker run -it --volumes-from dbdatacontainer --name db1 centos
docker run -it --volumes-from dbdatacontainer --name db2 centos

9.2 Docker数据卷类型

1.基于主机文件系统的数据卷由Docker主机进行管理,在文件系统中(/var/lib/docker/volumes)创建出来的文件夹用于存放数据卷,建议采用此方法进行持久化数据。非Docker进程不应修改文件系统这个文件夹。

2.基于绑定挂载的数据卷可以存储在网络存储等任何位置,Docker主机或Docker容器上的非Docker进程可以随时修改其中的内容。

3.基于主机内存的数据卷仅存储在主机系统的内存中,永远不会写入主机系统的文件系统。它可以在容器的生命周期中由容器使用,一般用于存储非持久状态或敏感信息。

9.3 基于主机文件系统的数据卷

9.3.1 创建数据卷

docker volume create <Volume>

9.3.2 查看数据卷

docker volume ls

9.3.3 挂载数据卷

docker run -v <Volume>:<ContainerFileSystemPath>:<Mode> <Image>

9.3.4 删除数据卷

docker volume rm <Volume>

9.3.5 查看数据卷详情

docker volume inspect <Volume>

9.4 基于绑定挂载的数据卷

9.4.1 创建绑定挂载至本地文件系统 --mount模式

docker run -it --mount type=bind,source=<src>, target=<dst> <image>
# 查看一下挂载的情况
docker inspect <container>

9.4.2 创建绑定挂载至本地文件模式 -v模式

docker run -v <HostFileSystemPath>:<ContainnerFileSystemPath>:<Mode> <Image>

这个直接把主机的文件挂载docker容器中, -v 挂载本地文件系统路径如果不存在该路径则会进行创建,但如果使用 --mount 挂载本地文件系统路径时如果路径不存在则会产生报错。但两者所执行后的效果是一样的。

9.5 基于主机内容的挂载

9.5.1 内存挂载卷 --mount模式

创建容器并使用内存挂载卷 --mount模式

docker run -it --mount type=tmpfs,dst=<Path> <Image>

9.5.2 内存挂载卷 --tmpfs模式

创建容器并使用内存挂载卷 --tmpfs模式

docker run -it --tmpfs <Path> <Image>

9.6 利用数据卷容器来迁移

9.6.1备份

首先利用centos镜像创建了一个容器worker。

使用--volumes-from dbdata 参数来让worker容器挂载dbdata容器的数据卷(即dbdata数据卷),

使用-v $(pwd):/backup参数来挂载本地的当前目录到worker容器的/backup目录。

worker容器启动后,使用了tar cvf /backup/backup.tar /dbdata命令来将 /dbdata下内容备份为容器内的/backup/backup.tar,即宿主主机当前目录 下的backup.tar。

docker run --volumes-from dbdatacontainer -v $(pwd):/backup --name myworker centos tar cvf /backup/backup.tar /dbdata

9.6.2 恢复

如果要将数据恢复到一个容器,可以按照下面的步骤操作。

  1. 首先创建一个带有数据卷的容器dbdata2:

docker run -it -v /dbdata --name dbdatacontainer2 centos
  1. 然后创建另一个新的容器,挂载dbdata2的容器,并使用untar解压备份文 件到所挂载的容器卷中:

docker run -it --volumes-from dbdatacontainer2 -v $(pwd):/backup --name worker2 centos /bin/bash
cd /dbdata
tar xvf /backup/backup.tar
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值