base 镜像 - 每天5分钟玩转容器技术(10)

网友投稿 681 2023-03-09

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

base 镜像 - 每天5分钟玩转容器技术(10)

上一节我们介绍了最小的 Docker 镜像本节讨论 base 镜像。

base 镜像有两层含义

1、不依赖其他镜像从 scratch 构建。

2、其他镜像可以之为基础进行扩展。

所以能称作 base 镜像的通常都是各种 Linux 发行版的 Docker 镜像比如 Ubuntu, Debian, CentOS 等。

我们以 CentOS 为例考察 base 镜像包含哪些内容。下载镜像

docker pull centos

查看镜像信息

镜像大小不到 200MB。

等一下

一个 CentOS 才 200MB

平时我们安装一个 CentOS 至少都有几个 GB怎么可能才 200MB !

相信这是几乎所有 Docker 初学者都会有的疑问包括我自己。下面我们来解释这个问题。

Linux 操作系统由内核空间和用户空间组成。如下图所示

rootfs

内核空间是 kernelLinux 刚启动时会加载 bootfs 文件系统之后 bootfs 会被卸载掉。

用户空间的文件系统是 rootfs包含我们熟悉的 /dev, /proc, /bin 等目录。

对于 base 镜像来说底层直接用 Host 的 kernel自己只需要提供 rootfs 就行了。

而对于一个精简的 OSrootfs 可以很小只需要包括最基本的命令、工具和程序库就可以了。相比其他 Linux 发行版CentOS 的 rootfs 已经算臃肿的了alpine 还不到 10MB。

我们平时安装的 CentOS 除了 rootfs 还会选装很多软件、服务、图形桌面等需要好几个 GB 就不足为奇了。

base 镜像提供的是最小安装的 Linux 发行版。

下面是 CentOS 镜像的 Dockerfile 的内容

第二行 ADD 指令添加到镜像的 tar 包就是 CentOS 7 的 rootfs。在制作镜像时这个 tar 包会自动解压到 / 目录下生成 /dev, /porc, /bin 等目录。

注可在 Docker Hub 的镜像描述页面中查看 Dockerfile 。

支持运行多种 Linux OS

不同 Linux 发行版的区别主要就是 rootfs。

比如 Ubuntu 14.04 使用 upstart 管理服务apt 管理软件包而 CentOS 7 使用 systemd 和 yum。这些都是用户空间上的区别Linux kernel 差别不大。

所以 Docker 可以同时支持多种 Linux 镜像模拟出多种操作系统环境。

上图 Debian 和 BusyBox一种嵌入式 Linux上层提供各自的 rootfs底层共用 Docker Host 的 kernel。

这里需要说明的是

容器只能使用 Host 的 kernel并且不能修改。

所有容器都共用 host 的 kernel在容器中没办法对 kernel 升级。如果容器对 kernel 版本有要求比如应用只能在某个 kernel 版本下运行则不建议用容器这种场景虚拟机可能更合适。

下一节我们讨论镜像的分层结构。

上一篇:镜像的分层结构 - 每天5分钟玩转容器技术(11)
下一篇:最小的镜像 - 每天5分钟玩转容器技术(9)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~