base 镜像有两层含义:

  1. 不依赖其他镜像,从 scratch 构建。
  2. 其他镜像可以之为基础进行扩展。

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

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

    1. 下载 docker pull centos
    2. 查看镜像信息 docker images centos

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

rootfs

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

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

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

而对于一个精简的 OS,rootfs 可以很小,只需要包括最基本的命令、工具和程序库就可以了。

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

  CentOS 镜像的 Dockerfile 的内容:

 FROM scratch
ADD centos--docker.tar.xz /
CMD ["/bin/bash"]

第二行 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。

base 镜像只是在用户空间与发行版一致,kernel 版本与发型版是不同的。

  1. Host kernel 为 4.4.0-131
  2. 启动并进入 CentOS 容器并验证容器是 CentOS 7
  3. 容器的 kernel 版本与 Host 一致

小结

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

------------------引用来自------------------

https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587585&idx=1&sn=bcba35750ffe83aa31db0bfe1ffd43dd&chksm=8d308098ba47098e666fa7eb83c11a266c658267aee656231a7e47eb5caf0459e3ceafae65f4&scene=21#wechat_redirect

最新文章

  1. error LNK2019 无法解析的外部符号 __imp__accept@12
  2. C语言程序设计入门学习五步曲(转发)
  3. android:onClick vs setOnClickListener
  4. Yii2的深入学习--yii\base\Object 类
  5. Wilddog - 野狗统计
  6. Create Function
  7. 天津Uber优步司机奖励政策(2月1日~2月7日)
  8. java_设计模式_工厂模式_Factory Pattern(2016-08-04)
  9. .NET MVC 插件化框架支持原生MVC的Area和路由特性
  10. jquery的click事件对象试解
  11. BST 二叉搜索树
  12. 剑指offer编程题Java实现——面试题12打印1到最大的n位数
  13. 通过HashSet达到对象集去重的实现(jdk1.8)
  14. 为什么MySQL数据库索引选择使用B+树?
  15. expdp ORA-39070:Unable to open the log file
  16. topcoder srm 661 div1
  17. python3.6 ImportWarning: can't resolve package from __spec__ or __package__, falling back on __name__ and __path__
  18. mysql/mariadb学习过程中出现的问题与解决
  19. VS2005环境下采用makefile编译、使用libjpeg.lib函数库
  20. D - 小木棒

热门文章

  1. MacOS Docker 安装
  2. Bitbucket备份恢复
  3. Educational Codeforces Round 40 (Rated for Div. 2) Solution
  4. CEF3开发者系列之Cookies管理和共享
  5. 软件调用QML的两种方式
  6. uniGUI试用笔记(八)
  7. 【做题】CFedu41G. Partitions——推式子
  8. android 控件获取 获取焦点
  9. OpenCV学习一《Linux下安装OpenCV》
  10. 【C#】Using的一个比较好的语言文字解释