docker镜像原理之联合文件系统

镜像是什么?

镜像是一种轻量级、可执行的独立软件保,用来打包软件运行环境和基于运行环境开发的软件

他包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件

所有应用都不要服务器去部署,都可以直接打包 docker 镜像,就不用在部署一系列环境了,就可以直接跑起来

那么如何得到镜像呢?

1.从远程仓库下载(在docker官网)

2.朋友拷贝给你

3.自己制作一个镜像 DockerFile

UnionFS(联合文件系统)   就是一层一层的概念

Union文件系统(UnionFs)是一种分层、轻量级并且高性能的文件系统他支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下

Union文件系统是 Docker 镜像的基础可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

docker镜像加载原理

Docker 的镜像实际上由一层一层的文件系统组成,这种层级的文件系统叫 UnionFS,就是联合文件系统 

boots(boot file system)主要包含 bootloader(启动装载) 和 Kernel(内核), bootloader 主要是引导加载 kernel, Linux 刚启动时会加 bootfs 文件系统,在 Docker 镜像的最底层是 boots,几乎不变,这一层与我们典型的 Linux/Unix 系统是一样的,包含 bootloader 和 Kernel,当 boot 加载完成之后,整个内核就都在内存中了,此时内存的使用权已由 bootfs 转交给内核,此时系统也会卸载 bootfs

注意:总结上句话的意思就是我们电脑从黑屏到开机这个过程,就是加载,就是共用的

rootfs(root file system),在 bootfs之上,包含的就是典型 Linux 系统中的 /dev、/proc/bin、/etc 等标准目录和文件rootfs 就是各种不同的操作系统发行版,比如 Ubuntu, Centos 等等

docker镜像原理之联合文件系统_第1张图片

docker镜像体积为啥这么小?

因为linux是由内核空间和用户空间组成的。内核空间是kernel,linux刚启动的时候会加载bootfs,之后bootfs被卸载掉。用户空间是rootfs,包含我们常用的var,bin等目录。

因为底层直接用主机的 kernel,自己只需要提供 rootfs 就可以了

由此可见对于不同的 Linux 发行版, boots 基本是一致的, rootfs 会有差別,因此不同的发行版可以公用 bootfs

所以虚拟机启动是分钟级别,容器是秒级!

分层理解 (采用分层就是共享资源)

比如下载一个redis镜像

docker镜像原理之联合文件系统_第2张图片

看一下刚下载的redis的一些操作 docker image inspect redis:latest

docker镜像原理之联合文件系统_第3张图片

docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像顶部,这一层就是我们通常说的容器层,容器之下的都叫镜像层

假如tomcat有6个层,你去pull,去下载的时候就是一层一层的下载,假如有一层已经有了,他不会重复下载,直接拿着用了,当你run的时候就变成了2层,一层是镜像层(就是你下载好的),另一层就是容器层,你所有操作都是基于容器层的

docker镜像原理之联合文件系统_第4张图片

创建镜像 (通过容器创建镜像)

默认镜像webapps没有东西,这就是为啥自己做镜像的原因

1.启动

docker镜像原理之联合文件系统_第5张图片

2.

3.进入

4.把webapps.dist里面的东西拷贝到webapps中  因为镜像原因,官方的镜像默认   webapps下没有文件 ,我自己拷贝进入

5.测试

docker镜像原理之联合文件系统_第6张图片

 

6.将我们修改过的容器通过commit提交为一个镜像,以后我们就可以使用这个修改过的镜像

就是通过容器创建镜像

docker commit -m=""提交描述信息 -a="作者" 容器id 目标镜像:版本号   

docker镜像原理之联合文件系统_第7张图片

查看自己镜像

docker镜像原理之联合文件系统_第8张图片

你可能感兴趣的:(docker,容器,运维)