Docker镜像--镜像结构 镜像特性(copy-on-write)

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

镜像概念

镜像是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下的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值