内容正文:
课程名称
第6章 容器数据卷
计划学时
4学时
内容分析
本章主要介绍容器数据卷概念、数据卷挂载、数据卷容器、备份数据卷、数据卷的恢复与迁移、管理数据卷
教学目标
与
教学要求
要求学生理解容器数据卷的概念、熟练使用容器数据卷、理解容器数据卷的工作机制、掌握数据迁移方法
教学重点
数据卷挂载、数据卷容器、备份数据卷、数据卷的恢复与迁移、管理数据卷
教学难点
数据卷挂载、数据卷容器、备份数据卷、数据卷的恢复与迁移、管理数据卷
教学方式
课堂讲解及ppt演示
教
学
过
程
第一课时
(容器数据卷概念、数据卷挂载、数据卷容器、备份数据卷)
回顾内容
1.介绍本书,引出本课时的主题
在生产环境中使用Docker容器,往往需要对数据进行持久化保存,或者多个容器需要共享数据。这时就会使用到容器数据卷,通过容器数据卷管理容器数据是一项使用容器的基本技能。本章将详细介绍容器数据卷的使用及其相关内容。
2.明确学习目标
(1) 能够了解容器数据卷概念
(2) 能够掌握在命令行挂载数据卷
(3) 能够掌握通过Dockerfile挂载数据卷
(4) 能够掌握数据卷容器
(5) 能够掌握备份数据卷
知识讲解
· 容器数据卷概念
容器技术使用rootfs机制与Namespace,构建出与宿主机隔离开的文件系统。在用户使用Docker容器的时候,会产生一系列的数据文件。这些数据文件在Docker容器关闭时就会消失,但是其中部分数据是用户希望能够保存的。Docker将应用与运行环境打包成容器进行运行,用户希望在运行过程中产生的部分数据是可以持久化的,并且容器之间能够实现数据互通。这正是容器数据卷(Docker Volume)要解决的问题。
Docker中的数据可以存储在类似于虚拟机磁盘的介质中,这种介质在Docker中称为数据卷。数据卷以目录的形式呈现给Docker,不仅可用来存储Docker应用的数据,还可以支持多个容器间数据共享,并且修改数据卷文件也不会影响镜像。在Docker中使用数据卷,就是在系统中挂载一个文件系统。
Docker数据卷所使用的挂载技术,就是Linux的绑定挂载。其主要作用是,允许用户将一个目录或文件(并非整个设备),挂载到一个指定的目录上。用户在该挂载点上进行的任何操作都只发生在被挂载的目录或文件上,而原挂载点的内容则会被隐藏起来且不受任何影响。容器利用数据卷与宿主机进行数据共享,从而实现容器间的数据共享与交换。
Docker数据卷默认存储在宿主机的/var/lib/Docker/volumes/目录下,也可以指定挂载到任意位置。这种挂载仅存储在宿主机的内存中,永远不会写入宿主机的文件系统。如图所示。
数据卷的特点如下。
(1)容器启动时初始化,如果容器使用的镜像包含数据卷,这些数据也会复制到数据卷中。
(2)容器对数据卷的修改是直接生效的。
(3)数据卷的变化不会影响镜像的更新,数据卷是独立于联合文件系统,镜像是基于联合文件系统,镜像与数据卷不会相互影响。
(4)数据卷是宿主机中的一个目录,与容器生命周期隔离。
· 在命令行挂载数据卷
在docker create或docker run命令中,使用-v为容器增加一个数据卷,示例代码如下:
以上示例使用docker run命令运行了一个容器,并通过-v参数为容器添加了一个数据卷。
下面通过命令查看挂载信息,示例代码如下:
从以上示例中可以看到,宿主机已经在/var/lib/Docker/volumes/下自动生成了挂载目录。
下面通过命令行手动指定宿主机挂载目录,示例代码如下:
以上示例在后台运行了一个被命名为test的Nginx容器,并为它挂载数据卷。
· 通过Dockerfile挂载数据卷
用户创建镜像时,通常会在Dockerfile文件中加上VOLUME[/date]来创建含有数据卷的镜像,并使用该镜像创建包含数据卷的容器。
Dockerfile可以创建多个数据卷,与使用docker run命令创建数据卷不同,Dockerfile中的数据卷不能映射到已经存在的本地目录。在启动容器时,才会创建Dockerfile中指定的数据卷,并且以Docker中指定的名称命名。运行同样镜像的容器创建的数据卷是不一样的(可以看到不同容器的数据卷地址也是不一样的)。当容器中的数据卷地址不一样时,容器之间就无法共享数据了。
下面使用Dockerfile中的VOLUME选项来指定挂载数据卷,首先创建Dockerfile并添加内容,示例代码如下:
以上示例创建了一个Dockerfile文件并添加了内容,即挂载三个数据卷。
· 数据卷容器
运行容器时宿主机会随机生成挂载目录,无法保持目录地址一致,所以无法实现容器间的数据共享。数据卷容器可以有效地解决这个问题: