赞
踩
容器镜像是容器的模板,容器是镜像的运行实例, runtime根据容器镜像创建容器;容器镜像挂载在容器根目录下,是为容器中的应用提供隔离后执行环境的文件系统。
我们希望能提供一个基本的操作系统环境,用户可以根据需要安装和配置软件,这样的镜像我们称作base镜像;能称作base镜像的通常都是各种Linux发行版的Docker镜像,比如 Ubuntu、Debian、CentOS等,其他镜像可以以之为基础进行扩展。
注:base镜像从scratch构建,不依赖于其他镜像;scratch是Docker官方提供的一个空镜像。
①、实现机制:
Ⅰ. Linux操作系统由内核空间和用户空间组成,其中内核空间是kernel, Linux在刚启动时会加载bootfs文件系统,启动完成之后bootfs会被卸载掉;用户空间的文件系统是rootfs, 包含/dev、/proc等目录。不同Linux发行版的区别主要就是rootfs,所以可以在同一台host上部署不同Linux发行版的base镜像。
Ⅱ. 对于base镜像来说,底层直接用Host的kernel, 自己只需要提供rootfs就行了(即打包应用及其运行所需要的所有依赖包),所以相对于虚拟机来说更加轻便。
注:base镜像在用户空间与发行版一致,但是内核的版本和Docker host主机的kernel版本一致;容器只能使用host的kernel,但是不能修改。
Docker支持通过扩展现有镜像来创建新的镜像,也就是说所有镜像层联合在一起,即为一个联合文件系统,这类文件系统会把多个目录(可能对应不同的文件系统)挂载到同一个目录,对外呈现这些目录的联合,也就是说用户在容器层中只能看到最上层的文件,最终呈现出一个分层的结构;
注:联合文件系统UnionFS将所有的镜像层联合挂载到一个统一的挂载点(镜像层文件系统中不同的目录进行“合并”),最终表现为一个Linux操作系统供容器使用。
可以最大化实现资源共享:当多个镜像都是从同一个base镜像构建而来,内存中只需加载一份base 镜像,就可以为所有容器服务;通过写前拷贝COW技术来实现资源共享。
原理简单阐述就好比:当父进程 fork 子进程时,内核并没有为子进程分配内存(当然基本的进程控制块、堆栈还是需要的),而是让父子进程共享内存;当两者之一修改共享内存时,会触发一次缺页异常导致真正的内存分配(此时才会为父子进程分配独享内存)。
1、联合文件系统实现机制:
①、首先需要内核支持OverlayFS特性;
$ cat /proc/filesystems | grep overlay nodev overlay
②、创建分层的工作目录(相当于除了容器层以外的其他层);
$ mkdir base
$ echo "layer 1" > base/metadata
$ echo "hello,docker!" > base/data
$ mkdir overlay
$ echo "layer 2" > overlay/metadata
$ echo "hello,k8s!" > overlay/data2
③、创建顶层目录(相当于容器层),以及OverlayFS所必需的work工作目录、文件系统挂点;
$ mkdir top work point
④、将分层以overlay文件系统类型挂载到挂载点;
$ mount -t overlay overlay \ -o lowerdir=overlay:base,upperdir=top,workdir=work point
#-t:指定文件系统类型
#-o:指定挂载选项,lowerdir指定底层目录(从高层向低层指定),upperdir指定顶层目录 (也就是容器层),workdir指定工作目录
#最后指定挂载点
⑤、在挂载点目录下可以看到联合目录,目录所处的层级是很重要的,上层的文件会覆盖同名的下层文件;
#可以看到挂载点处显示出的联合目录
$ ll */*
-rw-r--r-- 1 root root 14 ... base/data
-rw-r--r-- 1 root root 10 ... base/metadata
-rw-r--r-- 1 root root 11 ... overlay/data2
-rw-r--r-- 1 root root 10 ... overlay/metadata
-rw-r--r-- 1 root root 14 ... point/data
-rw-r--r-- 1 root root 11 ... point/data2
-rw-r--r-- 1 root root 10 ... point/metadata
#查看具有同名的上下层文件metadata
$ cat point/metadata
layer 2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。