在docker的数据管理中,有两个概念:

1、数据卷

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

    1.1 数据卷可以在容器之间共享和重用

    1.2 对数据卷的修改会立刻生效

    1.3 对数据卷的更新,不会影响镜像

    1.4 卷会一直存在,直到没有容器使用

  数据卷的使用,类似linux系统中的mount操作。

2、数据卷容器

  数据卷容器,其实就是一个普通的容器,只不过是挂载一个数据卷目录,供其他容器共享和持续更新数据来使用。

下面介绍数据卷以及数据卷容器的使用示例:

一、数据卷:

在运行docker run的时候,使用-v参数可以挂载数据卷,多次使用-v 可以挂载多个数据卷

#docker run -dit --name datatest -v /home/linkface/dockerdir:/data nginx:1.7 /bin/bash

上面的命令是运行一个容器datatest,将宿主机的dockerdir目录,挂载到容器中的/data/目录,在/data/中创建修改文件,本地的dockerdir目录可以查看到。

#cd /data
#touch 123
#ls -l
-rw-r--r-- 1 root root 0 Nov  7 07:28 123

发现我们的宿主机也同时有了这个文件,这个在做测试的时候非常方便,可以将本地代码或者测试文件通过数据卷映射到容器内。

***本地路径一定要使用绝对路径,容器路径如果没有,会自动创建。***

上面是通过目录的方式挂载,其实也可以挂载文件:

#docker run --rm -dit -v ~/.bash_history:/.bash_history nginx:1.7 /bin/bash

不过直接挂载文件不推荐使用,因为一旦使用vi,vim,sed等工具编辑修改文件,有可能导致inode改变,导致报错,故建议挂载目录。

二、数据卷容器:

数据卷容器,顾名思义,就是启动一个容器,来单独当做数据卷来使用,数据卷容器的特点是方便在容器之间共享和更新数据。

#docker run -dit --name dbdata -v /home/linkface/dockerdir:/dbdata centos /bin/bash

创建一个数据卷容器,挂载本地dockerdir到容器的dbdata

接下来,我们创建新的容器,但是使用dbdata容器的dbdata目录作为数据卷:

挂载数据卷容器内的数据卷,要使用--volumes-from 参数

#docker run -dit --name db1 --volumes-from dbdata nginx:1.7 /bin/bash
#docker run -dit --name db2 --volumes-from dbdata nginx:1.7 /bin/bash

依次查看各个容器的数据卷:

先查看第一个创建的数据卷容器的数据卷情况:

新建的两台db1跟db2的:

可以看出来是共用的,我们新建一个文件试试:

去其他容器看一下:

这样就做到了容器之间的数据共享,以及持续更新。

如果删除了挂载的容器,数据卷并不会自动删除,如果要删除,需要在最后一个还挂载着他的容器时使用docker rm -v 命令,来删除指定同时删除关联的容器。

三、利用数据卷容器迁移数据

  3.1备份

  可以利用数据卷容器对其中的数据进行备份、恢复,以实现数据的迁移。

  

