Docker 数据卷,数据卷容器详细介绍

Docker 数据卷,数据卷容器详细介绍

引子

有些时候,我们的服务运行时必不可少的会产生一些日志,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及容器的数据管理操作。

容器中管理数据主要有两种方式:

数据卷
数据卷容器

数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性:
- 数据卷可以在容器之间共享和重用
- 对数据卷的修改会立马生效
- 对数据卷的更新,不会影响镜像
- 卷会一直存在,直到没有容器使用

#(类似linux下的挂载(mount))

创建数据卷

在用Docker run 命令的时候,使用-v参数标记可以在容器内创建一个数据卷,多次使用-v标记可以创建多个数据卷

docker run -dp --name web -v /webapp ubuntu:14.04
#这里我们没有-p后,并没有制定端口,如果我们不制定容器与宿主机之间映射的端口关系的话,Docker会随意映射

挂载一个主机目录作为数据卷
使用-v标记也可以指定挂载一个本地的已有目录到容器中去作为数据卷

docker run -dp --name web -v /src/webapp:/opt/webapp ubuntu:1404

上面这条命令加载主机/src/webapp目录到容器的/opt/webapp目录:

这个功能在进行测试的时候十分方便,比如用户可以放置一些程序或数据到本地目录中,然后在容器内运行和使用。另外,本

地目录的路径必须是绝对路径,如果目录不存在,Docker会自动创建。

Docker挂载数据卷的默认权限是读写,用户也可以通过,ro指定只读:

docker run -dp --name web -v /src/webapp:/opt/webapp:ro ubuntu:14.04
# 加了:ro之后,容器内挂载的数据卷的数据就无法修改。

挂载本机文件为数据卷

-v标记也可以从主机挂载单个文件到容器中作为数据卷:

Docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu:14.04
# 这样就可以记录在容器输入过的命令历史(不同shell版本有所不同)

数据卷容器

如果用户需要在容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器,数据卷容器其实是一个普通的容器,专门用来提供数据卷供其它容器挂载。
首先,创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata:

docker run -ti -v /dbdata --name dbdata ubuntu:14.04

接着我们可以在其他容器中使用–volumes-form来挂载dbdata容器中的数据卷,例如创建db1和db2两个容器,并从dbdata容器挂载数据卷:

docker run -ti --volumes-from dbdata --name db1 ubuntu:14.04
docker run -ti --volumes-from dbdata --name db2 ubuntu:14.04

此时容器db1和db2都挂载同一个数据卷到相同的/dbdata目录。三个容器任何一方在该目录下的写入,其他容器都可以看到。

例如,在dbdata容器中创建一个test文件:

root@df392e32f0p6:/# touch test1
root@df392e32f0p6:/#ls
test

我们在db1容器中查看它:

docker run -ti --volumes-from dbdata --name db1 ubuntu:14.04
root@92597e32f0p6:/# ls dbdata/
test

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

docker run -d --name db3 --volumes-from db1 ubuntu:14.04
#注意:使用--volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态

