zoukankan      html  css  js  c++  java
  • 011、镜像的分层结构(2018-12-28 周五)

     
    Docker支持通过扩展现有镜像,创建新的镜像
     
    实际上Docker Hub上99%的镜像都是在base镜像的基础上,安装和配置软件后构建出来的。
     
    FROM debian                    #    镜像不在是从scratch开始,而是从debian base开始
    RUN apt-get install emacs      #    安装emacs
    RUN apt-get install apache2    #    安装apache2
    CMD ["/bin/bash"]              #    容器启动时运行bash
     
    构建过程如下图:
     
        
     
     
    新镜像是从base镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层
     
    Docker为什么要分这么多层 -- 共享资源
     
    比如好多镜像都是从相同base的基础上构建出来来,那么 Docker Host上只需要保存一份base即可,同时内存中也只需加载一份base镜像,镜像的每一层都可以被分享,
     
    Copy-on-Write
     
    多个容器共享一个基础镜像,那么当某个容器修改了配置文件,其他容器会受影响吗? 不会
     
    容器在启动时,会创建一个新的可写层,加载到镜像的顶部。这一层通常被称作容器层,容器层下面的是镜像层
     
    对容器的所有改动,都只发生在容器层,下面的镜像层是只读的。
     
     
    所有镜像层叠加起来组成一个统一的文件系统。如果不同层中有一个相同的文件,,比如 /a  ,上层的 /a  会覆盖下层的 /a ,用户只能看到最靠近顶端镜像层中的/a 
     
    1、添加文件 -- 新文件会被添加到容器层中
    2、读取文件 -- 在镜像层中从上往下找,找到后不再继续向下查找
    3、修改文件 -- 在镜像层中从上往下找,找到后复制到容器层进行修改
    4、删除文件 --  在镜像层中从上往下找,找到后在容器层将该文件标记为删除
     
    只有当需要修改时才从镜像层复制一份到容器层,这个特性叫做 Copy-on-Write 。容器层保存的是镜像变化的部分,并不会对镜像本身进行修改
     
     
  • 相关阅读:
    Java编译器API简介
    liblinear和libsvm区别
    spark和hadoop比较
    maxout激活函数
    FTRL算法
    NLP里面好的学习资料
    阿里妈妈MLR模型(论文)
    FM的推导原理--推荐系统
    GBDT+LR simple例子
    深度学习最全优化方法---来源于知乎
  • 原文地址:https://www.cnblogs.com/www1707/p/10193565.html
Copyright © 2011-2022 走看看