Docker数据卷之数据持久化与备份-Volume Container


在这里插入图片描述

简介

在使用docker 运行容器的时候,我们通常会保存一些静态文件是数据,如网站的静态文件、应用的配置文件等,这些数据需要持久化的存储,否则会影响我们正在运行的应用或站点页面,为了提高数据的持久化安全性,我们可以利用Docker 不会删除被其他容器使用和挂载的数据卷以及其中的数据,因此,通过创建数据卷容器在容器间存储与共享文件数据。

数据卷容器在其他容器与数据卷之间起到一个的作用,因此,数据卷容器并不需要保证其必须运行。

一、数据卷容器

1. 数据卷容器在容器与数据卷之间的关系,如下所示

在这里插入图片描述

2. 创建数据卷容器

创建数据卷容器时,需要使用 -v 参数来建立数据卷容器所使用的数据卷。

[root@localhost ~]# docker create --name data -v /html nginx

注:

  1. 使用数据卷容器时无须保证数据卷容器处于运行状态;同时不运行数据卷容器,可以减少对宿主机性能的影响。
  2. 同一个数据卷容器中,可以使用多个数据卷,不过为了更为准确的管理数据卷,建议使用不同的数据卷容器来关联不同的数据卷,或者对数据卷进行分类存放于不同的数据卷容器中。

3. 连接数据卷容器

通过 --volumes-from 参数挂载数据卷容器关联的数据卷。数据卷的挂载点,会使用创建数据卷容器时指定的数据卷挂载目录。

[root@localhost ~]# docker run -t -d -p 80:80 --volumes-from data --name webser nginx

注:

  1. 多个容器同时使用了相同的数据卷容器所提供的数据卷时,它们所挂载目录中的文件是相同的。
  2. 在任意一个容器中对挂载目录中的文件进行操作,都会影响其他挂载的容器中挂载文件。
  3. 利用挂载相同数据卷容器所提供的数据卷,可以实现多个容器间对相同文件的即时访问和操作,进而达到容器间共享文件数据的目的。
  4. 需要注意,在对数据卷容器提供的数据卷操作时(删除),需要谨慎,操作结果会影响所有使用的容器。

二、数据卷容器备份(数据卷的迁移)

1. 数据卷的导出(备份)

数据的备份或导出是保证数据安全最简单的方式,因此在对Docekr 使用过程中自然也就离不开对数据卷的导出或备份工作。

因为数据卷导出或备份,并不是通过Docker 自身提供的方法实现,而是利用Tar 存档管理工具来实现。而需要导出的数据卷又不是直接与宿主机目录形式挂载,因此,要让数据卷的数据被tar命令访问到,必须要先进入容器中,在容器中通过tar 命令将数据卷目录归档,然后将归档文件保存到容器外,因此,我们需要额外挂载一个容器外的目录,用来存放归档好的数据。

我们利用数据卷容器的数据卷可以被多个容器共享使用(挂载),因此我们可以通过新创建容器挂载宿主机目录,用于导出共享数据卷需要导出的数据,这样就很容易的实现数据的导出或备份,具体过程如下图所示:
在这里插入图片描述

1.1 创建新的容器(桥梁)

用于连接到持有需要导出数据卷的数据卷容器,容器创建和运行后,就可以进入容器执行打包命令,将导出数据放到挂载了宿主机目录的位置。

[root@localhost ~]# docker run -it --volumes-from date -v $(pwd):/bakup --name export --rm nginx bash

1.2 进入容器对需要导出的数据进行归档

[root@localhost bakup]# docker run -it --volumes-from date -v $(pwd):/bakup --name export --rm nginx bash
root@43ca716c1f4f:/# tar -cvf /bakup/data.tar /html/
tar: Removing leading `/' from member names
/html/
/html/test/
/html/1.txt
/html/2.txt
/html/3.txt
/html/4.txt
/html/5.txt
/html/6.txt
/html/7.txt
/html/8.txt
/html/9.txt
root@43ca716c1f4f:/# exit

或是直接将tar 命令作为运行时的命令:

[root@localhost bakup]# docker run -it --volumes-from date -v $(pwd):/bakup --name export --rm nginx tar -cf /bakup/data.tar /html/

注 : --rm 参数:容器停止后自动删除。

2. 数据卷的导入(恢复)

数据导入(恢复导出的数据),其实只要把导出的过程逆向执行一遍即可。

2.1 创建一个新的容器(桥梁)

新创建的容器,挂载上宿主机中存放导出数据的目录,并连接到包含共享数据卷的数据卷容器上。

[root@localhost bakup]# docker run -it --volumes-from date -v $(pwd):/bakup --name importer --rm nginx bash

2.2 运行并进入容器,并在容器中对需要恢复的数据进行解包,把导出的数据恢复到目标数据卷指定的位置。

root@5b897788f3a3:/# cd /bakup/
root@5b897788f3a3:/bakup# ls
data.tar  html
root@5b897788f3a3:/bakup# tar xf data.tar -C /
root@5b897788f3a3:/bakup# ls /html/
1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt  html  test
root@5b897788f3a3:/bakup# exit

Docker 数据卷的备份与恢复的过程如上,欢迎相互讨论与交流。

原创文章 64 获赞 27 访问量 9万+

猜你喜欢

转载自blog.csdn.net/AMimiDou_212/article/details/106099192
今日推荐