如果删除了挂载的容器(包括dbdata,db1 和 db2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用Docker rm -v命令来指定同时删除关联的容器。

使用数据卷容器可以让用户在容器之间自由的升级和移动数据卷。

利用数据卷容器迁移数据

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

备份

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

这个命令有点复杂,我们来看下这条命令都做了哪写操作

1.首先利用ubuntu镜像创建了一个容器worker。
2.使用–volumes-from dbdata参数来让worker容器挂载dbdata容器的数据卷(即dbdata数据卷);
3.使用-v $(pwd):/backup参数来挂载本地的当前目录到worker容器的/backup目录

worker容器启动后,使用了tar cvf /backup/backup.tar /dbdata命令来将/dbdata下内容备份为容器内的/backup/backup.tar,即宿主主机当前目录下的backup.tar。

恢复

如果要恢复数据到一个容器,可以按照下面的操作,首先创建一个带有数据卷的容器dbdata2:

docker run -v /dbdata --name dbdata2 ubuntu:14.04

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

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Docker 数据卷及数据容器详细介绍及示例

    Docker 数据卷及数据容器 这两天开始学习docker,发现docker确实很强大,让网站部署和维护的效率大大提高.遂准备将手头维护的几个小站,全部docker化.整理的过程中感觉到,docker可以以功能或者进程为单位进行部署和维护,不用再花时间在繁琐的配置上面,但是docker和宿主之间的数据共享以及docker间的数据共享仍然是让人头疼和操心的地方. 几个基本概念: docker: 一种容器管理技术,这里也指既有的开发工具链. container: 容器 image: 镜像 volum

  • 详解Docker 数据卷管理

    Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume).数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享. 数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像.使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统. 本节中,我们需要依次完成下面几项任务: 1.创建数据卷 2.管理数据卷权限 3.挂载宿主机文件 4.使用数据卷容器共享数据 5.数据卷备份

  • Docker中容器数据卷(Data Volume)和数据管理详解

    卷(Volume) 众所周知卷(Volume)是容器中的一个数据挂载点,卷可以绕过联合文件系统,从而为Docker 提供持久数据,所提供的数据还可以在宿主机-容器或多个容器之间共享.通过卷,我们可以可以使修改数据直接生效,而不必重新构建镜像. 一.数据卷 数据卷是一个可以绕过联合文件系统的,专门指定的可在一或多个容器间共享目录.卷为提供为持久化或共享数据提供了一些有用的特性. 数据卷设计的初哀是提供持久化数据,而与容器的生命周期无关.因此,在删除容器时,Docker不会自动删除卷,直到没有容器再

  • Docker 数据卷权限实例详解

    Docker 数据卷权限 在CentOS7中运行NodeJs的容器,发现挂载的本地目录在容器中没有执行权限,经过各种验证和Google搜索,找到了问题的原因,这里做一下记录.原因是CentOS7中的安全模块selinux把权限禁掉了,至少有以下三种方式解决挂载的目录没有权限的问题: 1,在运行容器的时候,给容器加特权: 示例:docker run -i -t --privileged=true -v /home/docs:/src waterchestnut/nodejs:0.12.0 2,临时

  • Docker 数据卷,数据卷容器详细介绍

    Docker 数据卷,数据卷容器详细介绍 引子 有些时候,我们的服务运行时必不可少的会产生一些日志,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: 数据卷 数据卷容器 数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性: - 数据卷可以在容器之间共享和重用 - 对数据卷的修改会立马生效 - 对数据卷的更新,不会影响镜像 - 卷会一直存在,直到没有容器使用 #(类似linux下的挂载(moun

  • Vue数据变化后页面更新详细介绍

    首先会通过module.hot.accept监听文件变化,并传入该文件的渲染函数: module.hot.accept(/*! ./App.vue?vue&type=template&id=472cff63&scoped=true& */ "./App.vue?vue&type=template&id=472cff63&scoped=true&", __WEBPACK_OUTDATED_DEPENDENCIES__ =&g

  • Docker安装及基本使用方法详细介绍

    Docker是一个用了一种新颖方式实现的超轻量虚拟机,在实现的原理和应用上还是和VM有巨大差别,专业的叫法是应用容器(Application Container).(我个人还是喜欢称虚拟机) Docker应用容器相对于 VM 有以下几个优点: 启动速度快,容器通常在一秒内可以启动,而 VM 通常要更久 资源利用率高,一台普通PC 可以跑上千个容器,你跑上千个 VM 试试 性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源 Docker安装 CentO

  • docker 如何搭建私有仓库(ubuntu 14.04,Docker版本1.6.4)详细介绍

    docker 搭建私有仓库 本篇文章描述了多个机器可以在内网中访问自己的私有仓库,访问仓库时需要CA认证!最简单,最低保障私有仓库的安全性!在一个比较庞大的集群里,可以运行多个私有仓库的replica,然后借用代理来balance请求! 1.测试环境 本人测试环境为ubuntu 14.04,Docker版本1.6.4(版本稍微比较老,新版本安装流程是一样的).官网上说:You need to install Docker version 1.6.0 or newer. 在阿里云上开了两台机器:

  • docker 的java编译环境构建详细介绍

    用Dockerfile 构建一个java的编译环境,这里整理下实现步骤: 1.包括以下软件包 ubuntu jdk maven svn 2.jdk.maven 需要手动下载,下载之后分别为 jdk-8u51-linux-x64.gz apache-maven-3.3.3-bin.tar.gz 3.创建一个Dockerfile文件,包含以下内容 FROM ubuntu RUN apt-get update RUN apt-get -y install subversion ADD jdk-8u51

  • 详解Docker数据管理(数据卷&数据卷容器)

    生产环境中使用Docker的过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: 1.数据卷(Data Volumes):容器内数据直接映射到本地主机环境:如何在容器内创建数据卷,并且把本地的目录或文件挂载到容器内的数据卷中. 2.数据卷容器(Data Volume Containers):使用特定容器维护数据卷.如何使用数据卷容器在容器和主机.容器和容器之间共享数据,并实现数据的备份和恢复. 数据卷 数据卷是一个可

  • docker<容器数据卷-v>对容器内数据持久化详解(备份)

    目录 前言 正文 数据卷读写规则 数据卷的继承和共享 总结 前言 在docker创建容器,挂载目录的时候,可能会出现目录无法访问无法打开的问题(cannot open directory .: Permission denied) 只需要加一个 --privileged=true 参数即可,加上这个参数代表是以root用户权限进入容器的,不加就是以普通用户权限进入容器的 例如,test镜像创建一个容器t1 docker run -d -p 5555:5555 -v /etc/config:/tm

  • python+mongodb数据抓取详细介绍

    分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: headers = { ..... } r = requests.get(url,headers,timeout=30) html = r.content soup = BeautifulSoup(html,"lxml") url = soup.find_all(正则表达式) for i

  • iOS开发系列--详细介绍数据存取

    概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储,包括偏好设置其本质都是存储为文件,只是说归档或者plist文件存储可以选择保存到沙盒中,而偏好设置系统已经规定只能保存到沙盒的Library/Preferences目录.当然,文件存储并不作为本文的重点内容.本文重点还是说数据库存储,做过数据库开发的朋友应该知道,可以通过SQL直接访问数据库,也可以

随机推荐