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

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

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

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

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

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

一、数据卷的基本概念

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

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

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

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

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

[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”选项来制定挂载时文件权限应该是只读的。

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

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

    [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 标记来创建一个挂载了要备份数据卷的容器:

    [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
  • 你可以使用上面的技术及你喜欢的工具进行自动数据备份,迁移和恢复。

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

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2015-12-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程坑太多

『中级篇』docker-swarm中的Service创建维护和水平扩展(45)

PS:docker service 内部有很多复杂的操作,虽然各位老铁用了简单的 一个创建一个删除,但是底层里面会知道有多个容器,在那个机器上边,这些机器里面...

10230
来自专栏A周立SpringCloud

Docker系列教程21-Docker Compose快速入门

18730
来自专栏ASP.NETCore

dock基本使用

要安装最新的 Docker 版本,首先需要安装 apt-transport-https 支持,之后通过添加源来安装。要安装最新的 Docker 版本,首先需要安...

24540
来自专栏张戈的专栏

Docker新手入门实战教程

摘 要 本文从新手视角记录了一个实际的Dokcer应用场景从创建、上传直到部署的详细过程,并简单的介绍了腾讯云容器服务的使用方法。通过Docker快速拉起一个...

1.5K80
来自专栏未闻Code

使用Docker Swarm搭建分布式爬虫集群

在爬虫开发过程中,你肯定遇到过需要把爬虫部署在多个服务器上面的情况。此时你是怎么操作的呢?逐一SSH登录每个服务器,使用git拉下代码,然后运行?代码修改了,于...

29150
来自专栏从零学习云计算

openshift/origin学习记录(10)——基于已有镜像部署应用

本部分记录如何基于已有的镜像部署应用。参考的博客为《OpenShift_034:部署 mywebsql docker image 访问 mysql 数据库》(...

38000
来自专栏mwangblog

Linux中的xargs

12130
来自专栏有困难要上,没有困难创造困难也要上!

Docker 远程管理

35670
来自专栏互联网开发者交流社区

操作系统IIS安装

20030
来自专栏编程坑太多

跟我一起学docker(五)--仓库

19740

扫码关注云+社区

领取腾讯云代金券