生产环境中使用docker的过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享。
容器中管理数据主要有两种方式:
数据卷(Date Volumes):容器内数据直接映射到本地环境
数据卷容器(Date Volumes Containers):使用特定容器维护数据卷

1.数据卷

数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux的mount操作
数据卷有许多有用的特性:

  • 数据卷可以在容器之间共享和重用,容器间传递数据会变得高效简单
  • 对数据卷内数据的修改会立马生效,无论是容器内的操作还是本地操作
  • 对数据卷的更新不会影响镜像,解耦了应用和数据
  • 卷会一直存在,直到没有容器使用,可以安全的卸载它

一般对数据卷的操作有以下三种方式:

(1)在容器内创建一个数据卷

在使用docker run或者docker create创建一个容器的时候,可以使用-v参数在容器内创建一个数据卷。
多次重复使用-v参数可以创建多个数据卷。

创建容器con_test004,并创建数据卷date_test:

启动容器:

进入容器查看数据卷:

(2)挂载一个主机目录作为数据卷

在使用docker run或者docker create创建一个容器的时候,可以使用-v参数指定挂载一个本地已有的目录到容器中去作为数据卷。

在本地创建一个目录:

创建容器con_test005,并将date目录挂载到容器中:

Docker挂载数据卷的默认权限时读写(rw),用户也可以通过ro指定为只读。

注意在挂载的时候都要使用绝对路径。否则会自动创建。

(3)挂载一个本地主机文件作为数据卷

-v也可以从主机挂载单个文件到容器中作为数据卷。
在本地创建一个文件:

创建一个新的容器并进行挂载:

进入容器,该文件已经存在:

不推荐直接挂载文件到容器内,也许会有意外的麻烦。

2.数据卷容器

如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。
数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷供其它容器挂载。

创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata:

在其它容器使用--volumes-from来挂载dbdata容器中的数据卷。
下面创建容器db1和db2,并且将dbdata容器中的数据卷挂载。
需要注意的是,-volumes-from会自动找到数据卷容器中的挂载卷,并将其标记

创建db1:

创建db2:

三个容器中任何一个容器在挂载卷下写入内容,其它容器都会看到。

在dbdata中创建一个文件,并写入内容:

查看db1和db2,发现数据已经同步:

可以多次使用--volumes-from参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器卷的容器来挂载数据卷。

注意在使用--volumes-from参数所挂载数据卷的容器自身并不需要保持运行状态

如果删除了db3,发现db4依然能够同部dbdata的数据,说明它还是绑在dbdata这个容器上面。
删除db2,没有任何影响。
如果关闭dbdata数据卷容器,并不会影响数据的共享。
如果删除dbdata数据库容器,也不会影响数据的共享,说明数据卷依然存在。
如果想要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm -v来指定同时删除关联容器。

3.利用数据卷容器来移动数据

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

(1)备份

现在要将db1的dbdata备份到宿主机的data目录下。

过程如下:

  dockers run -it --name worker docker.io/centos  创建一个容器worker
  --volumes-from db1  让worker来挂载dbdata数据卷
  -v /data:/backup    挂载本地的data目录到worker容器的backup目录
  tar cvf /backup/backup.tar /dbdata  容器启动后,将dbdata下面的内容备份为容器内的/backup/backup.tar,即宿主机当前目录下下的backup.tar

(2)恢复

如果要将数据恢复到一个容器,有如下步骤:

首先创建一个带有数据卷的容器dbdata2:

docker run -v /dbdata --name dbdata2 ubuntu /bin/bash  #这个容器就是一个数据卷容器

然后创建另一个新的容器,挂载dbdata2的容器,并使用untar解压备份文件到所挂载的容器卷中:

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

