文章目录
镜像概念
镜像是docker容器的基石,容器是镜像的运行实例,有了镜像才能启动容器
- 查看镜像信息
[root@foundation0 ~]# docker images rhel7
REPOSITORY TAG IMAGE ID CREATED SIZE
rhel7 latest 0a3eb3fde7fd 4 years ago 140 MB
在列出的信息中,可以看到几个字段信息:
- 来源于哪个仓库,比如rhel7
- 镜像的标签信息,比如latest
- 镜像的ID号(唯一)
- 创建时间
解释为什么镜像以MB为单位
为什么一个rhel7只有140MB
Linux操作系统由内核空间和用户空间组成(rootfs bootfs)
内核空间是kernel,Linux刚启动的时候会加载bootfs文件系统,之后bootfs会被卸载掉
用户空间的文件系统是rootfs,包括我们熟悉的/dev,/proc,/bin 等目录
对于base镜像来说,底层直接用host的kernel,自己只需要提供rootfs就行了
而对于一个精简版的os,rootfs可以很小,只需要包括最基本的命令,工具和程序就可以了
- base镜像补充
- base镜像提供的是最小安装的Linux发行版本
- 支持运行多种Linux OS 不同的Linux发行版的区主要就是
rootfs比如Ubuntu 使用upstat 管理服务 apt管理软件包 而centos 7 使用systemd和yum 这些都是用户空间上的区别 Linux kernel差别不大
注意
容器的内核版本和宿主机的版本是一致的,可通过:
uname -r来查看 - 所有容器都共用host的kernel,在容器中没办法对kernel升级,如果容器对kernel有要求(比如某个应用只能在某个kernel版本下运行),则不建议用容器,这种场景虚拟机更适合
镜像的分层结构
- 实际上,docker hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的
- 新的镜像是从base镜像一层一层叠加生成的,每安装一个软件,就在现有的基础增加一层

为什么docker镜像要采用这种分层结构呢?
最大的一个好处是:共享资源
- 比如:有多个镜像都从相同的base镜像构建而来,那么docker host只需在磁盘上保存一份base镜像:同时内存中也只需加载一份base镜像,就可以为所有容器服务了,而其镜像的每一层都可以被共享
那么一个疑问是:如果多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如/etc下的

本文介绍了Docker镜像的基础知识,包括镜像的MB单位原因、分层结构及其优势。重点讲解了Copy-on-Write(拷贝写实)特性,说明了容器如何在不修改镜像的基础上进行读写操作,并通过实例展示了镜像的构建过程。此外,文章还提到了Docker镜像构建的潜在问题和效率考虑。
最低0.47元/天 解锁文章
2332

被折叠的 条评论
为什么被折叠?



