详解docker数据管理

在docker的使用过程中,势必需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及到容器的数据管理:

数据的管理目前提供如下两种方式:

(1)数据卷 data volumes

(2)数据卷容器 data volumes containers

数据卷

数据卷,说白了就是一个特殊目录,类似linux下对目录或文件进行mount挂载操作,只不过他绕过了文件系统。具有如下特点:

(1)数据卷可以在容器之间进行共享和重用

(2)对数据卷的更改会立即生效

(3)对数据卷的更新不会影响到镜像 (镜像只读)

(4)卷会一直存在,直到没有容器使用

数据卷的添加可以通过-v 参数来设定,后边跟上目录。一下举例说明:

创建一个数据卷/homedata到容器os123中

[root@docker5 home]# docker  run  -d -ti --name os123   -v  /homedata  centos
[root@docker5 home]# docker  exex  -ti os123 /bin/bash
[root@d1a05a7d5efe /]# ll
total 40
-rw-r--r--. 1 root root 18301 Jun 2 13:27 anaconda-post.log
lrwxrwxrwx. 1 root root 7 Jun 2 13:25 bin > usr/bin
drwxr-xr-x. 5 root root 380 Jun 23 02:42 dev
drwxr-xr-x. 48 root root 4096 Jun 23 02:42 etc
drwxr-xr-x. 2 root root 6 Aug 12 2015 home
drwxr-xr-x. 2 root root 6 Jun 23 02:42 homedata
..
[root@d1a05a7d5efe /]# cd homedata/
[root@d1a05a7d5efe homedata]# ll
total 0
[root@d1a05a7d5efe homedata]# touch  21yunwei.txt ;echo 123>> 21yunwei.txt
[root@d1a05a7d5efe homedata]# cat  21yunwei.txt
123

挂载本地服务器上的一个目录/home/data到容器os456 目录/homedata中

home/data事先里边建立一个文件1.txt并内容hello world

[root@docker5 home]# docker run  -d -ti --name os456 -v /home/data:/homedata centos
[root@docker5 home]# docker exec  -ti os456  /bin/bash
[root@9347d5ef84ff homedata]# cd /homedata;cat  1.txt
hello world

通过上边两个容器os123 和os456,基本了解了如何创建数据卷以及如何挂载本地目录到数据卷中。注意,两个容器中的如果是单独挂载的数据卷(即没有挂载同一个数据卷容器),那么数据是互不影响的,进入不同的数据卷相同目录下比如/homedata,内容可以不一样。

注意:删除容器的时候,数据卷不会删除。如果要删除容器的时候同时删除数据卷,需加上-v参数。比如: docker rm os456 -v /homedata

数据卷容器

建立的容器很多时候不是单一的,需要容器之间进行数据共享,进行数据同步和更新操作。这样就需要建立一个数据卷容器。

数据卷容器就是一个普通的容器,里边带有设置好的数据卷,专门提供给其他容器挂载使用。 通过–volumes-from 数据卷容器名 来实现。

我有一个网站程序放到了服务器本机的/home/webdata目录 ,下边创建一个数据卷容器webdata,同时将我服务器上的/home/webdata挂载到数据卷容器的/web目录:

[root@docker5 home]# docker  run  -d  -ti  --name webdata   -v  /home/webdata:/home/web  centos

进入容器并查看数据

[root@docker5 home]# docker exec  -ti  webdata  /bin/bash
[root@289598d6e24d /]# cd  /home/web/
[root@289598d6e24d web]# ll
total 7872
drwxr-xr-x. 3 root root      54 Mar 27  2013 META-INF
drwxr-xr-x. 6 root root    4096 Dec 25  2014 WEB-INF
drwxr-xr-x. 3 root root      63 Mar 27  2013 css
drwxr-xr-x. 2 root root    8192 Mar 27  2013 flags
-rw-r--r--. 1 root root      97 Mar 27  2013 index.jsp
drwxr-xr-x. 2 root root    4096 Mar 27  2013 js
drwxr-xr-x. 2 root root       6 Jun 23 03:43 probe

通过这里建立1.txt 并插入内容,可以看到服务器上的/home/webdata数据是同步的。可见容器以及目录挂载都没问题。

[root@docker5 home]# docker  run  -dti --volumes-from webdata --name os147 centos
[root@docker5 home]# docker  run  -dti --volumes-from webdata --name os258 centos

分别创建了两个容器,都通过–volumes-from webdata 挂载了同一个数据卷容器,进入os147 和os258 分别查看/home/web可见数据都是存在的,于是这里就实现了数据的共享同步。

[root@docker5 home]# docker exec  -ti  os147  /bin/bash
[root@b4cfa4c4e11c /]# cd  /home/web/
[root@b4cfa4c4e11c web]# ll
total 7876
-rw-r--r--. 1 root root      11 Jun 23 03:46 1.txt
drwxr-xr-x. 3 root root      54 Mar 27  2013 META-INF
drwxr-xr-x. 6 root root    4096 Dec 25  2014 WEB-INF
drwxr-xr-x. 3 root root      63 Mar 27  2013 css
drwxr-xr-x. 2 root root    8192 Mar 27  2013 flags
-rw-r--r--. 1 root root      97 Mar 27  2013 index.jsp
drwxr-xr-x. 2 root root    4096 Mar 27  2013 js
drwxr-xr-x. 2 root root       6 Jun 23 03:43 probe

