base 镜像 - 每天5分钟玩转容器技术(10)
2019独角兽企业重金招聘Python工程师标准>>>
上一节我们介绍了最小的 Docker 镜像,本节讨论 base 镜像。
base 镜像有两层含义:
不依赖其他镜像,从 scratch 构建。
其他镜像可以之为基础进行扩展。
所以,能称作 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。
这里需要说明的是:
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 一致容器只能使用 Host 的 kernel,并且不能修改。
所有容器都共用 host 的 kernel,在容器中没办法对 kernel 升级。如果容器对 kernel 版本有要求(比如应用只能在某个 kernel 版本下运行),则不建议用容器,这种场景虚拟机可能更合适。
下一节我们讨论镜像的分层结构。
转载于:https://my.oschina.net/u/2397560/blog/891048
base 镜像 - 每天5分钟玩转容器技术(10)相关推荐
- Dockerfile 构建镜像 - 每天5分钟玩转容器技术(13)
Dockerfile 是一个文本文件,记录了镜像构建的所有步骤. 第一个 Dockerfile 用 Dockerfile 创建上节的 ubuntu-with-vi,其内容则为: 下面我们运行 dock ...
- 每天5分钟玩转容器技术 ---- 系列文章
通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136) 定时执行 Job - 每天5分钟玩转 Docker 容器技术(135) 并行执行 Job - 每天5分钟玩转 ...
- 转 容器生态系统 (续) - 每天5分钟玩转容器技术(3)
每天5分钟玩转容器技术(3) http://www.cnblogs.com/CloudMan6/p/6718464.html 叫板OpenStack:用Docker实现私有云 http://www.c ...
- 【视频】运行第一个容器 - 每天5分钟玩转容器技术(5)
[视频]运行第一个容器 - 每天5分钟玩转容器技术(5) CloudMan 2017-04-21 第5篇 [视频]运行第一个容器 这两天制作的视频,安装 Docker 并运行第一个容器,希望对大家有帮 ...
- 镜像的分层结构 - 每天5分钟玩转容器技术(11)
Docker 支持通过扩展现有镜像,创建新的镜像. 实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的.比如我们现在构建一个新的镜像,Docke ...
- 容器生态系统 - 每天5分钟玩转容器技术(2)
对于像容器这类平台级别的技术,通常涉及的知识范围会很广,相关的软件,解决方案也会很多,初学者往往容易迷失. 那怎么办呢? 我们可以从生活经验中寻找答案. 当我们去陌生城市旅游想了解一下这个城市一般我们 ...
- 容器生态系统 (续) - 每天5分钟玩转容器技术(3)
容器生态系统包含核心技术.平台技术和支持技术三个方面.上一节我们讨论了核心技术,今天讨论另外两个部分. 容器平台技术 容器核心技术使得容器能够在单个 host 上运行.而容器平台技术能够让容器作为集群 ...
- Docker 架构详解 - 每天5分钟玩转容器技术(7)
Docker 的核心组件包括: Docker 客户端 - Client Docker 服务器 - Docker daemon Docker 镜像 - Image Registry Docker 容器 ...
- 制作 OpenStack Linux 镜像 - 每天5分钟玩转 OpenStack(151)
这是 OpenStack 实施经验分享系列的第 1 篇. OpenStack 的 instance 是通过 Glance 镜像部署的,所以准备镜像是必须要做的工作.本节介绍 Linux 镜像的制作方法 ...
最新文章
- 浅析epoll – epoll例子以及分析 - C++爱好者博客
- C# 获取QQ群数据的实现
- 查看删除的帐号的DN名称(活动目录快照配置管理系列六)
- 随风摆动效果_扫盲贴!节目中的AR虚拟效果,使用物理引擎后有什么不同?
- 如何发挥ERP系统中的财务监控职能?
- unity案例入门(二)(坦克大战)
- leetcode 376. 摆动序列(dp)
- 文章发表5天就被举报学术不端,该知名大学迅速处理:停职半年!
- 港中文等提出:开放世界实体分割
- Java配置文件找不到指定_转载:Java项目读取配置文件时,FileNotFoundException 系统找不到指定的文件,System.getProperty(user.dir)的理解...
- English trip -- VC(情景课)1 F Another view
- C# matlab中标准差计算方法
- Steam DS4手柄
- 物联网嵌入式高级C语言流行框架、学习路线图
- pathinfo 伪静态 详细解析PATH_INFO 和 ORIG_PATH_INFO技术分享
- 直播间几万人助力砍价到小数点后6位,依旧失败,拼多多再陷“砍价”风波
- 如何给word文档方格打勾
- docker Docs
- 学习Python要学习哪些课程?
- 判断一个数是否为两个素数乘积_如何高效筛选素数?