#docker run --volumes-from dbdata -v $(pwd):/backup centos tar cvf /backup/backup.tar /dbdata
/dbdata/
/dbdata/123
/dbdata/mydata
tar: Removing leading `/' from member name

解释一下上面的命令:

运行一个容器,挂载dbdata的数据卷,并且将本地的当前目录,映射到容器的/backup ,然后执行压缩命令,将dbdata,打包到容器的/backup/下,也就是映射的本地目录。

backup.tar就是我们刚刚从dbdata上备份下来的数据。

  3.2 恢复

  如果要恢复数据到一个容器,跟刚才的命令类似:

  首先,创建并运行一个容器:

  我们只是使用-v 在容器内等于共享了一个dbdata,但是实际上没有将它映射到任何目录。

#docker run -dit --name db3  -v /dbdata centos /bin/bash

  开始恢复:

#docker run --volumes-from db3 -v $(pwd):/backup centos tar xvf /backup/backup.tar

解释一下上面的命令:

创建并运行一个容器,挂载db3的dbdata,并且将本地当前目录,映射成容器内的/backup目录,然后解压,此时,数据将被解压到db3的dbdata中。

  

ubuntu-docker入门到放弃(六)数据管理的更多相关文章

  1. Docker入门教程(六)另外的15个Docker命令

    Docker入门教程(六)另外的15个Docker命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第六篇,继续介绍Docker命令.之前的第二篇文章 ...

  2. Ubuntu菜鸟入门(十六)—— 安装视频播放器vlc

    sudo add-apt-repository ppa:videolan/master-daily sudo apt-get update sudo apt-get install vlc Ubunt ...

  3. docker入门到放弃

    1.容器简介 Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的cgroup,namespace,Union FS等技术,对应用进程进行封装隔离,并且独立于宿主机与其他进程, ...

  4. MyBatis从入门到放弃六:延迟加载、一级缓存、二级缓存

    前言 使用ORM框架我们更多的是使用其查询功能,那么查询海量数据则又离不开性能,那么这篇中我们就看下mybatis高级应用之延迟加载.一级缓存.二级缓存.使用时需要注意延迟加载必须使用resultMa ...

  5. hive从入门到放弃(六)——常用文件存储格式

    hive 存储格式有很多,但常用的一般是 TextFile.ORC.Parquet 格式,在我们单位最多的也是这三种 hive 默认的文件存储格式是 TextFile. 除 TextFile 外的其他 ...

  6. Docker入门

    -----------------------------------------Docker入门教程(一)介绍Docker入门教程(二)命令Docker入门教程(三)DockerFileDocker ...

  7. Docker 入门 第六部分:部署app

    目录 Docker 入门 第六部分:部署app 先决条件 介绍 选择一个选项 Docker CE(Cloud provider) Enterprise(Cloud provider)这里不做介绍 En ...

  8. 【实战】Docker 入门实战一:ubuntu 和 centos 安装Docker

    Docker是什么 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布 ...

  9. Docker入门(六):Stacks

    这个<Docker入门系列>文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指 ...

  10. DOCKER 从入门到放弃(二)

    搜索镜像 从docker官方镜像仓库搜索镜像 docker search [OPTIONS] TERM OPTIONS: --automated :只显示自动创建的镜像,默认值为fasle --fil ...

随机推荐

  1. Spring Boot 揭秘与实战(二) 数据存储篇 - 数据访问与多数据源配置

    文章目录 1. 环境依赖 2. 数据源 3. 单元测试 4. 源代码 在某些场景下,我们可能会在一个应用中需要依赖和访问多个数据源,例如针对于 MySQL 的分库场景.因此,我们需要配置多个数据源. ...

  2. MMON进程手工启动

    手工启动MMON进程 1. 故障现象 #某帅哥接到业务人员反映系统缓慢,RAC环境 #生成AWR报告发现节点1没有数据 #查询快照视图,发现只有节点1没有快照记录,节点2正常存在快照记录 SYS &g ...

  3. py解释器PC

    pycharm激活方法: 今天更新了一下pycharm,结果之前的激活就不能用了,下面是激活方法: 1.mac下在终端进入etc目录: cd /etc 2.编辑hosts文件: vi hosts 将“ ...

  4. c++将数字转换成固定长度的字符串

    c++将数字转换成固定长度的字符串 将数字转换为字符串,且设置为固定长度的,不足补零. string num2str(int i) { ]; sprintf(ss,"%04d",i ...

  5. 我的第一个Python程序,定义主函数,eval、format函数详解,

    程序实例: #第一个py小程序 def main(): f = eval(input("输入一个数值:")) p=f*(5/9) print("现在的值为:{0:3.3f ...

  6. pip windows下的引入

    安装了python以后,并且环境变量里引入了python安装路径后, 想使用pip来安装未安装的模块,但是命令模式里不能执行pip, 查看python安装路径,发现pip跟easy_install的执 ...

  7. python开发day03

    一.常见的数据类型 1. int ==> 整数. 主要⽤用来进⾏行行数学运算  \ (常见的操作有+-*%) a.bit_length() a= # 10进制 二进制 100 print(a.b ...

  8. 牛客国庆集训派对Day1-C:Utawarerumono(数学)

    链接:https://www.nowcoder.com/acm/contest/201/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  9. LeetCode - Beautiful Array

    For some fixed N, an array A is beautiful if it is a permutation of the integers 1, 2, ..., N, such ...

  10. 【BZOJ2229】【ZJOI2011】最小割

    冷门知识点…… 原题: 小白在图论课上学到了一个新的概念——最小割,下课后小白在笔记本上写下了如下这段话: “对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点s,t不在同一个部分中 ...