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

  • 相关阅读:
    PAT B1045 快速排序 (25 分)
    PAT B1042 字符统计 (20 分)
    PAT B1040 有几个PAT (25 分)
    PAT B1035 插入与归并 (25 分)
    PAT B1034 有理数四则运算 (20 分)
    PAT B1033 旧键盘打字 (20 分)
    HDU 1231 最大连续子序列
    HDU 1166 敌兵布阵
    HDU 1715 大菲波数
    HDU 1016 Prime Ring Problem
  • 原文地址:https://www.cnblogs.com/my-blogs-for-everone/p/9995999.html
Copyright © 2011-2022 走看看