解析Docker镜像大小之谜

CentOS 8的ISO安装文件有10个G这么大,但是我们拉取的centos:8的镜像居然只有231M,这是为什么呢?本文将分析背后的原因。
在这里插入图片描述

镜像的大小

使用docker后,如果我们需要一套CentOS的环境,我们直接拉取centos的镜像,然后以这个镜像运行容器就可以了:
在这里插入图片描述

那是不是这个centos:8镜像就包含了CentOS整个操作系统呢?
最简单直接当然可以这么干!

但是这样的话,镜像文件会非常大!

可以看到CentOS 8.5的ISO安装包文件居然有10G这么庞大!
在这里插入图片描述

但是再看看我们的镜像centos:8,居然只有231M,几乎是完整的ISO文件的1/50!在这里插入图片描述

操作系统内核

我们需要分清楚两个概念:

  1. Linux内核:Linux内核是Linux操作系统的核心, 负责硬件管理。
  2. Linux发行版:Linux发行版是在Linux内核的基础上添加了一些工具软件,相当于定制化。

CentOS和Ubuntu,都是Linux发行版,他们都是基于某一个版本的Linux内核。
在CentOS系统上查看Linux使用的内核:

# cat /proc/version
Linux version 3.10.0-957.1.3.el7.x86_64 ...

Docker实现是基于Linux内核Kernel提供的两个功能模块:

  1. Namespace: 用于容器的隔离,比如在容器A中不能看到容器B的进程
  2. Cgroups: 用于容器的资源控制,比如可以为容器单独指定内存和CPU资源

总之,效果就是要让容器看起来像一个虚拟机。

这也解释了我们在Windows安装时,为什么需要先安装WSL2的原因!
因为WSL2(适用于 Linux 的 Windows 子系统,版本 2)拥有Linux内核!

Linux文件系统的bootfs和rootfs

CentOS的镜像为什么这么小,这就得从Linux的文件系统说起。

典型的Linux文件系统包含两个文件系统,bootfsrootfs

bootfs有包含了Kernel和bootloader,bootloader会引导加载Kernel。
rootfs包含了典型Linux的命令、目录和文件:/dev /bin /etc等
在这里插入图片描述

容器设计

要解决这个问题,镜像就不能包含整个操作系统,只能包含最最基本的部分,其它部分需要由外部提供!
实现时,Docker容器使用的宿主机的内核(Kernel),所以镜像才变得小了很多!

这就是和容器和传统虚拟机最大的区别!

  • 虚拟机架构:右图中的虚拟机架构中,每个虚拟机中都安装了一个完整的操作系统!
  • 容器化架构:左图中的容器化架构中只有一个操作系统,就是Docker容器运行的宿主机的操作系统!宿主机上的容器和宿主机共享一个操作系统内核Kernel!
    在这里插入图片描述
    容器使用是宿主机的内核Kernel。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值