Docker数据管理-数据卷 data volumes和数据卷容器data volumes containers的使用详解

使用docker过程中,我们需要查看容器中产生的数据,以及容器与容器之间、容器与主机之前进行数据共享、备份等操作,这里就需要到容器的数据管理。 数据的管理目前提供如下两种方式:
#数据卷 data volumes
#数据卷容器 data volumes containers

一,数据卷
数据卷,说白了就是一个特殊目录,类似linux下对目录或文件进行mount挂载操作,只不过他绕过了文件系统。具有如下特点:
1 数据卷可以在容器之间进行共享和重用
2)对数据卷的更改会立即生效
3)对数据卷的更新不会影响到镜像  (镜像只读)
4)卷会一直存在,知道没有容器使用

数据卷的添加可以通过-v 参数来设定,后边跟上目录。一下举例说明:
1,创建一个数据卷/homedata到容器os123中:

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

 

说明:创建一个不存在的数据卷,容器运行以后会自动创建并挂载进去。如果数据卷里边有新增文件,实际文件还是保存到了宿主机中,默认放到了/var/lib/docker/volumes/中。如果是挂载宿主机已知的目录,则产生的文件或目录就直接放到宿主机的挂载目录。

2,挂载本地服务器上的一个目录/home/data宿主机的目录需是绝对路径)到容器os456 目录/homedata中:
home/data事先里边建立一个文件1.txt并内容hello world

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

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

注意:
1)删除容器的时候,数据卷不会删除。如果要删除容器的时候同时删除数据卷,需加上-v参数。比如: docker   rm  os456  -v   /homedata
2)默认数据卷挂载以后文件的权限为rw,如需单独设置,可以容器数据卷后边设置:ro只读。

二,数据卷容器
建立的容器很多时候不是单一的,需要容器之间进行数据共享,进行数据同步和更新操作。这样就需要建立一个数据卷容器。
数据卷容器就是一个普通的容器,里边带有设置好的数据卷,专门提供给其他容器挂载使用。 通过–volumes-from 数据卷容器名 来实现。
我有一个网站程序放到了服务器本机的/home/webdata目录 ,下边创建一个数据卷容器webdata,同时将我服务器上的/home/webdata挂载到数据卷容器的/web目录:

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

进入容器并查看数据

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

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

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

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

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

说明:
1,可以多次使用–volumes-from参数从多个容器挂载多个目录。  也可以从其他已经挂载了数据卷的容器来挂载数据卷(类似传递)。
2,如果删除了挂载的容器,数据卷不会被自动删除。如果要删除容器的时候同时删除数据卷,需加上-v参数。
3,使用–volumes-from参数所挂载的数据卷容器本身并不需要保持运行状态,依旧可以挂载

 

三,通过数据卷容器进行数据备份、数据恢复和数据迁移
1,备份:我们创建一个专门用来备份probe的容器:probebak   进行备份数据卷容器中的数据,命令如下

  1. 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 实现了数据备份。

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

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

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

  1. [root@docker5 home]# docker run --volumes-from os999 -v /home/web_probebak:/backup busybox tar zxvf /backup/web_probe.tar.gz
  2. 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.
  3. home/web/
  4. home/web/probe.zip
  5. home/web/probe/
  6. home/web/css/
  7. home/web/css/classic/
  8. home/web/css/classic/datasourcetest.css
  9. ..

转载请注明:21运维 » Docker数据管理-数据卷 data volumes和数据卷容器data volumes containers的使用详解

 

猜你喜欢

转载自blog.csdn.net/qq_39626154/article/details/82884490