zoukankan      html  css  js  c++  java
  • docker学习系列(三):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. 这个好处也是最大好处,就是可以共享资源,其他相同环境的软件镜像都共同去享用同一个环境镜像,而不需要每个软件镜像要去创建一个底层环境。

  • 相关阅读:
    va_list va_start va_end va_arg 解决变参问题
    标准输出文件
    Qt QDataTime QString 两个类的使用
    联合开发网站
    iOS LLDB调试器和断点调试
    Wireshark 网络抓包工具Wireshark的使用
    linux 操作系统下c语言编程入门
    iOS 应用崩溃日志分析
    iOS sqlite3数据库解析
    iOS 解析手势识别(Gesture Recognizers)
  • 原文地址:https://www.cnblogs.com/s-b-b/p/8533936.html
Copyright © 2011-2022 走看看