跟我一起学docker(六)--数据管理

1.数据卷

数据卷是一个可供容器使用的特殊目录,有如下特性:

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

数据卷修改会立即生效

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

如果有容器使用数据卷,该卷会一直存在

准备工作:

创建一个目录,并在目录里面创建文件,文件内写入内容。

在容器内创建数据卷

在使用docker run的命令时,使用 -v 标记可以在容器内创建一个数据卷,并且可以指定挂在一个本地已有的目录到容器中作为数据卷:

docker run -d --name app1-it -v ${PWD}/webapp:/root/webapp ubuntu bash

通过目录跟容器内建立了一层关系,数据卷发生变化后,容器内和容器外都会随之发生改变。例如容器挂载一个文件,当容器挂了后,文件不会丢失。

注意:默认挂载的数据卷的权限是rw(可读写),如果要求ro(只读),则需要加上对应的ro参数,命令可改为:

docker run -d --name app1-it -v ${PWD}/webapp:/root/webapp:ro ubuntu bash

下面我们一起来操作一下:

创建webapp目录,在目录下新建文件file,并在文件file中写入“this is a file”。

echo ${PWD} 命令标识当前目录。

创建启动app1容器并挂载数据卷

进入容器找到root目录可查看到已挂载的数据卷。

数据卷目录与容器内目录有映射关系,所以不管是在容器内部修改数据卷还是在外部修改数据卷,相对应的数据卷都会发生改变。

只读的演示

2.数据卷容器

数据卷容器用于用户需要在容器间共享一些持续更新的数据,数据卷容器专门提供数据卷供其它容器挂载使用。

Example:

创建数据卷容器db1

docker run -d --name db1 -v/dbdata -ti ubuntu bash

创建容器db2与db1共享dbdata的数据

docker run -d --name db2 --volumes-from db1 -ti ubuntu bash

在容器db1和容器db2任意一个容器修改dbdata的内容,在两个容器内均生效

数据卷容器的删除:

如果删除了挂载的容器,数据卷并不会被自动删除,如果要删除一个数据卷,必须在删除最后一个还挂载它的容器时显示使用docker rm -v 命令指定同时删除关联的容器。在下图可看到即使删除aatest,bbtest中仍然有fileA文件。

在aatest中创建了文件fileA,bbtest可以看到fileA,删除aatest容器后,fileA在bbtest中还可以看到。

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

备份:

使用下面的命令来备份dbdata数据卷容器内的数据卷:

docker run --volumes-from dbdata -v ${PWD}:/backup --name worker ubuntu \tar cvf /backup/backup.tar/dbdata

说明:

利用ubuntu镜像创建一个容器worker。使用--volumes-from dbdata参数来让worker容器挂载dbdata的数据卷;使用${pwd}:/backup参数来挂载本地目录到worker容器的/backup目录。

worker启动后,使用tar命令将/dbdata下的内容备份为容器内的/backup/backup.tar。

创建dbdata数据卷容器并写入文件:fileA、fileB、fileC

执行备份命令创建备份tar包:

恢复:

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

docker run -d -v /dbdata--name dbdata2 ubuntu /bin/bash

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

docker run --volumes-from dbdata2 -v ${pwd}:/backup ubuntu tar xvf /backup/backup.tar

原文地址:http://blog.51cto.com/12040702/2135316

时间: 2024-10-16 10:05:14

跟我一起学docker(六)--数据管理的相关文章

笨鸟学php(六) 数组

一.数组概述 1.1 数组是复合类型 1.2 数组中可以存储任意长度的数据, 也可以存储任意类型的数据 二.数组的类型 2.1 索引数组: 下标是顺序整数作为索引 <?php $user[0] = 1; $user[1] = "zhangsan"; $user[2] = "[email protected]"; echo '<pre>'; print_r($user); echo '</pre>'; ?> 2.2 关联数组: 下标

从头开始学JavaScript (六)——语句

原文:从头开始学JavaScript (六)--语句 一.条件分支语句:if 基本格式: if (<表达式1>){    <语句组1>}else if (<表达式2>){    <语句组2>}else{    <语句组3>} 执行流程: 二.循环语句 2.1前测试循环语句:在循环体内的代码被执行之前就对出口条件求值. 2.1.1while语句 基本格式: do {    <语句组>} while (<表达式>)  执行流程

小白学Docker之Compose

承接上篇文章:小白学Docker之基础篇,自学网站来源于https://docs.docker.com/get-started 概念 Compose是一个编排和运行多容器Docker应用的工具,主要是通过一个YAML文件进行服务配置. 使用Compose主要有三步: 在每个应用环境中配置一个Dockerfile,定义单个应用的镜像 使用docker-compose.yml来组装各个应用 运行docker-compose up命令来运行整个应用 一个基本的docker-compose.yml可能长

小白学Docker之Swarm

承接上篇文章:小白学Docker之Compose,自学网站来源于https://docs.docker.com/get-started 系列文章: 小白学Docker之基础篇 小白学Docker之Compose 小白学Docker之Swarm 概念 Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创

跟我一起学docker(11)--jenkins+github+Docker

Github+Jenkins+Docker持续集成 这次要做的就是我本地git push到github后,jenkins自动构建 注意:本次课程jenkins必须有公网ip,保证github可以通知jenkins构建. 公网ip服务器 登陆github https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/ 一路回车 1.配置Github 设置秘钥登录 生成密钥: 在git

Linux就应该这么学第六课

Linux就应该这么学第六课 for条件循环语句 格式: for 变量名 in 取值来源 do 命令序列 done while条件循环语句 格式: while 条件测试操作 do 命令序列 done case条件测试语句 case 变量值 in 模式 1) 命令序列1 ;; 模式 2) 命令序列2 ;; 模式 3) 命令序列3 ;; *) 默认命令序列 esac 计划任务服务程序 at命令 at +时间 按ctrl+d组合键来结束编写计划任务 at -l 查看任务列表 at -c 序号 查看任务

《原创视频》牛腩学docker简记

牛腩学docker简记 http://blog.niunan.net/blog/show/1258https://www.cnblogs.com/niunan/p/10917506.htmlhttps://www.jianshu.com/p/1fd8ce0d49ed 本视频记录牛腩学习在vs中的.net core项目中的添加docker支持的简单记录云服务器上运行docker网站的思路:1. 云服务器上装nginx, mysql2. 云服务器上装docker3. 本地VS .NET CORE项目

Docker的数据管理及网络通信问题

博文大纲: 一.docker的数据管理1.数据卷2.数据卷容器 二.docker网络通信1.端口映射2.容器互联 一.docker的数据管理 在docker中,为了方便查看容器内产生的数据或者将多个容器之间的数据实现共享,会涉及到容器的数据管理操作,管理docker容器中的数据主要有两种方式:数据卷和数据卷容器. 1.数据卷 数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立即可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移,数

安装Docker-Win10环境-图解轻松学Docker&K8S

>>> 点我开始视频学习 <<< 在Docker环境下,它对于win10对于大多数的Linux系统都有良好的支持,作为Docker,我们来重新回顾一下.Docker的logo是一条鲸鱼,是典型的容器化技术代表. 它的特点主要有几个 第一它是开源的应用容器引擎基于go语言开发. 第二,因为上一节课我们讲过什么是容器化技术,所以容器化技术是完全使用沙箱的机制,而且部署的开销极低,也就是指在当前我们自己的操作系统中就可以部署多个容器应用了. 第三个目前容器化技术并不是只有Do