【云原生 | 从零开始学Docker】四、Docker镜像深度解析

这篇具有很好参考价值的文章主要介绍了【云原生 | 从零开始学Docker】四、Docker镜像深度解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

该篇文章已经被专栏《从零开始学docker》收录

dcoker镜像文件解析,从零开始学Docker,docker,云原生,容器,linux,云计算

写在前面

相信大家经过前面的练习都掌握了基本的指令,在实战操作之后我们就要进行镜像的详解来帮助大家对于docker有一个更深层次的理解,并且会介绍一下我们的容器卷,后面也会用到容器卷进行数据同步!

这章的内容不是很多,也不难,不过这也是非常重要的一个内容。

镜像原理

镜像是什么

镜像是一种轻量级,可执行的独立软件包,用来打包软件环境和基于运行环境开发的软件,它包含某个软件的所有所需内容,包括代码,环境等。

容器与镜像的关系

容器是一个动态的环境,每一层镜像中的文件属于静态内容,然而 Dockerfile 中的ENV、VOLUME、CMD等内容最终都需要落实到容器的运行环境中,而这些内容均不可能直接坐落到每一层镜像所包含的文件系统内容中,那此时每一个docker镜像还会包含json文件记录与容器之间的关系。

镜像加载原理

UnionFS(联合文件系统)

联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。联合文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

联合文件系统有一个特性:它可以一次同时加载多个文件系统,但从外面看起来只能看到一个文件系统。联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

举个例子,比如一个mysql,一个tomcat,tomcat下载了centos,mysql就不用下载了 ,过去就用,并且他是一层一层叠加的。

分层加载

Docker的镜像实际由一层一层的文件系统组成:

bootfs
主要包含bootloader和kernel。bootloader主要是引导加载kernel,完成后整个内核就都在内存中了。此时内存的使用权已由bootfs转交给内核,系统卸载bootfs。可以被不同的Linux发行版公用。
bootfs 启动的时候都要引导加载,加载linux的东西几乎不变,一个内核一个加载器,加载完之后会自动卸载卸载bootfs并把权限交给内核。

rootfs
包含典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同操作系统发行版(Ubuntu,Centos等)。因为底层直接用Host的kernel,rootfs只包含最基本的命令,工具和程序就可以了。
对于一个精简的os,rootfs可以很小,只需要包含基础命令,工具和程序库,因为底层直接用host的kernel,自己只用提供bootfs就行了,对于不同的linux版本,bootfs基本一致。rootfs会有差别,因此不同的版本可以用公用的bootfs。

dcoker镜像文件解析,从零开始学Docker,docker,云原生,容器,linux,云计算

所有的Docker镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的容器层,比如centos是第一层,python是第二层。这样有一个最大的一个好处就是共享资源

比如:有多个镜像都从相同的 base 镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像, 同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。实现了资源共用,所以pull是分层下载,避免重复下载,简单的类比就是虚拟机,你多个虚拟机用同一个镜像。
并且在添加额外的镜像层时,它会始终保持所有镜像组合,比如一个镜像两层,每层三个文件,最终拼起来是六个文件,但是突然来了个新需求,新加了一层,但是这个新加的文件是第二层的一个升级版,此时系统会覆盖一下低级版本,所以还是六个文件。
dcoker镜像文件解析,从零开始学Docker,docker,云原生,容器,linux,云计算
我们pull了一个tomcat,本来的tomcat是只读的,我们启动之后它会在上面加一层,所有操作都在这里,叫容器层。然后再两个一起打包成一个大的镜像(也是新的)底层的东西不会变的,你的操作实际上就是在新加操作。

特点

容器在启动时会在镜像最外层上建立一层可读写的容器层(R/W),而镜像层是只读的(R/O),“容器层”之下的都叫“镜像层”。

如何提交自己的镜像

docker commit 提交容器成为新的副本

docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

通过上篇文章下载的tomcat来示范

dcoker镜像文件解析,从零开始学Docker,docker,云原生,容器,linux,云计算
dcoker镜像文件解析,从零开始学Docker,docker,云原生,容器,linux,云计算

这样就完成了镜像上传,也算是docker的精华,整个环境打包,类似于快照,想保存就commit打包就可以了。

