前言

上一篇我们讲解了虚拟机和容器的区别,本节我们来讲讲Docker中关于Dockerfile、镜像、容器等基本概念。Docker是一个在容器内开发、部署、运行应用程序的平台,Docker本质上是容器化的代名词,容器对于提高软件开发和数据科学的安全性,可重复性和可扩展性起到了重要作用,拥抱Docker已是趋势,让我们进入Docker课堂。

烹饪材料

接下来我们通过学习如何烹饪披萨,一探究竟Docker平台各个基本概念,一说到吃,大家应该马上就提起兴趣了。

Docker Container(容器)

啥是容器啊,搞的这么高深,这么玄乎的概念,于是乎 ,我终于找到容器是什么了,如下:

哈哈,这就是容器,还是在某宝上截图来的,不过此容器非彼容器,如上图是一个真实存在的物理收纳箱容器,看到如上真实存在的容器,我们能想到这样一个容器有什么特点呢?

1.承载东西-这当然是最基本的啦,既然是收纳箱,就是用来装东西的,有些东西可以放在收纳箱内,也可以放在收纳箱外(这就好比在容器内可以装载应用程序及其依赖)

2.方便携带-有了收纳箱我们可以随处搬运,就像小孩的玩具一样,可以从家拿到学校,携带方便。(这就好比容器轻巧,可以在任何地方运行)

3.接口访问-收纳箱上方有一个盖盖,我们将其打开,可以放入或取出物品(这就好比容器与外界有连接的机制,比如通过命令行进行数据交互)

4.远程获取-制造商通过对应模具模板可以制造出成千上万个收纳箱,然后将收纳箱放到某宝或某东上,最终我们在某宝或某东上购买这个收纳箱(这就好比模具是镜像,通过镜像制作容器)

物理形式存在的收纳箱容器从被制造出来的那一刻就被赋予了生命,既然被赋予了生命当然也就存在对应的生命周期,我们可将收纳箱的生命周期归纳为四个阶段:孵化、闲置、使用、废弃。万事万物一旦存在,无论是物理形式还是虚拟形式都有其生命周期,容器也不例外,只不过容器由人为操纵控制其生命周期直至其关闭。

通过以上引入生活实例物理收纳箱容器的隐喻来对比虚拟化容器,得出虚拟化容器的特点,想必到此应该对容器有了一点点通透的了解。

Docker Image(镜像)

上述关于关于物理存在的收纳箱容器是以某种实例而存在,虽说容器是虚拟的,但是到底是如何虚拟出来的呢?它是以何种生命形式而存在的呢?答案则是:镜像孕育了容器,也就是说镜像构造出了容器。那么镜像又是什么呢?从语义层面理解,我们可能认为就是图像,而图像可能是根据手机或者摄像机将拍摄范围的全部内容映射到物理图像上,但是事实情况真的如此吗?

显然不是,镜像其实就是一个模具或模板,对于收纳箱的模板如下,我们根据模板而刻画出如上漂亮且精致的收纳箱容器。

如上所述,我们根据镜像刻画出了容器,镜像是不可变的主模板,用来抽取出完全相同的容器,而镜像包含应用程序所需要运行的Dockerfile、代码、库等,如此这些被完全捆绑在一起。

Dockerfile(镜像说明书)

讲完了镜像,我们又有疑惑了,镜像又是怎么来的呢?通过Dockerfile来创建,Dockerfile是一个文件,这个文件中包含了如何构建镜像的说明,Dockerfile只是用来构建初始镜像层的基本镜像,我们可将其看做是镜像的说明书。根据Dockerfile中的使用说明,我们可以将附加层堆叠在基础镜像层的顶部。最后根据Dockerfile代码,在其他层的顶部堆叠薄的可写层,每一层是如此的薄,堆叠可写的过程就好似洋葱的成长过程,多么形象而生动,如果你愿意一层一层,一层的剥开我的心,你会发现 你会讶异....哈哈。

Container Registry (镜像仓储)

如果我们希望其他人能够利用我们的镜像来创建容器,我们可以将镜像传送到容器注册表中,Docker Hub是最大的默认注册表位置。

烹饪披萨

关于披萨所需要的材料我们都已配齐,接下来我们试试来自制披萨,好不好吃不要紧,重要的是享受制作的过程。

第一步:我们需要知道制作披萨的配方,这个配方好比Dockerfile,里面包含如何制作出披萨的说明。

第二步:披萨有几层,比如包含面包层、奶酪层、酱汁层等等,因为配方说明我们知道要做什么,这是不可更改的计划,这就好比我们从底层首先构建出基本的镜像如ubuntu,然后添加奶酪层等,这一层相当于我们安装外部库,比如python,最后再刷上一层泰国甜辣酱,简直是人间美味,这就相当于我们已编写好的应用程序代码,最终就有了披萨的原型,也就形成了Docker Image(镜像),

第三步:我们做好了披萨,这个时候我们需要将其放入烤箱中,烤箱就好比Docker平台,当我们将买回来的烤箱放在家里,这个时候就好比将Docker安装在计算机上一样,当我们扭动烤箱按钮的那一刻,我们就开始烹饪披萨,这就像我们开始创建并启动容器啦。

第四步:等待一小会,当披萨熟了,熟透了的披萨就好比Docker容器。

第五步:最终大功告成,我们开始吃披萨,吃披萨就好比我们在容器中使用应用程序一样。

烹饪总结

本节我们通过烹饪披萨讲述了Docker平台上基本概念,以及各个基本概念之间的关系,它们是如何关联起来的,希望通过本文的讲解,对于阅读本文的童鞋能对概念有更深入的理解,应该不会通过我的讲解,越讲越懵逼吧,哈哈。有了对基本概念的理解,后续陆续引入例子就一目了然啦,感谢阅读,我们下节再会。

