docker 系列(五):Docker 镜像原理与制作

声明:作者才疏学浅,如果文章有误,请评论指出。如果有疑问,欢迎关注评论交流。若转载,请注明出处。

一、思考

       从学习,到认识,再到使用 docker, 不知道大家有没有思考过下面问题。本文将围绕一下三个问题,叙述 docker 的镜像原理。

  • Docker 镜像本质是什么?
  • Docker 中一个 centos 镜像为什么只有 200MB,而一个 centos 操作系统的 iso 文件要几个G?
  • Docker 中一个 tomcat 镜像为什么有 500MB,而一个 tomcat 安装包只有70多MB?

二、Docker 镜像原理

        第一,我们先了解一下 Linux 系统的一些基础知识。
1、 linux 系统一般有内核、shell、文件系统和应用程序共4部分组成。
2、Linux文件系统由 bootfsrootfs 两部分组成。

  • bootfs:包含 bootloader(引导加载程序)和 kernel(内核)。
  • rootfs: root 文件系统,包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc 等标准目录和文件。
  • 不同的 linux 发行版,bootfs 基本一样,而 rootfs 不同,如 ubuntu ,centos
    等。

        第二,我们马上进入镜像原理分析。在 docker pull 镜像的时候,不知道大家有没有留意到 pulling 的信息,会出现一个或多个 pull complete 。例如下面 docker pull nginx:latest。 一共完成 5 个 pull complete 。

[root@cwans ~]# docker pull nginx:latest
latest: Pulling from library/nginx
8559a31e96f4: Pull complete 
1cf27aa8120b: Pull complete 
67d252a8c1e1: Pull complete 
9c2b660fcff6: Pull complete 
4584011f2cd1: Pull complete 
Digest: sha256:a93c8a0b0974c967aebe868a186e5c205f4d3bcb5423a56559f2f9599074bbcd
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

       其实,这反映了 Docker 镜像是由特殊的文件系统叠加而成。请看下图:

在这里插入图片描述

镜像原理分析:

  • 最底端是 bootfs,共享宿主机的bootfs
  • 第二层是 root 文件系统 rootfs, 称为 base image
  • 然后再往上可以叠加其他的镜像文件
  • 统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
  • 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。
  • 当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器。

三、思考问题的参考答案

  • Docker 镜像本质是什么?
    Docker 镜像本质是一个分层文件系统。
  • Docker 中一个 centos 镜像为什么只有 200MB,而一个 centos 操作系统的 iso 文件要几个个、G?
    Centos 的 iso 镜像文件包含 bootfs 和 rootfs,而 docker 的 centos 镜像复用操作系统的 bootfs,只有 rootfs 和其他镜像层。
  • Docker 中一个 tomcat 镜像为什么有 500MB,而一个 tomcat 安装包只有70多MB?
    由于 docker 中镜像是分层的,tomcat 虽然只有 70 多MB,但他需要依赖于其他父镜像和基础镜像,所有整个对外暴露的 tomcat 镜像大小 500 多MB。

四、docker 镜像制作

1、容器与镜像之间的操作

  • 容器转为镜像

      docker commit  容器id  镜像名称: 版本号 
    
  • 容器转为压缩文件

      docker save -o 压缩文件名称  镜像名称: 版本号
    
  • 通过压缩文件,加载镜像

     docker load –i 压缩文件名称
    

       以上三个命令常用于 docker 镜像离线发布。例如把根据测试环境运行的项目,新建生产环境。
2、通过 Dockerfile 生成镜像
详细内容请看 docker 系列(六):DockerFile 的使用

五、小结

        最后,本文通过提出的三个问题,进而引发思考。再而结合图片,对 docker 镜像原理解析。最后,简单 docker 镜像的制作。文章到这里就结束了,想要了解dockerfile 方式制作镜像,请阅读 docker 系列(六):DockerFile 的使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值