之前我们介绍了Docker的基本概念(前面的没翻译...),了解了如何使用Docker镜像进行工作,并且学习了网
络和容器之间的链接.这一节我们将讨论如何管理容器中及容器之间的数据.

我们将查看下面两种管理Docker中数据的主要方法.

  • 数据卷
  • 数据卷容器

数据卷

一个数据卷就是经过特殊设计的,在一个或多个容器中通过UFS文件系统提供的一些特性
实现数据持久化或共享.

  • 数据卷可以在容器之间共享和重复利用
  • 可以对数据卷里的内容直接进行修改
  • 对镜像的更新不会改变数据卷的内容
  • 卷会一直持续到没有容器使用他们

添加一个数据卷

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


$ sudo docker run -d -P --name web -v /webapp training/webapp python app.py

这将会在容器中创建一个/webapp卷

提示: 你也可以在Dockerfile中使用VOLUME指令来给任何从那个镜像创建的容器添加
一个或多个新数据卷

挂载宿主文件夹到数据卷

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


$ sudo docker -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

这样会把本地文件夹/src/webapp挂在到容器中的/opt/webapp目录.对于测试来说这是
非常有用的.例如我们可以把源码挂载到容器中并通过修改源码查看应用运行情况.在
宿主机上的文件夹必须是绝对路径,而且当文件夹不存在时会自动创建.

提示:出于可移植性和共享的木的挂载宿主文件的功能在Dockerfile中无法使用.就宿
文件而言,宿主依赖可能事容器无法在所有的主机上正常工作.

默认情况下Docker以读写权限挂载数据卷,但是我们也可以以只读方式进行挂载.


$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py

这里我们挂载了和上面相同的一个目录 /src/webapp.但是我们添加了 ro 选项来制定
挂载时文件权限应该是只读的.

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

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

我们来创建一个带有卷的命名容器来共享数据.


$ sudo docker run -d -v /dbdata --name dbdata training/postgres

你可以在另外一个容器中使用 --volumes-from 标记来挂在/dbdata卷


$ sudo docker run -d --volumes-from dbdata --name db1 training/postgres

然后是另外一个容器同时也挂载/dbdata卷:


$ sudo docker run -d --volumes-from dbdata --name db2 training/postgres

你可以使用多个 --volumes-from 参数来把多个容器中的多个数据卷放到一起.

你也可以挂载通过挂载dbdata容器实现的容器db1和db2来扩展关系链


$ sudo docker run -d --name db3 --volumes-from db1 training/postgres

备份,恢复和迁移数据

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


$ sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

这里我们创建并登录了一个新容器,挂载了dbdata容器中的数据卷.并把一个本地目录挂
载到了/backup下.最后我们传入了一条tar命令来备份dbdata卷到/backup下.当命令执
行完成后容器就会停止运行,并保留一个dbdata的备.

然后你就可以恢复数据到同一个或者另外创建的容器中.创建一个新的容器:


$ sudo docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

然后解压备份文件到新容器的数据卷中:


$ sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

你可以使用上面的技术及你喜欢的工具进行自动数据备份,迁移和恢复.

[docker] 管理docker容器中的数据的更多相关文章

  1. Windows10下的docker安装与入门 (二)使用docker引擎在容器中运行镜像

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

  2. 利用copy函数简单快速输出/保存vector向量容器中的数据

    如果要输出vector中的数据我们可以通过循环语句输出,更加简便的方法是利用copy函数直接输出,例子: #include "stdafx.h" #include <iost ...

  3. ca12a_c++顺序容器的操作5_访问容器中的数据元素

    ca12a_c++顺序容器的操作5_访问容器中的数据元素访问元素:c.back()..显示最后一个数据c.front() ..显示第一个数据c[n],n就是下标,适合vector与dequec.at( ...

  4. Docker备份Gitlab容器以及还原数据

    概述 今天,我们将学习如何快速地对docker容器进行快捷备份.恢复和迁移.Docker是一个开源平台,用于自动化部署应用,以通过快捷的途径在称之为容器的轻量级软件层下打包.发布和运行这些应用.它使得 ...

  5. docker~在centos容器中安装新程序

    上一篇我们使用了阿里加速器安装了centos镜像,然后创建了一个新容器,运行了这个镜像,这一讲我们来为这个镜像添加一些应用程序,然后再保存容器,push容器到仓储,大家就可以直接pull我生产的容器了 ...

  6. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/index.html Zookeeper 分布式服务框架是 Apa ...

  7. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据(转载)

    本文转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Had ...

  8. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据--转载

    原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Hadoop ...

  9. 【Zookeeper】分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理 ...

随机推荐

  1. 推荐几款很棒的 JavaScript 表单美化和验证插件

    表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让开发者花费了大量的时间和精力去处理,以期实现好用又漂亮的表单功能 ...

  2. 本学期3个sprint的团队贡献分

    第一次冲刺贡献分 组员 贡献分 103马嘉诚 28 143李新佳 22 145马文其 19 120韩智豪 16 147黄鸿浩 15 第二次冲刺贡献分 组员 贡献分 103马嘉诚 23 143李新佳 2 ...

  3. 《构建之法》第8、9、10章的读后感和第一个sprint总结

    第八章——主要介绍软件需求. 主要步骤:1.获取和引导需求.2.分析和定义需求.3.验证需求.4.在软件产品的生命周期中管理需求. 对软件需求的划分:1.对产品功能性的需求.2.对产品开发过程的需求. ...

  4. Sprint 3计划

    一.计划目标: 1.完成基本的首页面的信息查询功能 2.学生家教用户注册和登录,将信息存储到数据库 3.完成家教的资格评定设定和个人教学内容备份信息 二.燃尽图 三.项目具体工作细则 待明天工作会议分 ...

  5. springMVC中Dispatcher中的/和/*的区别

    1. 首先 / 这个是表示默认的路径,及表示:当没有找到可以匹配的URL就用这个URL去匹配.2. 在springmvc中可以配置多个DispatcherServlet,比如: 配置多个Dispatc ...

  6. C#设计模式——代理模式(Proxy Pattern)

    一.概述在软件开发中,有些对象由于创建成本高.访问时需要与其它进程交互等原因,直接访问会造成系统速度慢.复杂度增大等问题.这时可以使用代理模式,给系统增加一层间接层,通过间接层访问对象,从而达到隐藏系 ...

  7. 重新想象 Windows 8 Store Apps (59) - 锁屏

    [源码下载] 重新想象 Windows 8 Store Apps (59) - 锁屏 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 锁屏 登录锁屏,获取当前程序的锁 ...

  8. 重新想象 Windows 8.1 Store Apps (72) - 新增控件: AppBar, CommandBar

    [源码下载] 重新想象 Windows 8.1 Store Apps (72) - 新增控件: AppBar, CommandBar 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...

  9. 互联网产品团队中Web前端工程师的重要性

    国内外各大互联网公司,都有UEx/d|UCD|CDC(Customer Research & User Experience Design Center)团队. 在很多公司会认为,合格的产品经 ...

  10. 利用PBfunc在Powerbuilder中使用https获取微信的AccessToken

    在前篇中讲解了使用PBFunc在Powerbuilder自己进行http的GET和POST操作. 本篇简单用代码演示下https的微信AccessToken的获取: n_pbfunc_http lnv ...