前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker容器技术系列六:docker容器的数据管理

docker容器技术系列六:docker容器的数据管理

作者头像
小小科
发布2018-05-04 10:56:04
8010
发布2018-05-04 10:56:04
举报
文章被收录于专栏:北京马哥教育北京马哥教育

刚接触docker时总在思考两个问题:

  • 1、docker容器如何实现将数据持久化呢?比如一个httpd容器中用户上传的文件或者访问日志等!
  • 2、如何实现便捷的更新容器中的文件呢? 比如需要快捷的更新容器中的程序,总不能每次更新都build一次镜像吧!

那下面我们就来聊聊docker容器的数据管理:数据卷

docker提供了两种方式实现数据管理:

  • 1、映射宿主机目录或文件
  • 2、通过创建一个专用的数据卷容器与相关容器间共享数据并实现持久化

一、数据卷的基本概念

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

代码语言:javascript
复制
数据卷可以在容器之间共享和重用
对数据卷的修改会立马生效
对数据卷的更新,不会影响镜像
卷会一直存在,直到没有容器使用
  • *提示:数据卷的使用,类似于 Linux 下对目录或文件进行 mount。

可以使用带有 -v 参数的 docker run 命令给容器添加一个数据卷.在一个 docker run 中可以多次使用 -v 参数来达到挂载多个数据卷的目的.我们现在在web应用容器中挂载单个卷。

二、挂载宿主文件夹到数据卷

使用 -v 参数也可以挂载宿主的文件夹到容器里

代码语言:javascript
复制
[root@node01 httpd]# docker run -d -v /data/www:/var/www/html -p 80:80 httpd-php
  • 这样会把本地文件夹/src/webapp挂在到容器中的/opt/webapp目录.对于测试来说这是非常有用的.例如我们可以把源码挂载到容器中并通过修改源码查看应用运行情况.在宿主机上的文件夹必须是绝对路径,而且当文件夹不存在时会自动创建。

查看挂载效果如下:

  • *注意:出于可移植性和共享的木的挂载宿主文件的功能在Dockerfile中无法使用.就宿主文件而言,宿主依赖可能事容器无法在所有的主机上正常工作.
  • 默认情况下Docker以读写权限挂载数据卷,但是我们也可以以只读方式进行挂载,如下: [root@node01 httpd]# docker run -d -v /data/www:/var/www/html:ro -p 80:80 httpd-php
  • 这里我们挂载了和上面相同的一个目录/data/www。但是我们添加了“ro”选项来制定挂载时文件权限应该是只读的。

三、创建和挂在一个数据卷容器

如果你有一些持久数据需要在容器之间共享或想要使用非持久性容器,最好的方式是创建一个命名数据卷容器,然后从数据卷容器中挂载数据. 我们来创建一个带有卷的命名容器来共享数据.

代码语言:javascript
复制
    [root@node01 ~]# docker run -d -p 4444:22 -v /data --name data centos:sshd
  • 你可以在另外一个容器中使用 —volumes-from 标记来挂在/dbdata卷 [root@node01 ~]# docker run -d -p 5555:22 --volumes-from data --name test centos:sshd
  • 此时我们通过ssh进入两个容器中,我们通过在数据卷容器“data”的挂载点/data下创建一个文件,可以实时共享给其他使用该数据卷的容器,如test容器,见下面截图:

四、数据卷的备份,恢复和迁移数据

另外一个有用的功能是使用它们来进行备份,恢复或迁移数据。如下所示,我们使用—volumes-from 标记来创建一个挂载了要备份数据卷的容器:

代码语言:javascript
复制
    [root@node01 ~]# docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
  • 这里我们创建并登录了一个新容器,挂载了dbdata容器中的数据卷,并把一个本地目录挂载到了/backup下,最后我们传入了一条tar命令来备份dbdata卷到/backup下。当命令执行完成后容器就会停止运行,并保留一个dbdata的备。
  • 然后你就可以恢复数据到同一个或者另外创建的容器中。如下创建一个新的容器: [root@node01 ~]# docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
  • 然后解压备份文件到新容器的数据卷中: [root@node01 ~]# docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
  • 你可以使用上面的技术及你喜欢的工具进行自动数据备份,迁移和恢复。

数据卷很好的实现了容器中数据的持久化问题,在实际使用中,可以将日志、应用数据等放入数据卷中。后面也有专门的文章介绍容器日志的管理办法。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 马哥Linux运维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 刚接触docker时总在思考两个问题:
  • docker提供了两种方式实现数据管理:
    • 一、数据卷的基本概念
      • 二、挂载宿主文件夹到数据卷
        • 三、创建和挂在一个数据卷容器
          • 四、数据卷的备份,恢复和迁移数据
          相关产品与服务
          容器镜像服务
          容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档