IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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容器技术》电子书。如果有侵权,本人立刻删除图片。谢谢!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-07 00:10:14  更:2021-07-07 00:10:41 
 
开发: 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年11日历 -2024/11/25 16:51:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码