镜像:是一种轻量级、可执行的的独立软件包,它包含某个软件所需的所有内容,我们把应用程序和配置依赖打包形成一个可交付的运行环境(包括代码、运行所需要的库、环境变量和配置文件),这个打包好的运行环境就是image镜像文件。通过这个镜像生成docker容器实例。
镜像是分层的。UnionFS(联合文件系统)是一种分层、轻量级并且高性能的文件系统,他支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一虚拟文件系统下,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等等。
镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。根据自己需要追加其他功能。
Docker镜像层都是只读的,容器层是可写的 当容器启动时,一个新的可写层被加载到镜像的顶部。 这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。 所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。
案例演示:
1.ubuntu基础版本安装vim:apt-get update apt-get -y install vim
2.提交升级后放入镜像:docker commit -m="vim add" -a="yzt" 19c478f0e58f yanzhit/myubuntu:1.0
3.重新启动新镜像:docker run -it f4739d304954 /bin/bash集成了vim功能。