精华内容
下载资源
问答
  • 镜像分层:centos的镜像只有200M,但是tomcat的镜像却400多M,为什么?是因为镜像是分层结构,就像下图,tomcat的镜像中包含了其依赖的jdk、centos等资源,所以显得比较大。 容器数据卷理解 docker容器数据...

    镜像理解

        镜像就像光盘,是个一系列文件的集合,包含了程序、配置及运行环境信息,属于联合文件系统。

        镜像分层:centos的镜像只有200M,但是tomcat的镜像却400多M,为什么?是因为镜像是分层结构,就像下图,tomcat的镜像中包含了其依赖的jdk、centos等资源,所以显得比较大。

     

    容器数据卷理解

         docker容器数据卷可以看成使我们生活中常用的u盘,它存在于一个或多个的容器中,由docker挂载到容器,但不属于联合文件系统,Docker不会在容器删除时删除其挂载的数据卷。数据卷就是容器中的数据持久化的一种方式。

         使用命令添加数据卷,需要参数v(volume的缩写),后接宿主机路径和容器路径的映射关系。 

         如果后跟ro,则表示只读。 

    docker -it -v /宿主机绝对路径:/容器内路径  镜像名
    docker -it -v /宿主机绝对路径:/容器内路径:ro  镜像名

         我们也可以使用DockerFile来添加容器卷,DockerFile就是对镜像模板的描述文件,如下描述了使用DockerFile添加容器卷的方法。

    mkdir mydocker
    cd mydocker
    vim DockerFile
    
    #volume test
    FROM centos
    VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
    CMD echo "finished, ------------, success!"
    CMD /bin/bash
    
    
    docker build -f /mydocker/DockerFile -t haylen/centos .
    docker run -it haylen/centos
    
    docker inspect 运行的容器id

          数据卷容器就是指挂在数据卷的容器,该容器可以作为父容器,被其他容器挂载,从而实现容器间数据的共享。

    docker run -it --name dc01 haylen/centos
    
    docker run -it --name dc02 --volume-from dc01 haylen/centos
    
    docker run -it --name dc03 --volume-from dc01 haylen/centos

          使用这种方式共享后,把dc01删除,其共享数据仍然存在。直至所有的dc都删除,否则容器卷都一直共享存在。

     

     

     

    如果您喜欢这篇文章,别忘了点赞和评论哦!

    展开全文
  • 镜像分层:对于已经构建过的镜像,修改Dockerfile文件后,再次构建只会对修改的部分进行执行,已经执行过的步骤并未修改的话会掠过。 临时容器:每执行一个步骤就会产生一个临时容器

    镜像分层:对于已经构建过的镜像,修改Dockerfile文件后,再次构建只会对修改的部分进行执行,已经执行过的步骤并未修改的话会掠过。
    临时容器:每执行一个步骤就会产生一个临时容器。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 一个镜像可以创建N个容器 一个标准化的交付 一个不包含Linux内核而又精简的Linux操作系统 镜像层   镜像可以看成是由多个镜像层叠加起来的一个文件系统 ,镜像层也可以简单理解为一个基本的镜像,每个镜像层之间...

    镜像是什么?

    • 一个分层存储的文件
    • 一个软件的环境
    • 一个镜像可以创建N个容器
    • 一个标准化的交付
    • 一个不包含Linux内核而又精简的Linux操作系统

    镜像层

      镜像可以看成是由多个镜像层叠加起来的一个文件系统 ,镜像层也可以简单理解为一个基本的镜像,每个镜像层之间通过指针的形式进行叠加。
    在这里插入图片描述
      根据上图,镜像层的主要组成部分包括镜像层ID、镜像层指针「指向父层」、元数据「Layer Metadata,包含了 Docker 构建和运行的信息和父层的层次信息」。

      只读层和读写层的组成部分基本一致,同时读写层可以转换成只读层「通过docker commit 操作实现」。

      元数据(metadata)就是关于这个层的额外信息,它不仅能够让Docker获取运行和构建时的信息,还包括父层的层次信息。在docker主机中镜像层(image layer)的元数据被保存在名为”json”的文件中。

    /var/lib/docker/graph/e809f156dc985.../json
    

    镜像分层

      镜像是一堆只读层的统一视角,镜像的大小 = 所有镜像层大小的总和,但镜像间可以共享相同的镜像层,因此docker时间占用的磁盘空间远远小于virtual size的总和。
      镜像是分层构建的,Dockerfile中的每一条命令,都在Docker镜像中以一个独立镜像层的形式存在。例如以下Dockerfile:

    FROM ubuntu:14.04
    ADD run.sh /
    VOLUME /data
    CMD ["./run.sh"]
    

      通过docker build以上Dockerfile的时候。会在Ubuntu:14.04镜像基础上,加入三层独立的镜像,依次相应于三条不同的命令。镜像示意图如下:
    在这里插入图片描述
      在层级化管理的Docker镜像中。有不少层大小都为0。那些镜像层大小不为0的情况,归根结底的原因是:构建Docker镜像时,对当前的文件系统造成了改动更新。而改动更新的情况主要有两种:

    1. ADD或COPY命令:ADD或者COPY的作用是在docker build构建镜像时向容器中加入内容。如以上命令 [ ADD run.sh / ] ,新构建的那层镜像大小为文件run.sh的大小。

    2. RUN命令:RUN命令的作用是在当前空的镜像层内执行一条命令,倘若执行的命令须要更新磁盘文件。那么全部的更新内容都在存储在当前镜像层中。例如:
    [ RUN echo DaoCloud ] 命令不涉及文件系统内容的改动,故命令执行完之后当前镜像层的大小为0;
    [ RUN wget http://abc.com/def.tar ] 命令会将压缩包下载至当前文件夹下,因此当前这一层镜像的大小为:对文件系统内容的增量改动部分,即def.tar文件的大小。

    联合文件系统

      尽管终于镜像的大小是所有镜像层的累加,可是须要额外注意的是:Docker镜像的大小并不等于容器中文件系统内容的大小(不包含挂载文件,/proc、/sys等虚拟文件)。例如以下Dockerfile:

    FROM ubuntu:14.04
    ADD compressed.tar /
    RUN rm /compressed.tar
    ADD compressed.tar /
    

    1.FROM ubuntu:镜像ubuntu:14.04的大小为200MB;

    2.ADD compressed.tar /: compressed.tar文件为100MB,因此当前镜像层的大小为100MB,镜像总大小为300MB。

    3.RUN rm /compressed.tar:删除文件compressed.tar,此时的删除并不会删除下一层的compressed.tar文件。仅仅会在当前层产生一个compressed.tar的删除标记,确保通过该层将看不到compressed.tar,因此当前镜像层的大小也为0。镜像总大小为300MB。

    4.ADD compressed.tar /:compressed.tar文件为100MB,因此当前镜像层的大小为300MB+100MB。镜像总大小为400MB。

      分析完成之后,我们发现镜像的总大小为400MB。可是假设执行该镜像的话,我们非常快能够发如今容器根文件夹下执行du -sh之后。显示的数值并不是400MB,而是300MB左右。基本的原因还是:联合文件系统的性质保证了两个拥有compressed.tar文件的镜像层,容器仅仅看到一个。

    容器是什么?

      容器(container)和镜像(image)的最主要区别就是容器加上了顶层的读写层。要点:容器 = 镜像 + 读写层,并且容器的定义并没有提及是否要运行容器。

    COW技术

      所有对容器的修改都发生在读写层,镜像并不会被修改,也即 COW(copy-on-write)技术。容器需要读取某个文件时,直接从底部只读层去读即可,而如果需要修改某文件,则将该文件拷贝到顶部读写层进行修改,只读层保持不变。

    Running Container

      运行状态的容器「Running Container」是由一个可读写的文件系统「静态容器」+ 隔离的进程空间和其中的进程构成的。
    在这里插入图片描述
      正是文件系统隔离技术使得Docker成为了一个前途无量的技术。一个容器中的进程可能会对文件进行修改、删除、创建,这些改变都将作用于可读写层(read-write layer)。
    在这里插入图片描述
    正如json文件一样,我们可以在主机的文件系统上找到这个新文件。

    docker run ubuntu touch happiness.txt
    
    find / -name happiness.txt
    /var/lib/docker/aufs/diff/860a7b...889/happiness.txt
    

    容器内进程

      在容器内部我们可以使用 [ ps -ef ] 查看到容器内运行的进程,而在宿主机中也可以使用 [ docker container top containerId ] 在宿主机上查看到容器内的进程,只是他们的PID不同。
      事实上,你在容器中看到的进程与你在宿主机中看到的进程其实是同一个。Docker项目帮助用户启动的进程是直接运行在主机OS中的,只不过在创建这些进程时,Docker为它们加上了各种各样的Namespace参数,使得他们只能看到和访问当前Namespace所限定的资源、文件、设备、状态,或者配置。

    参考文献

    https://www.cnblogs.com/LangXian/p/10639936.html
    https://www.cnblogs.com/claireyuancy/p/7029126.html
    https://zhuanlan.zhihu.com/p/70424048
    https://zhuanlan.zhihu.com/p/86890896
    https://zhuanlan.zhihu.com/p/81683351

    展开全文
  • Docker容器分层镜像创建(基于已有镜像创建,基于本地模板创建,基于dockerfile创建),以及私有仓库的建立一,Docker镜像分层二,Docker镜像的创建1,基于已有镜像创建2,基于本地模板创建3,基于dockerfile...

    Docker容器的分层,镜像创建(基于已有镜像创建,基于本地模板创建,基于dockerfile创建),以及私有仓库的建立

    一,Docker镜像的分层

    镜像制作必须要有一个基础镜像,不能直接去创建,然后添加一个执行脚本,再挂载一个数据卷,最后进行CMD指定容器运行的时候启动哪些指令。
    镜像制作是一层一层堆叠上去的,分为四个阶段,每一层创建的时候会生成一个临时镜像,创建完成之后自动删除。如下所示:
    在这里插入图片描述

    • Dockerfile中的每个指令都会创建一个新的镜像层
    • 镜像层将被缓存和复用
    • 当dockerfile的指令修改了。复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效
    • 某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效
    • 镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件

    二,Docker镜像的创建

    • Docker镜像
      • 应用发布的标准格式
      • 支撑一个Docker容器的运行
    • Docker镜像的创建方法
      • 基于已有镜像创建
      • 基于本地模板创建
      • 基于dockerfile创建

    删除镜像的时候如果镜像是在正在被使用,那么镜像是删除不了的,只有删除容器之后镜像才能被删除

    1,基于已有镜像创建

    • 将容器里面运行的程序及运行环境打包生成新的镜像
      命令为:docker commit 选项 容器id/名称 仓库名称:标签
    选项 含义
    -m 说明信息
    -a 作者信息
    -p 生成过程中停止容器的运行
    [root@tomcat1 ~]# docker ps -a   //查看基于centos创建
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
    c21b520b7e79        centos:7            "/bin/bash"         About a minute ago   Up 2 seconds                            infallible_albattani
    [root@tomcat1 ~]# docker commit -m "new" -a "daoke" c21b520b7e79 daoke:new    //创建
    sha256:0e10c3b9843933deab3ed9aa580691d757de9e590cd7cd7606607bb6cfe472e1
    
    [root@tomcat1 ~]# docker images    //查看已创建 daoke
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    daoke               new                 0e10c3b98439        36 seconds ago      204MB
    nginx               latest              bc9a0695f571        32 hours ago        133MB
    tomcat              latest              e0bd8b34b4ea        7 days ago          649MB
    centos              7                   8652b9f0cb4c        12 days ago         204MB
    [root@tomcat1 ~]# 
    不推荐此方式制作
    查看已创建的镜像:docker images | grep daoke
    
    

    2,基于本地模板创建

    • 通过导入操作系统模板文件生成新的镜像
    • 使用wget命令导入为本地镜像
      wget
      http://download.openvz.org/template
    • 导入成功后可查看本地镜像信息
      docker images | grep new
    • 过程为:
    1.导入本地镜像debian-7.0-x86-minimal.tar.gz 
    2.cat debian-7.0-x86-minimal.tar.gz | docker import - 镜像名:标签 
    3.docker images | grep 标签
    
    cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:debian
    
    

    3,基于dockerfile创建

    • dockerfile是由一组指令组成的文件
    • dockerfile结构四部分
      • 基础镜像信息
      • 维护者信息
      • 镜像操作指令
      • 容器启动时执行指令
    • Dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以"#"号开头的注释

    4,Dockerfile操作指令

    指令 含义
    FROM镜像 指定新镜像所基于的镜像,第一条指令必须为from指令,每创建一个镜像就需要一条FROM指令
    MAINTAINER名字 说明新镜像的维护人信息
    RUN命令 在所基于的镜像上执行命令,并提交到新的镜像中
    CMD [ “要运行的程序”,“参数1",“ 参数2”] 指令启动容器时要运行的命令或者脚本,dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行
    EXPOSE端口号 指定新镜像加载到docker时要开启的端口
    ENV 环境变量 变量值 指定一个环境变量的值,会被后面的RUN使用
    ADD 源文件/目录 目标文件/目录 将源文件复制到目标文件,源文件要与dockerfile位于相同目录中,或者是一个URL
    COPY源文件/目录 目标文件/目录 将本地主机上的文件/目录复制到目标地点,源文件/目录要与dockerfile在相同的目录中
    VOLUME[“目录“] 在容器中创建一个挂载点
    USER用户名/UID 指定运行容器时的用户
    WORKDIR路径 为后续的RUN、CMD、ENTRYPOINT指定工作目录
    ONBUILD命令 指定所生成的镜像作为一个基础镜像时所要运行的命令
    HEALTHCHECK 健康检查

    过程为:

    mkdir apache
    cd apache
    vim Dockerfile (Dockerfile名字不可更改)
    
    FROM centos:7 
    #维护镜像的用户信息
    MAINTAINER This is chen 
    #镜像操作指令安装apache软件
    RUN yum -y update 
    RUN yum -y install httpd
    #开启80端口 EXPOSE 80 
    #复制网址首页文件
    ADD index.html /var/www/html/index.html 
    #将执行脚本复制到镜像中 
    ADD run.sh /run.sh 
    RUN chmod 755 /run.sh 
    #启动容器时执行脚本 
    CMD ["/run.sh"]
    #########vim run.sh #和Dockerfile文件位于相同目录下
    #!/bin/bash 
    rm -rf /run/httpd/ * #删除进程文件 
    exec /usr/sbin/apachectl -D FOREGROUND #启动apache
    
    ########vim index.html #编辑首页文件
    <h1>web test</h1>
    ######### 生成镜像
    docker build -t httpd:centos . (注意别忘了末尾有".")
    ##########新镜像运行容器
    docker run -d -p 1216:80 httpd:centos
    
    

    最后测试;

    在这里插入图片描述

    三,私有仓库建立

     ######## 修改registries文件
     docker pull registry     // 创建私有仓库的前提,5000端口号
     vim /etc/docker/daemon.json
     
    {
      "insecure-registries":["20.0.0.10:5000"],   //添加
      "registry-mirrors": ["https://pl01jex2.mirror.aliyuncs.com"]
    }
    systemctl restart docker
     docker create -it registry /bin/bash     //创建registry容器
    docker ps -a
    docker run -d -p 5000:5000 -v /data/resgistry:/tmp/resgistry registry  //宿主机的/data/resgistry:/tmp/resgitry resgistry
     docker push 20.0.0.10:5000/httpd   //更改标记为20.0.0.:5000/nginx
    docker push 20.0.0.10:5000/httpd   //上传
    curl -XGET http://20.0.0.10:5000/v2/_catalog   //获取私有仓库列表查看日志文件
    {"repositories":["httpd"]}
    docker pull 20.0.0.10:5000/nginx   //测试私有仓库的下载
    
    
    展开全文
  • 上一篇传送门《微服务中的容器技术---Docker(一),Docker的安装和使用》Docker镜像那么我们应该知道镜像容器该如何区分了,这里就更形象地说明一下:Docker镜像是一个只读的Docker容器模板,含有启动Docker容器所需...
  • 理解Docker镜像分层

    2020-07-09 14:58:40
    docker镜像分层结构 容器的大小 修改时复制策略 copy-on-write (CoW) Copying makes containers efficient 关于base镜像 base 镜像有两层含义: 不依赖其他镜像,从 scratch 构建。 其他镜像可以之为基础进行扩展...
  • 一、什么是docker 镜像 就是把业务代码,可运行环境进行整体的打包 二、如何创建docker镜像: 现在docker官方共有仓库里面有大量的镜像,所以最基础的镜像,我们可以在公有仓库直接拉取,因为这些镜像都是原厂...
  • 早在集装箱没有出现的时候,...并且到了另外一个码头需要转运的话,有了在集装箱以后,直接把它运送到另一个容器内即可,完全可以保证里面的货物是整体的搬迁,并且不会损坏货物本身。那么docker 镜像在IT行业中也扮演
  • 镜像分层结构 Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。比如我们现在构建一个新的镜像,Dockerfile 如下: ① ...
  • 镜像分层结构 Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。比如我们现在构建一个新的镜像,Dockerfile 如下: 新镜像不再是从 scratch 开始,而是直接在 Debian base 镜像...
  • Docker结构 Docker的分层结构 ...用华为的容器镜像构建镜像并下载到云主机运行步骤 新建一个模板tank仓库 去华为云的容器镜像服务 https://console.huaweicloud.com/swr/?region=cn-north-1#/...
  • Docker:镜像分层技术

    千次阅读 2018-05-24 14:30:14
    每个镜像都可以分层很多个layer,每个layer都有它对应的ID和大小,比如一个ubuntu镜像有四层组成:镜像层都是只读的,不能往里面写数据。想写数据就需要在其上启动一层container layer,就是相当于把镜像启动成一个...
  • docker镜像分层结构 容器的大小 修改时复制策略 copy-on-write (CoW) Copying makes containers efficient 关于base镜像 base 镜像有两层含义: 不依赖其他镜像,从 scratch 构建。 其他镜像可以之为基础...
  • 镜像分层结构2. 镜像的构建 1. 镜像分层结构 共享宿主机的kernel base镜像提供的是最小的Linux发行版 同一docker主机支持运行多种Linux发行版 采用分层结构的最大好处是:共享资源 2. 镜像的构建 docker commit ...
  • [root@server1 Desktop]# docker history game2048:latest 分层结构,镜像构造的结构 IMAGE CREATED CREATED BY SIZE COMMENT 19299002fdbe 2 years ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "sed … 0B ...
  • 这篇文章我们简单聊聊 docker 的镜像分层。思考题在第四篇文章容器与虚拟机中,我们说到 docker 其实就是把可执行程序及其所有的依赖打包成镜像文件,然后调用宿主机内核接口运行容器。可以想象,像 ubuntu等基础...
  • 容器镜像服务支持镜像层信息展示了,方便您观察Docker镜像的层列表以及镜像的层大小,更直观地了解您的镜像。 镜像 Docker镜像充分利用 Union FS 的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是像一个...
  • 这篇文章我们简单聊聊 docker 的镜像分层。思考题在第四篇文章容器与虚拟机中,我们说到 docker 其实就是把可执行程序及其所有的依赖打包成镜像文件,然后调用宿主机内核接口运行容器。可以想象,像 ubuntu等基础...
  • Docker容器镜像

    2018-10-24 13:54:35
    如果想要开发一个基于python的应用,传统的开发方式中,首先要在本地操作系统中安装...image本身是一种分层的特殊格式文件,在取得安装了python运行时环境的基础层以后,按下来就是把我们自己开发的东西逐层打包进...
  • 镜像分层结构 - 每天5分钟玩转容器技术(11) 原创CloudManCloudMan2017-05-06 第11篇 镜像分层结构 Docker 支持通过扩展现有镜像,创建新的镜像。 实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像...
  • 随着容器容器技术的兴起,...在看如何构建 Fedora 容器基础镜像(base image)之前,让我们定义基础镜像分层镜像(layered image)。定义基础镜像的简单方法是没有父镜像层的镜像。但这具体意味着什么呢?这意味着基...
  • 目录: Docker镜像介绍 docker容器 ...docker镜像是一个分层存储的文件,一个镜像可以创建N个容器 可以这么理解,docker 镜像是 docker 容器的静态视角,docker 容器是 docker 镜像的运行状态。...
  • 文章目录 1、salt-api 2、docker 安装 开启 配置 game2048 mario 3、镜像分层结构 退出方式 分层 4、镜像的构建 构建镜像 dockerfile常用指令 5、应用容器镜像加速器 应用容器化 6、镜像的优化 1、salt-api ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 686
精华内容 274
关键字:

容器镜像分层