前言

上一篇我们讲解了虚拟机和容器的区别,本节我们来讲讲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. 【HDU - 2102】A计划(bfs)

    -->A计划 Descriptions: 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的 ...

  2. 分布式个人理解概述和dubbo实现简述

    什么是分布式?为什么使用分布式? 个人有一些浅薄的理解希望可以批评指正,从概念和应用 两个方面概述:      一.概念:分布式也叫分布式服务,也就是说 他是 一种面向服务思想的程序设计和架构风格,典 ...

  3. POJ 1986:Distance Queries(倍增求LCA)

    http://poj.org/problem?id=1986 题意:给出一棵n个点m条边的树,还有q个询问,求树上两点的距离. 思路:这次学了一下倍增算法求LCA.模板. dp[i][j]代表第i个点 ...

  4. scrapy基础知识之 CrawlSpiders(爬取腾讯校内招聘):

    import scrapyfrom scrapy.spider import CrawlSpider,Rulefrom scrapy.linkextractors import LinkExtract ...

  5. Altium Designer设计PCB--如何设置铺铜与导线或过孔的间距

    笑话: 到银行汇款,车临时停路边上. 为了怕交警罚就把朋友留下看车,跟他说有查车的过来了告诉我一声. 进去几分钟果然有交警来了. 那个朋友风风火火地闯进银行大声吼道:“大哥,警察来了,快走啊!” 偌大 ...

  6. Android安卓书籍推荐《Android驱动开发与移植实战详解》下载

    百度云下载地址:点我 Android凭借其开源性.优异的用户体验和极为方便的开发方式,赢得了广大用户和开发者的青睐,目前已经发展成为市场占有率很高的智能手机操作系统. <Android驱动开发与 ...

  7. elasticsearch与ms sql server数据同步

    MS SQL Server Download Elasticsearch Install Elasticsearch Follow instructions on https://www.elasti ...

  8. 20140115-URL编码与解码

    UrlEncode()方法,有两个类都有这个方法即HttpUtility.UrlEncode和Server.UrlEncode 区别: 1.HttpUtility.UrlEncode,HttpUtil ...

  9. linux 不重启识别新添加的硬盘

    1.fdisk -l 看有没有新的磁盘 oebiotech@hadoop08:/media/nbc9$ sudo fdisk -l |grep sdl 2.查看主机总线 oebiotech@hadoo ...

  10. 微信小程序开发--组件(4)

    一.picker-view / picker-view-column <view> <view>{{year}}年{{month}}月{{day}}日</view> ...