目录
镜像是什么
镜像
是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。
分层的镜像
我们的pull为例,在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载
从这个就可以看出,我们的镜像就是分层的
UnionFS(联合文件系统)(镜像底层)
它支持对文件系统的修改作为一次提交来一层层的叠加;
镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
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等等。
平时我们安装进虚拟机的CentOS都是好几个G,为什么docker这里才200M?
对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供 rootfs 就行了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。
为什么 Docker 镜像要采用这种分层结构呢
镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。
比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;
同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
Docker镜像commit操作案例
·原始的默认Ubuntu镜像是不带着vim命令的
我们创建了一个ubuntu的容器,这个里面是没有vim命令的,意思就是ubuntu镜像里面只是最基本的东西,所以大小才小,我们现在创建了这个容器,但是里面我们需要vim,所以就需要我们自己下载这个;
docker容器内执行上述两条命令:
apt-get update
apt-get -y install vim
以上执行完成之后,就下载了这个vim,我们就可以使用了
·安装完成后,commit我们自己的新镜像,也就是将当前的容器打包成为一个新的镜像,以后其他人拿到这个镜像,那么里面就有vim功能了;
执行以下的命令,就可以将容器打包为镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
总结
Docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像。类似Java继承于一个Base基础类,自己再按需扩展。
新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层
将自己的镜像push到阿里云
·阿里云开发者平台
·https://promotion.aliyun.com/ntms/act/kubernetes.html
镜像仓库里面有详情
根据人家给的命令,你就可以将自己的镜像上传到这个阿里云了