写在最后

创作不易,如果觉得内容对你有帮助,麻烦给个三连关注支持一下我!
目前正在更新的系列:从0开始的蓝桥杯省一之路,云原生系列。
感谢各位的观看,文章掺杂个人理解,如有错误请联系我指出~

dcoker镜像文件解析,从零开始学Docker,docker,云原生,容器,linux,云计算文章来源地址https://www.toymoban.com/news/detail-791214.html

到了这里,关于【云原生 | 从零开始学Docker】四、Docker镜像深度解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【云原生 | 从零开始学Docker】一、Docker的安装,启动以及工作原理

    我们知道,传统的项目开发和运维是两套环境,而且要一一配置环境并且有的时候更新还会导致服务不可用,这就很麻烦了,那么有没有一种很方便不用这么麻烦的技术可以一键安装呢?有!那就是我们的Docker。 现在, 用Docker可以打包应用以及环境到一个可移植的镜像中,

    2024年01月16日
    浏览(39)
  • 【云原生 | 从零开始学Docker】三、Docker实战之安装Nginx和Tomcat

    该篇文章已经被专栏《从零开始学docker》收录 通过前面两章的学习,相信各位朋友们都在自己的服务器上安装了docker了,也熟悉了一些常用的指令,这里我带着大家去做一些简单的实战来让各位更熟悉这些指令!接下来的内容最好跟着敲一遍,记一下步骤,能让你更深刻理解

    2023年04月08日
    浏览(34)
  • 【云原生-Docker】docker镜像制作、上传、dockerfile命令解析

    在实际业务场景中,需要制作多个不同版本进行镜像使用,如maven版本、JDK、openJDK不同使用等,所以需要做多个针对不同版本做不同的镜像。 这里记录一下之前devops用的openJDK版本、某些部门需要用orcle JDK、特此需要做不同的镜像,镜像内包含centos、maven、jdk。 基础镜像 基础

    2024年02月03日
    浏览(36)
  • 深度解析 Docker Registry:构建安全高效的私有镜像仓库

    🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:大数据系列 ✨文章内容:Docker Registry 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 Docker Registry是Docker生态系统中关键的组件,负责存储

    2024年02月04日
    浏览(50)
  • Docker 核心概念深度解析:探索容器、镜像和仓库在Docker生态系统中的重要作用和 应用

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月16日
    浏览(37)
  • 从零开始 | 原生微信小程序开发(二)

    !打好最基础的部分,为后期的项目做好准备 ** 学习注册App函数和Page函数 ** 认识一些常见组件,其余组件使用时查找文档 ** 对于wxss和css,两种区分好   1. 每个小程序都需要在app.js中调用该函数注册小程序实例 注册时,可以绑定对应生命周期函数,执行对应代码 可以做些

    2024年02月11日
    浏览(34)
  • 【云原生 | 从零开始学istio】五、istio灰度发布以及核心资源

    灰度发布也叫金丝雀发布 ,是指通过控制流量的比例,实现新老版本的逐步更替。 比如对于服务 A 有 version1、 version2 两个版本 , 当前两个版本同时部署,但是 version1 比例 90% ,version2 比例 10% ,看运行效果,如果效果好逐步调整流量占比 80~20 ,70~30 ·····10~90 ,0,

    2024年02月01日
    浏览(31)
  • 【云原生 | 从零开始学Kubernetes】二十三、Kubernetes控制器Statefulset

    该篇文章已经被专栏《从零开始学k8s》收录 上一篇文章:kubernetes持久化存储下 点击跳转 StatefulSet 是为了管理有状态服务的问题而设计的 对于StatefulSet中的Pod,每个Pod挂载自己独立的存储,如果一个Pod出现故障,从其他节点启动一个同样名字的Pod,要挂载上原来Pod的存储继续

    2024年02月03日
    浏览(25)
  • 动手学深度学习——线性回归从零开始

    生成数据集 synthetic_data() 读取数据集 data_iter() 初始化模型参数 w, b 定义模型:线性回归模型 linreg() 定义损失函数:均方损失 squared_loss() 定义优化算法:梯度下降 sgd() 进行训练:输出损失 loss 和估计误差

    2024年02月15日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包