当前位置: 首页 > news >正文

docker镜像的分层结构三

docker的镜像分层

docker里的镜像绝大部分都是在别的镜像的基础上去进行创建的,也就是使用镜像的分层结构。

实验

比如说使用dockerfile去创建一个最简单的hello镜像。创建好对应的dockerfile之后去进行创建:

FROM alpine:latest
MAINTAINER sbb
CMD echo "hello world"

执行了上面的命令我们可以看到存在着两个镜像,其中hello_world是我刚刚创建好的镜像。

$ docker imgaes
alpine
hello_world

docker分层

那么为什么会有两个镜像呢?这是由于docker的镜像分层结构所导致的,如下图所示。

一个docker镜像由多个可读的镜像层组成,然后运行的容器会在这个docker的镜像上面多加一层可写的容器层,任何的对文件的更改都只存在此容器层。因此任何对容器的操作均不会影响到镜像。

如何实现

至于容器如何获取镜像层文件而又不影响到是镜像层的呢?docker是这样实现的?
如果需要获取某个文件,那么容器曾会从上到下去下一层的镜像层去获取文件,如果该层文件不存在,那么就会去下一镜像层去寻找,直到最后一层。
对于用户而言,用户面向的是一个叠加后的文件系统。

而任何对于文件的操作都会记录在容器层,例如说修改文件,容器层会把在镜像层找到的文件拷贝到容器层然后进行修改,删除文件则会在容器层内记录删除文件的记录。

综述

可能会有人会文为什么要这么去做呢?我觉得有两大好处:

    1. 基本上每个软件都是基于某个镜像去运行的,因此一旦某个底层环境出了问题,就不需要去修改全部基于该镜像的软件的镜像,只需要修改底层环境的镜像。
    2. 这个好处也是最大好处,就是可以共享资源,其他相同环境的软件镜像都共同去享用同一个环境镜像,而不需要每个软件镜像要去创建一个底层环境。

转载于:https://www.cnblogs.com/my-blogs-for-everone/p/9995999.html

相关文章:

  • form表单中某个input传入数据库数据默认为on
  • Oracle 未能加载文件或程序集Oracle.DataAccess
  • Java进阶篇设计模式之十二 ---- 备忘录模式和状态模式
  • cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: 解决方案
  • 阿里AI设计师一秒出图,小撒连连惊呼,真相是……
  • 前端进阶课程之模块化(一)CommonJS规范
  • PAT(Basic Level) 乙级练习题 ------ 1031 查验身份证 java
  • bzoj 5210 最大连通子块和——动态DP
  • 理解NGINX的重写break和last,以及location匹配规
  • webpack执行命令参数
  • spark-join算子
  • nodejsvuewebpack
  • jmeter连接数据库之增删改查
  • 设计模式是什么鬼(享元)
  • rsync+sersync实现数据实时同步
  • 【node学习】协程
  • docker python 配置
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • HTTP中的ETag在移动客户端的应用
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • IP路由与转发
  • Iterator 和 for...of 循环
  • java中的hashCode
  • JS专题之继承
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 番外篇1:在Windows环境下安装JDK
  • 关于Flux,Vuex,Redux的思考
  • 前端代码风格自动化系列(二)之Commitlint
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 学习笔记TF060:图像语音结合,看图说话
  • 一些关于Rust在2019年的思考
  • 智能合约开发环境搭建及Hello World合约
  • ​flutter 代码混淆
  • ​LeetCode解法汇总518. 零钱兑换 II
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # 透过事物看本质的能力怎么培养?
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #define、const、typedef的差别
  • (39)STM32——FLASH闪存
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (一)为什么要选择C++
  • (原)Matlab的svmtrain和svmclassify
  • ./configure、make、make install 命令
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET 中让 Task 支持带超时的异步等待
  • .NET和.COM和.CN域名区别
  • .Net接口调试与案例
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .net中生成excel后调整宽度