Docker 镜像
Docker镜像是什么
- Docker 容器的运行是基于宿主机的内核,通过linux的namespaces来实现隔离,相对于虚拟机而言降低了硬件资源的性能损耗,且具备一定程度上的应用隔离效果。
- 镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
- 通过最小化的镜像方式运行docker 容器,相对于虚拟机而言大幅度降低非生产力进程的资源消耗。
- 所有应用,直接打包成docker镜像,就可以在其他服务器上直接运行起来!
- Docker 客户端启动一个容器时,通过TCP或者unix socket连接docker daemon。如果需要启动的容器镜像本地不存在,则从registry来拉取到本地,然后根据传递的CMD或者默认的CMD来启动容器。
Docker镜像加载原理
联合文件系统(UnionFS)
- UnionFS( 联合文件系统) : Union文件系统(UnionFS )是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtualfilesystem)。
- Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
- 特性︰一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
- 我们下载的时候看到的一层层的就是联合文件系统
镜像加载原理
- docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS.
- bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统
- 在Docker镜像的最底层是bootfs,这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
- rootfs (root file system),在bootfs之上。包含的就是典型Linux.系统中的/dev, /proc, /bin, /etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu , Centos等等。
- 一开始内核里什么都没有,操作一个命令下载debian<