2019独角兽企业重金招聘Python工程师标准>>>

上一节我们介绍了最小的 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

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

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

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

而对于一个精简的 OS,rootfs 可以很小,只需要包括最基本的命令、工具和程序库就可以了。相比其他 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。

这里需要说明的是:

  1. base 镜像只是在用户空间与发行版一致,kernel 版本与发型版是不同的。
    例如 CentOS 7 使用 3.x.x 的 kernel,如果 Docker Host 是 Ubuntu 16.04(比如我们的实验环境),那么在 CentOS 容器中使用的实际是是 Host 4.x.x 的 kernel。 

    ① Host kernel 为 4.4.0-31
    ② 启动并进入 CentOS 容器
    ③ 验证容器是 CentOS 7
    ④ 容器的 kernel 版本与 Host 一致

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

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

转载于:https://my.oschina.net/u/2397560/blog/891048

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

  1. Dockerfile 构建镜像 - 每天5分钟玩转容器技术(13)

    Dockerfile 是一个文本文件,记录了镜像构建的所有步骤. 第一个 Dockerfile 用 Dockerfile 创建上节的 ubuntu-with-vi,其内容则为: 下面我们运行 dock ...

  2. 每天5分钟玩转容器技术 ---- 系列文章

    通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136) 定时执行 Job - 每天5分钟玩转 Docker 容器技术(135) 并行执行 Job - 每天5分钟玩转 ...

  3. 转 容器生态系统 (续) - 每天5分钟玩转容器技术(3)

    每天5分钟玩转容器技术(3) http://www.cnblogs.com/CloudMan6/p/6718464.html 叫板OpenStack:用Docker实现私有云 http://www.c ...

  4. 【视频】运行第一个容器 - 每天5分钟玩转容器技术(5)

    [视频]运行第一个容器 - 每天5分钟玩转容器技术(5) CloudMan 2017-04-21 第5篇 [视频]运行第一个容器 这两天制作的视频,安装 Docker 并运行第一个容器,希望对大家有帮 ...

  5. 镜像的分层结构 - 每天5分钟玩转容器技术(11)

    Docker 支持通过扩展现有镜像,创建新的镜像. 实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的.比如我们现在构建一个新的镜像,Docke ...

  6. 容器生态系统 - 每天5分钟玩转容器技术(2)

    对于像容器这类平台级别的技术,通常涉及的知识范围会很广,相关的软件,解决方案也会很多,初学者往往容易迷失. 那怎么办呢? 我们可以从生活经验中寻找答案. 当我们去陌生城市旅游想了解一下这个城市一般我们 ...

  7. 容器生态系统 (续) - 每天5分钟玩转容器技术(3)

    容器生态系统包含核心技术.平台技术和支持技术三个方面.上一节我们讨论了核心技术,今天讨论另外两个部分. 容器平台技术 容器核心技术使得容器能够在单个 host 上运行.而容器平台技术能够让容器作为集群 ...

  8. Docker 架构详解 - 每天5分钟玩转容器技术(7)

    Docker 的核心组件包括: Docker 客户端 - Client Docker 服务器 - Docker daemon Docker 镜像 - Image Registry Docker 容器 ...

  9. 制作 OpenStack Linux 镜像 - 每天5分钟玩转 OpenStack(151)

    这是 OpenStack 实施经验分享系列的第 1 篇. OpenStack 的 instance 是通过 Glance 镜像部署的,所以准备镜像是必须要做的工作.本节介绍 Linux 镜像的制作方法 ...

最新文章

  1. 浅析epoll – epoll例子以及分析 - C++爱好者博客
  2. C# 获取QQ群数据的实现
  3. 查看删除的帐号的DN名称(活动目录快照配置管理系列六)
  4. 随风摆动效果_扫盲贴!节目中的AR虚拟效果,使用物理引擎后有什么不同?
  5. 如何发挥ERP系统中的财务监控职能?
  6. unity案例入门(二)(坦克大战)
  7. leetcode 376. 摆动序列(dp)
  8. 文章发表5天就被举报学术不端,该知名大学迅速处理:停职半年!
  9. 港中文等提出:开放世界实体分割
  10. Java配置文件找不到指定_转载:Java项目读取配置文件时,FileNotFoundException 系统找不到指定的文件,System.getProperty(user.dir)的理解...
  11. English trip -- VC(情景课)1 F Another view
  12. C# matlab中标准差计算方法
  13. Steam DS4手柄
  14. 物联网嵌入式高级C语言流行框架、学习路线图
  15. pathinfo 伪静态 详细解析PATH_INFO 和 ORIG_PATH_INFO技术分享
  16. 直播间几万人助力砍价到小数点后6位,依旧失败,拼多多再陷“砍价”风波
  17. 如何给word文档方格打勾
  18. docker Docs
  19. 学习Python要学习哪些课程?
  20. 判断一个数是否为两个素数乘积_如何高效筛选素数?

热门文章

  1. ycsb 测试验证模式的mongodb
  2. System.ArgumentException: 输入数组长度大于此表中的列数。
  3. C#ASP.NET执行BAT批处理代码
  4. struts2.0和jQuery1.5的json问题
  5. 7/100. Move Zeroes
  6. 上白泽慧音(tarjan,图的染色)
  7. AtCoder Regular Contest 058
  8. SQL Server 取日期时间部分
  9. 解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题
  10. 不同类型社交应用发展分析