Docker 镜像
- 概念
- 轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件
- UnionFS(联合文件系统)
Union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层叠加,
同时可以将不同的目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。
Union文件系统是Docker镜像的基础。镜像可以通过分层来继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像.
特点:
一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,
联合加载会把各层文件系统叠加起来,这样最终的文件系统包含了所有底层的文件和目录。
- Docker镜像加载原理
-
docker的镜像实际上是由一层一层的文件系统组成,这种层级的文件系统叫联合文件系统。
-
bootfs(boot file system)主要包含了bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动是会加载bootfs文件系统。在docker镜像最底层就是bootfs。这一层与我们典型的Linux/Unix系统是一样的。包含boot加载器和内核。当boot加载完成之后整个内核就都在内核中了。此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
-
rootfs(root fie system),在bootfs之上。包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
-
对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了。底层统一使用Host的kernel,自己只需要提供rootfs就行了,所以对于不同的镜像,bootfs基本是一致的,rootfs有所差别,大家一起共用bootfs,所以docker镜像很小,如centos只有200M左右。
- 分层的镜像
-
docker是分层的,在pull镜像时,下载过程中也是一层一层的下载
-
Docker镜像采用分层结构的原因
共享资源 比如:有很多镜像都是从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像即可,运行时也只需要加载一份base镜像在容器中,就可以为所有的镜像提供服务,并且,镜像的每一层都可以共享。
- 特点
Docker镜像都是只读的;
当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常叫做容器层,容器层之下的都叫镜像层。
- Docker镜像的commit操作
- docker commit 提交容器副本使之称为一个新的镜像
- docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签]
如:启动一个tomcat之后把webapps中的docs文档删掉在commit,以后以这个镜像生成容器运行,都会咩有docs这个文档
docker run -it -p 8888:8080
cd webapps
rm -rf docs
docker commit -a="zhazha" -m="delete docs" ca6fd1a3bf91 dokcer/tomcat:1.0