docker——数据管理的更多相关文章

  1. Docker数据管理(四)

    Docker数据管理 Docker数据分为两种: 数据卷 -v /data -v src:dst 数据卷容器 --volumes-from 数据卷 案例1:我们创建一个容器,起名叫nginx-volu ...

  2. Docker数据管理

    用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及到Docker的数据管理. 容器中管理数据主要有两种方式: ...

  3. Docker系统七:Docker数据管理

    Docker的数据管理 I. 基本概念 Docker容器一旦删除,其相关的rootf文件系统就会被删除,其容器内的数据将一并删除,为了保存相关数据,Docker提出了数据卷的概念. II. 数据卷 D ...

  4. Docker数据管理(五)

    一.什么是数据卷 生成环境中使用docker的过程中,往往需要对数据进行持久化,或者需要多个容器之间进行数据共享,这个就涉及到了容器数据管理 容器中管理数据主要有两种方式: 数据卷:容器内数据之间映射 ...

  5. Docker数据管理(数据卷&数据卷容器)

    生产环境中使用Docker的过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: 数据卷(Data Volumes):容 ...

  6. Docker实战(四)之Docker数据管理

    在生产环境中使用Docker的过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及到容器的数据管理操作. 容器中管理数据主要有两种形式: 数据卷:容器内数据直接映射到本地主 ...

  7. 【Docker】第五篇 Docker 数据管理

    一.基本介绍 数据管理的原因:Docker中的容器一旦删除,容器本身的rootfs文件系统就会被删除,容器中的所有数据就会被删除.为了对一些需要持久化的数据,不随容器删除而删除,所以我们可以通过多个容 ...

  8. <Docker学习>5. docker数据管理

    当我们创建了一个tomcat容器,如何简单部署一个web应用?如何将war包放入到容器中?也就是说怎么样把文件从宿主机中 "放入" 到容器中? docker cp命令可以将宿主机本 ...

  9. docker数据管理(2)

    一.docker存储资源类型 docker两种存储资源类型 用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉 ...

  10. 六、【Docker笔记】Docker数据管理

    前几节我们介绍了Docker的基本使用和三大核心概念,那么我们在使用Docker的过程中,Docker中必然产生了大量的数据,对于这些数据我们需要查看或者对这些数据进行一个备份,也有可能容器之间的数据 ...

随机推荐

  1. 005杰信-factory删除数据

    factory表的删除分为两种:单行删除,以及批量删除. 过程:在jFactoryCreate.jsp页面上两个按钮,单行删除以及批量删除.

  2. WebGL中的OpenGL着色器语言

    在webgl中,调用了OpenGL-ES-2.0的API,而在OpenGL-ES专为嵌入式设备设计,其和其它设备一样,都是使用GLSL(GL Shading Language)来编写片段程序并执行于G ...

  3. python2迁移python3的问题

    ▌使用 pathlib 模块来更好地处理路径 pathlib 是 Python 3默认的用于处理数据路径的模块,它能够帮助我们避免使用大量的 os.path.joins语句: from pathlib ...

  4. 剑指 offer set 22 数组中的逆序数

    总结 1. 题目为归并排序的变形, 不过我完全没想到 2. 在归并排序进行字符组 merge 时, 统计逆序数. merge 后, 两个子数组是有序的了, 下次再 merge 的时候就能以 o(n) ...

  5. C语言函数的概念

    在<我们对函数进行了简单的解释,函数(Function)是一段可以重复使用的代码,这是从整体上对函数的认识. C语言本身带了很多库函数,并分门别类地放在了不同的头文件中,使用时只要引入对应的头文 ...

  6. Java+selenium+Fitnesse

    刚开始接触selenium是进公司后,老大给我们培训了一下UI自动化(其实也不叫培训啦,就是让我们知道有这么个东西吧,我这么说,老大看到得打人了,哈哈).要进行自动化测试,当然就得搭建一个自动化测试框 ...

  7. CLR via 笔记 5.3 值类型的装箱和拆箱

    1.装箱 为了将一个值类型转换成一个引用类型,要使用一个名为装箱(Boxing)的机制. 1.在托管堆中分配好内存.分配的内存量是值类型的各个字段需要的内存量加上托管堆的所有对象都有的两个额外成员(类 ...

  8. ora-04021 无法锁表的解决办法

    案例场景: 备库上有一张分区表,在做数据导入出了点问题,需要truncate掉重新导入,在执行truncate table时发生了04021错误. 错误分析: ora-04021的解释是等待锁定对象时 ...

  9. 20190401-记录一次bug ConstraintViolationException

    org.hibernate.exception.ConstraintViolationException 违反唯一约束条件 导致这个问题的原因有很多种. 在查询数据库时发生了这样的错误,一般这样的问题 ...

  10. 安装canal

    一.安装前准备 配置Mysql: [mysqld] log-bin=mysql-bin #添加这一行就ok binlog-format=ROW #选择row模式 server_id=1 #配置mysq ...