对于docker自知道安装运行那是不行的,毕竟如今残酷的社会随便面试都问你某某源码有看过吗?所以我们有必要对docker进行深度学习。

首先我们知道docker基本就是三块大东西:容器,镜像,仓库

仓库我们就不说了基本和maven仓库雷同,主要就是存放镜像的仓库

容器也不怎么好说,因为他就是一个运行的镜像,所以归结起来都要到镜像这来,所以镜像是重头戏。

1、docker镜像是什么

官方解析:镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

UnionFS(联合文件系统):是一种分层,对文件系统的修改作为一次提交来一层层叠加,同是可以将不同的目录挂载到同一个虚拟文件系统下,一次可同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

docker镜像就是以union为基础,所以docker镜像说白了就是一个分层叠加的文件系统(有点像git里面每次提交代码一次次迭代的形式,最终我们的正式版运行也是包含之前的修改)

2. Docker镜像加载原理

上面我们知道了docker镜像就是一层一层的文件,那每一层道理是什么呢??

我们都知道任何一款应用软件都要运行在系统上才可以,就像我们平常的淘宝,微信,微博都是运行在安卓或者Mac或者windows,linux上,在联想我们平常的开发mysql,nginx,redis,hadoop都是安装在linux上的,那为什么docker的容器可以运行mysql呢>>>

所以很容易明白docker镜像里面应该是有类似系统的东西,没错前面我们说过docker就是一个精简本的系统,精简到他只有系统的必要文件bootfs(boot file system) 主要包含bootloader和kernel,(如果是做嵌入式行业的应该很了解,在这就不详解)还有个rootfs (root file system) 就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件

在linux的世界里面有一句话“一切皆文件”

所以docker镜像加载原理可理解为:

bootloader主要是引导加载kernel,--->>kernel加载好了就会初始化rootfs这时候linux系统就启动好了----->>应用app,

分层结构特点:

Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部。

这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。

如图理解:

docker映像url docker映像原理_docker