说明:

1,可以多次使用–volume-from参数从多个容器挂载多个目录。 也可以从其他已经挂载了数据卷的容器来挂载数据卷(类似传递)。

2,再次强调:如果删除了挂载的容器,数据卷不会被自动删除。如果要删除容器的时候同时删除数据卷,需加上-v参数。

通过数据卷容器进行数据备份、数据恢复和数据迁移

备份

我们创建一个专门用来备份probe的容器:probebak进行备份数据卷容器中的数据,命令如下

 docker run  -dti --volumes-from webdata  --name probebak -v /home/web_probebak:/backup   centos tar zcvf /backup/web_probe.tar.gz  /home/web

命令为创建一个专用备份的容器probebak,挂载了数据卷容器webdata,同时将服务器本地目录 /home/web_probebak挂载到了备份容器上的/backup目录容器启动以后,会执行tar zcvf /backup/web_proce.tar.gz /home/web操作,完成服务器上/home/web备份,打包到/backup/web_proce.tar.gz,也就是打包到了/home/web_probebak/web_probe.tar.gz 实现了数据备份。

恢复

创建一个容器os999 ,挂载有数据卷 /testdata

[root@docker5 home]# docker run  -v  /testdata --name os999  centos  /bin/bash

再建一个容器,通过–volumes-from os999挂载刚才设置好的数据卷,解压数据:

[root@docker5 home]# docker run --volumes-from os999 -v /home/web_probebak:/backup busybox tar zxvf /backup/web_probe.tar.gz
Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
home/web/
home/web/probe.zip
home/web/probe/
home/web/css/
home/web/css/classic/
home/web/css/classic/datasourcetest.css

原创文章,作者:晴川运维,如若转载,请注明出处:https://baike.qcidc.com/15205.html

(0)
晴川运维晴川运维
上一篇 2025年10月10日
下一篇 2025年10月10日

相关推荐

  • 在磁盘中查看MySQL 表大小

    我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 这个看似简单的问题实际上…

    Linux系统 2025年9月23日
  • 查看MongoDB版本信息具体方法

    本篇文章重点为大家讲解一下查看MongoDB版本信息具体方法,有需要的小伙伴可以参考一下。 1:连接到MongoDB,使用命令查看。 > db.version();…

    Linux系统 2025年10月7日
  • 数据中心备用电源系统助解决停机问题

    由于现在企业必须提供更高水平的正常运行时间,企业都开始关注数据中心备用电源。备用电源也越来越先进,管理员可以使用多种系统类型和行业标准来确保无故障运行。 根据研究机构Researc…

    Linux系统 2025年6月9日
  • Java随机数的坑你踩过吗

    随机数我们应该不陌生,业务中我们用它来生成验证码,或者对重复性要求不高的id,甚至我们还用它在年会上搞抽奖。今天我们来探讨一下这个东西。如果使用不当会引发一系列问题。 随机数我们应…

    Linux系统 2025年10月5日
  • Linux下部署RAID5具体方法

    RAID 5 是一种存储性能、数据安全和存储成本兼顾的存储解决方案。 RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程…

    Linux系统 2025年6月9日
  • 通过mergefs增加虚拟存储

    如果您有多个磁盘或分区要用于一个媒体项目,而又不想丢失任何现有数据,但又想将所有文件都放置或安装在一个驱动器下,该怎么办?这时mergefs可以助您一臂之力!mergefs是一个联…

    Linux系统 2025年6月8日
  • Linux Mint 安装 Linux Kernel 4.12

    Linus Torvalds 发布了 Linux 内核 4.12。你可以从这里直接下载相关的 deb 包来安装。或者,继续阅读本文,按下面的步骤安装新内核。 警告:Linux 内核…

    Linux系统 2025年6月17日
  • 通过PySnooper调试python代码

    PySnooper是一款适合菜鸟用的代码调试工具。 如果Python代码哪儿输出不对劲了,之前一般都是利用print函数结合pdb.setTrace()来找问题,如果使用pysno…

    Linux系统 2025年6月8日
  • lnav:Linux 下一个基于控制台的高级日志文件查看器

    服务器日志是一个由服务器创建并经常更新、用于抓取特定服务和应用的所有活动信息的日志文件。当你的应用或者服务出现问题时这个文件就会非常有用。从日志文件中你可以获取所有关于该问题的信息…

    Linux系统 2025年6月8日
  • w10中安装Linux Mint具体方法

    Linux Mint(以下简称Mint)是一种Linux发行版,类似于我们常见的Ubuntu或者Debian。它是在基于Debian和Ubuntu的基础上再进行开发,因此,它的发布…

    Linux系统 2025年6月8日

发表回复

登录后才能评论