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

简介:

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

base 镜像有两层含义

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

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

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

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

docker pull centos

查看镜像信息

52.png

镜像大小不到 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。

这里需要说明的是

  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 版本下运行则不建议用容器这种场景虚拟机可能更合适。

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

二维码+指纹.png

本文转自CloudMan6 51CTO博客,原文链接:http://blog.51cto.com/cloudman/1921339

相关文章
|
存储 容器
46.[HarmonyOS NEXT RelativeContainer案例三] 打造自适应容器:内容驱动的智能尺寸调整技术
在HarmonyOS NEXT的UI开发中,创建能够根据内容自动调整尺寸的容器是实现灵活布局的关键。RelativeContainer结合自适应尺寸设置,可以实现内容驱动的智能尺寸调整,使UI更加灵活且易于维护。本教程将详细讲解如何创建自适应尺寸的RelativeContainer,帮助你掌握这一实用技术。
482 5
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
1140 6
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
778 16
|
Ubuntu 网络安全 PHP
如何使用vscode的Docker插件管理ubuntu 拉取服务器的镜像以及创建容器
本测试镜像旨在记录使用vscode的Docker插件拉取病创建Dockerfile,以及拉取镜像。
|
Kubernetes Cloud Native 持续交付
Docker:轻量级容器化技术解析
Docker:轻量级容器化技术解析
|
运维 测试技术 Docker
Docker:轻量级容器化技术革命
Docker:轻量级容器化技术革命
|
关系型数据库 MySQL Docker
|
弹性计算 Java Maven
从代码到容器:Cloud Native Buildpacks技术解析
Cloud Native Buildpacks(CNB)是一种标准化、云原生的容器镜像构建系统,旨在消除手动编写Dockerfile,提供可重复、安全且高效的构建流程。它通过分层策略生成符合OCI标准的镜像,实现应用与基础镜像解耦,并自动化依赖管理和更新。阿里云应用管理支持通过CNB技术一键部署应用至ECS,简化构建和运行流程。
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1552 108
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
964 57