镜像是什么
[post cid=“730” /]
√> 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,包含运行某个软件需要的所有内容,包括代码、库、环境变量和配置文件。
如何得到镜像
- 朋友拷贝
- 镜像仓库下载
- 自己制作DockerFile
文件系统与分层原理
关于Docker,最重要的就是他的文件系统和分层原理
UnionFS(联合文件系统)
这是一种分层、轻量且高性能文件系统,支持对文件系统修改作为一次提交来层层叠加,同时将不同目录挂在到同一个虚拟文件系统下,Union文件系统是Docker 镜像基础。镜像可以通过分层来继承,基于基础镜像,可以制作各种具体镜像。
下面将从镜像加载步骤一步步解释这个概念
Docker镜像加载原理
镜像 - 实际由一层层的文件系统组成
UnionFS
- bootfs(boot file system) :主要包括bootloader和kernel,bootloader主要引导加载kernel,linux刚启动会加载bootfs文件系统,最底层是bootfs。这一层和我们典型的Linux/Unix系统一样,包含boot加载器和内核,boot加载完成整个内核就在内存中,此时内存使用权由bootfs交给内核。
- rootfs(root file system):在bootfs之上,包含的就是典型Linux系统中的/dev/proc/bin/etc 等标准目录和文件,rootfs就是各种不同的操作系统发行版。
x> 为什么虚拟机centos体量都几个G,而docker镜像只有200-300M
!> 因为这是一个精简的OS,rootfs可以很小,只需要提供基本的命令、工具和程序库,底层直接使用Host的kernel,只要提供rootfs,对不同的linux发行,bootfs基本一致,rootfs有差别,共用bootfs。
镜像分层原理
!> 为什么使用分层原理?
最大的好处莫过于实现了资源的共享,有很多相同镜像基于不同的Base镜像构建而来,那么宿主机只用保存一份Base镜像,只需要把一个Base镜像加载到内存。就可以为所有镜像服务。
你可以查看你镜像的分层
docker inspect [镜像id] # 查看分层
下面是我查看tomcat的分层,Type:layers
理解:
所有的Docker镜像起始于一个基础镜像层,进行修改和增加新的镜像层的时候,就会在当前镜像层上面添加一个新的镜像层。
下图就展示了一个3层镜像。
理解:
所有的Docker镜像起始于一个基础镜像层,进行修改和增加新的镜像层的时候,就会在当前镜像层上面添加一个新的镜像层。
下图就展示了一个3层镜像。
下面是2个镜像层,6个文件,每个镜像层有3个文件
当我们想修改其中一个文件时:
上层文件系统中的文件覆盖了下层的文件,使得文件的更新版本,作为一个新镜像层添加到镜像中。
特点:
Docker镜像都是只读的,容器启动的时候,一个新的可写层被加载到镜像顶部
这层被称为容器层,容器层之下的都叫镜像层。
Commit指令
如果我想对一个镜像进行修改,但拉取下来的镜像都是只读的,所以我们的操作就是创建一个容器,此时镜像上面新创建了一个容器层,此时我们将这个容器层和镜像打包生成一个全新镜像。
下面示例为tomcat修改后创建一个新的镜像
- Docker commit 提交一个新的镜像
docker commit -m=“new tomcat app” -a=”lzl” [id] tomcat:02
[post cid=“744” /]