Docker系列之烹饪披萨(二)的更多相关文章

  1. 8天入门docker系列 —— 第一天 docker出现前的困惑和简单介绍

    docker出来也有很多年了,但用到的公司其实并不是很多,docker对传统开发是一个革命性的,几乎颠覆了之前我们传统的开发方法和部署模式,而大多 公司保守起见或不到万不得已基本上不会去变更现有模式. ...

  2. Docker系列01—容器的发展历程---Docker的生态圈

    本文收录在容器技术学习系列文章总目录 Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈.既然是概览,所以不会涉及具体的技术细节. Docker ...

  3. Docker系列07—Dockerfile 详解

    本文收录在容器技术学习系列文章总目录 1.认识Dockerfile 1.1 镜像的生成途径 基于容器制作  dockerfile,docker build 基于容器制作镜像,已经在上篇Docker系列 ...

  4. docker系列 参考文章

    Docker 系列一(概念原理和安装) Docker 系列二(操作镜像) Docker 系列三(容器管理) 持续更新... ubuntu 安装docker 参考文章 :(https://blog.cs ...

  5. Docker 容器高级操作[Docker 系列-3]

    关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 上篇文章向读者介绍了一个 Nginx 的例子,对于 Nginx 这样一个容器而言,当它启动成功后,我们 ...

  6. docker系列四之docker镜像与容器的常用命令

    docker镜像与容器的常用命令 一.概述   docker的镜像于容器是docker中两个至关重要的概念,首先给各位读者解释一下笔者对于这两个概念的理解.镜像,我们从字面意思上看,镜子里成像,我们人 ...

  7. Docker系列——InfluxDB+Grafana+Jmeter性能监控平台搭建(三)

    在之前系列博文中,已经介绍完了数据采集和数据存储,那数据如何展示呢?所以今天就专门来讲下数据如何展示的问题. 以前博文参考: Docker系列--InfluxDB+Grafana+Jmeter性能监控 ...

  8. Docker系列——Grafana+Prometheus+Node-exporter微信推送(三)

    在之前博文中,已经成功的实现了邮件推送.目前主流的办公终端,就是企业微信.钉钉.飞书.今天来分享下微信推送,我们具体来看. 企业微信 在配置企业微信推送时,需要有微信企业,具体如何注册.使用,另外百度 ...

  9. Docker系列——Grafana+Prometheus+Node-exporter钉钉推送(四)

    近期搭建的服务器监控平台,来进行一个总结.主要分为监控平台的搭建.告警中心的配置以及消息的推送.推送的话,支持多种终端.具体详细可查看之前的博文,在这里罗列下,方便查看. Docker系列--Graf ...

随机推荐

  1. SQL 对float类型列进行排序引发的异常

    车祸现场 要求:根据学分和完成时间获取前200名学员,当学分相同时,完成时间较早的排在前面 可以明显看到,完成时间为4.1号的记录排在了3.27号前面. 事故原因 float 表示近似数值,存在精度损 ...

  2. 剖析Unreal Engine超真实人类的渲染技术Part 2 - 眼球渲染

    目录 三.眼球渲染 3.1 眼球的构造及理论 3.1.1 眼球的构造 3.1.2 眼球的渲染理论 3.2 眼球的渲染技术 3.2.1 角膜的半透和光泽反射 3.2.2 瞳孔的次表面散射 3.2.3 瞳 ...

  3. Java中的反射(1)

    Reflection in Java 反射到底是什么呢,我被问到的时候其实也没办法很好的回答这个问题,翻一翻博客,然后逐条讲解.今天干脆就整合一下,免得以后还要去翻. 首先讲一下Java是如何在运行时 ...

  4. java-IO各个区别

    BIO:JDK1.4以前用的都是BIO,阻塞IO. 阻塞到我们的读写方法.BIO,如果有一台服务器,能承受简单的客户端请求,那么使用io和net中的同步.阻塞式API应该是可以实现了.但是为了一个用户 ...

  5. 关于安装了git或者小乌龟(TortoiseGit)使用之后出现红色! 绿色√ 蓝色?的解决办法:

    在当前目录中新建文件保存为(删除git信息.bat)在其写入:for /r . %%a in (.) do @if exist "%%a\.git" rd /s /q " ...

  6. mplayer+ffmpeg 组合截图

    mplayer截图的优点:对于一个时长很长的视频,可以任意指定一个时间点截图,mplayer会直接跳到这个时间点开始解码截图: 缺点:由于是直接跳到指定的时间点,也就是直接跳过了之前的帧,这样解码出来 ...

  7. Java设计模式学习笔记(五) 单例模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯 ...

  8. TestNG的静态方法mock的步骤

    最近团队内部对程序中使用大量的`静态方法`,而公司要求要有sonar扫描覆盖率的,因为在大量使用静态方法的地方若不mock,则覆盖率达不到.于是网上很少的文章讲解对静态方法的mock,大多都是如何使用 ...

  9. CF543B Destroying Roads 题解

    看到没有题解就贡献一波呗 分析: 这题其实就是想让我们求一个图中两条最短路的最短(好把更多的边删掉). 我们先考虑一条最短路,别问我我怎么会的显然,就是s和t跑个最短路再用n-就行. 然后就是两条喽! ...

  10. 个人永久性免费-Excel催化剂功能第16波-N多使用场景的多维表转一维表

    Excel表的多维表数据结构转换为一维表的数据结构,以供更进一步对数据进行加工整理,生成另外格式的汇总表,这是Excel数据处理的一大刚需,几乎每个Excel表哥.表姐都会遇到这样的使用场景.很可惜, ...