| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 四、Docker镜像(容器种子)的内部结构(《每天5分钟玩转Docker容器技术》知识点点总结(第三章第一节)) -> 正文阅读 |
|
[系统运维]四、Docker镜像(容器种子)的内部结构(《每天5分钟玩转Docker容器技术》知识点点总结(第三章第一节)) |
????????一颗种子是怎么样构成的。一个农民可以不了解但改良培育新品种的科学家就必须要了了解。一个想要开发Docker镜像的程序员,了解Docker镜像的内部结构也同样重要。 ? ? ? ? 软件运行是抽象的,是无法直接看见的。我们需要一媒介来才能看见。我们选择的媒介就是Dockerfile。Dockerfile是镜像的描述文件,定义了如何构建Docker镜像。 1、最简单的Docker镜像????????我们先来一个最简单的Docker镜像:hello-worl。我们来看看他的Dockerfile。 第一步:FROM scratch ,从零开始构建。 第二步:COPY hello/? ,将文件“hello/”复制到镜像的根目录。 第三步:CMD["/hello"]容器启动时,执行/hello。这个镜像只有hello-worl这一个可执行程序,非常的简单。 2、base镜像????????但在实际的开发过程中就没有这么简单了,往往需要操作系统环境。这样的镜像就被称之为base镜像。我们现在来看看常规的Linux操作系统的结构是怎么样的?结构见下图。 ????????我们来看看这个结构最下面一层的是Kernel和bootfs。Kernel是内核空间而bootfs是用来引导Kernel(内核空间)。底层结构上面的rootfs指的就是用户空间。不同版本Linux发行版的主要区别就是rootfs。在base镜像里面底层的Kernel和bootfs都是由Host(主机,宿主)提供的。rootfs则是base镜像自己带来的。但是这回出现base镜像rootfs(用户空间)与发行版一致,Kernel版本与发行版不一样的情况。由于所有的容器都是使用的是同一个Kernel,就造成容器没办法升级Kernel。如果应用,服务只能在特定的Kernel下运行,建议使用虚拟机。下图就是不同的base镜像同时运行的结构图。 因为没有了Kernel和bootfs这一层,base镜像的大小往往比常规的操作系统更小。例如CentOS镜像文件,大小见下图。 3、镜像的分层结构??????? 只安装了操作系统的镜像就可以了?我们运行程序往往还需要一些安装和配置一些软件。就这样我们的种子就变成了完整的结构了。举个例子,看看这个完整版的种子的Dockerfile是怎么样的。 第一步;从debian base镜像中创建。 第二步:安装emacs编辑器。 第三步:安装apache2。 第三步:通过容器运行bash。 流程见下图: ????????为什么要用这种分层组装的方式,把个个小的镜像组装才成为大的镜像?因为这样可以提高效率。每一个base镜像,每一个小的Image只需要在硬盘里面保存一份在内存内加载一份,这样就大大提高了效率。 ????????有人会问这样什么都是共享的,通过Docker镜像生成的容器怎么保存自己的信息,怎么保证每个容器的独立,不被其他容器干扰呢?在原来的基础上加一层容器层。而其他的层被称之为镜像层。 ??????? 怎么理解呢?其实这里面的原理更网吧里面的无盘系统类似。网吧的客户机的操作系统,软件都是从网管电脑里面读取到我们开的机子的内存上,无论我们是怎么操作,我们只能影响到机子的内存,无法影响到网关的电脑硬盘里面。同理我们创建容器的时候,base镜像,Image都是从硬盘,内存里面获取的。我们能影响的只有容器层而不影响镜像层。他是怎么实现的呢? ??????? 新增文件:直接把新增的文件保存在容器层里面。 ??????? 查询文件:从上到下逐步查询,把查到的东西读入内存。 ??????? 修改文件:先查询该文件,把查到的文件复制到容器层并修改。 ??????? 删除文件:先查询该文件,在容器层记录下删除操作。 4、声明 本文图片全部来自《每天5分钟玩转Docker容器技术》电子书。如果有侵权,本人立刻删除图片。谢谢! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 1:46:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |