[docker] 管理docker容器中的数据
之前我们介绍了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容器中的数据的更多相关文章
- Windows10下的docker安装与入门 (二)使用docker引擎在容器中运行镜像
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- 利用copy函数简单快速输出/保存vector向量容器中的数据
如果要输出vector中的数据我们可以通过循环语句输出,更加简便的方法是利用copy函数直接输出,例子: #include "stdafx.h" #include <iost ...
- ca12a_c++顺序容器的操作5_访问容器中的数据元素
ca12a_c++顺序容器的操作5_访问容器中的数据元素访问元素:c.back()..显示最后一个数据c.front() ..显示第一个数据c[n],n就是下标,适合vector与dequec.at( ...
- Docker备份Gitlab容器以及还原数据
概述 今天,我们将学习如何快速地对docker容器进行快捷备份.恢复和迁移.Docker是一个开源平台,用于自动化部署应用,以通过快捷的途径在称之为容器的轻量级软件层下打包.发布和运行这些应用.它使得 ...
- docker~在centos容器中安装新程序
上一篇我们使用了阿里加速器安装了centos镜像,然后创建了一个新容器,运行了这个镜像,这一讲我们来为这个镜像添加一些应用程序,然后再保存容器,push容器到仓储,大家就可以直接pull我生产的容器了 ...
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/index.html Zookeeper 分布式服务框架是 Apa ...
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据(转载)
本文转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Had ...
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据--转载
原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Hadoop ...
- 【Zookeeper】分布式服务框架 Zookeeper -- 管理分布式环境中的数据
Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理 ...
随机推荐
- [Matlab.Matrix] reshape
a=[1,2,3;4,5,6;7,8,9]; a=reshape(a,1,9); a=[1,4,7,2,5,8,3,6,9]; a=reshape(a,9,1); a=[1;4;7;2;5;8;3;6 ...
- 软件测试之构建测试---BVT
1. 构建的基本流程: a. 开发人员在他们的个人计算机上编写源代码文件 b. 他们将编写好的文件存放在一个统一集中的地方,构建组将所有的源代码编译成可以在计算机上运行的二进制文件,且用安装工具把各种 ...
- OpenProcess打开进程返回错误的问题
问题描述 项目中需要做一个小功能:能够查看系统中当前正在运行的进程的内存信息,如内存块类型.分配状态.访问权限等.如下图所示: 需要的信息和上图相差无几.说起来也不算太难,毕竟现成的API已经提供了. ...
- 【Win10】页面导航的实现
注:本文基于 Windows 10 10240 及其 SDK 编写,若以后有变化,请以新版本为准. 页面导航我们是再熟悉不过了,浏览器.手机 App 大多都使用这种方式来展示内容.在 Windows ...
- Linq查询操作之Where筛选
筛选操作where能够处理逻辑运算符组成的逻辑表达式.比如逻辑“与”,逻辑“或”,并从数据源中筛选数据,它和where子句的功能非常相似.Enumerable类的Where()原型如下: public ...
- C# WinFrom 跨线程访问控件
1.跨线程访问控件委托和类的定义 using System; using System.Windows.Forms; namespace ahwildlife.Utils { /// <summ ...
- OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)
公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...
- margin的使用方法与技巧
1.margin还可以用来做平移,作用类似translate哈哈.将元素设成absolute后就可以用margin随便平移他了,既不像relative那样要霸占空间,又不用为父元素设置relative ...
- 【AngularJS学习笔记】00 序
AngularJS通过新的属性与表达式来扩展HTML,有一种很形象的叫法,定义它为声明式语言. 为克服HTML在构建应用上的不足而设计! 这是它的目标. 它的官网进不去,应该是被墙了,这是goegle ...
- jquery.cookie.js 用法
jquery.cookie.js 用法 一个轻量级的cookie 插件,可以读取.写入.删除 cookie. jquery.cookie.js 的配置 首先包含jQuery的库文件,在后面包含 j ...