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文件:

[email protected]:/# touch test1
[email protected]:/#ls
test

我们在db1容器中查看它:

docker run -ti --volumes-from dbdata --name db1 ubuntu:14.04
[email protected]:/# 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

时间: 2024-10-15 17:29:40

Docker 数据卷,数据卷容器详细介绍的相关文章

python scrapy爬取皇冠体育源码下载网站数据二(scrapy使用详细介绍)

1.scrapy工程创建皇冠体育源码下载论坛:haozbbs.com Q1446595067 在命令行输入如下命令,创建一个使用scrapy框架的工程 scrapy startproject scrapyDemo 1 命令创建好后的工程结构如下图scrapy工程结构 输入如下命令,在工程目录中创建示例代码 PS C:\ProjectPycharm> cd scrapyDemoPS C:\ProjectPycharm\scrapyDemo> scrapy genspider example ex

PHP将XML数据转成数组 例子详细介绍

//首先在开发中,肯定会遇到调用别人的接口对方给你返回的数据是xml格式的 //能后你拿到xml数据后要转成数组来进行数据处理! $xmlstring = <<<XML <?xml version="1.0" encoding="utf-8" ?> <note> <name>乐杨俊</name> <from>江西抚州市</from> <working>BJ</

reshape2 数据操作 数据融合( cast)

我们在做数据分析的时候,对数据进行操作也是一项极其重要的内容,这里我们同样介绍强大包reshape2,其中的几个函数,对数据进行操作cast和melt两个函数绝对少不了. 首先是cast,把长型数据转换成你想要的任何宽型数据, dcast(data, formula, fun.aggregate = NULL, ..., margins = NULL, subset = NULL, fill = NULL, drop = TRUE, value.var = guess_value(data))

Docker 学习笔记【3】 Docker 仓库、数据卷、数据卷容器,网络基础实操。高级网络配置学习

Docker 学习笔记[4] 高级网络配置实操,实战案例实验 =========================================================================== Docker 学习笔记[2] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,记录开始 =========================================================================== 被格式化的脚本内容: #开头代表

Docker 快速上手系列(4): 数据卷,数据卷容器的概念及相关操作

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

Docker 学习笔记【2】 Docker 基础操作实,Docker仓库、数据卷,网络基础学习

Docker 学习笔记[3] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,实操 网络基础  ---------高级网络配置和部分实战案例学习 ============================================================= Docker 学习笔记[1]Docker 相关概念,基本操作--------实操记录开始 ============================================================= 被

Docker 网络及数据卷设置 [三]

Docker 网络及数据卷设置 [三] Docker 时间:2016年11月8日 一.Docker网络设置 默认情况下,docker会创建一个桥接网卡[docker 0],docker有2种映射方式,一种是随机映射,一种是指定映射 提示:生产场景一般不使用随机映射,但是随机映射的好处就是由docker分配,端口不会冲突 案例1:使用docker启动nginx随机映射配置 [[email protected] ~]# docker run -d -P nginx63cbe30165c8fb2ce7

数据卷中的容器操作,整体来说还是非常简单的

关注公众号,大家可以在公众号后台回复"博客园",免费获得作者 Java 知识体系/面试必看资料. 本文是本系列的第六篇,阅读前面的文章有助于更好的理解本文: Docker 入门及安装[Docker 系列-1] Docker 容器基本操作[Docker 系列-2] Docker 容器高级操作[Docker 系列-3] Docker 镜像基本操作[Docker 系列-4] DockerHub 与容器网络[Docker 系列-5] 数据卷入门 在前面的案例中,如果我们需要将数据从宿主机拷贝到

docker技术剖析--数据卷

防伪码:宁可枝头抱香死,何曾吹落北风中. 前言: 1.想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的.Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载只读镜像层并在其上(即镜像栈顶部)添加一个读写层.如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏.当删除Docker容器,并通过该镜像重新启动时,之前的