发表于: 2018-01-27 23:25:23

1 519


今天完成的任务
1、对docker有了一些了解
在了解docker之前我有几个疑问:
A、怎么用通俗易懂的话去理解docker?
B、虚拟机是什么?docker是虚拟机吗?
C、docker和tomcat有什么区别?

D、docker镜像、docker容器是什么?


然后针对上面的问题,我挨个去百度了一下,下面用自己的话给上面4个问题一个答案:
A、docker的概念是从集装箱里提出来的。在集装箱出现以前,一艘船不适合运水果又运化学物品,因为这两种东西的形状、大小不同,包装规格也不同,需要的运送环境(化学物品的保存对环境的要求有很多,而水果的保存需要的环境也不相同)也不同。而且同时运送水果和化学物品会有食品安全的问题,所以运水果需要有专门运送水果的船,运化学物品需要专门运化学物品的船。集装箱出现以后,可以理解为是对具体运送物品的一种封装(不管一个集装箱里装的是水果还是化学物品,它都是以一个集装箱的形式展现,水果和化学物品保存的环境都在集装箱里),就不需要区分运水果的船和运化学物品的船了,水果和集装箱都可以装在集装箱里,然后通过同一艘船运送。水果或化学物品到达目的地港口后,还可以直接以集装箱为单位进行分发、并卡车或火车直接运送到最终目的。
再回到我们的开发中,会存在三种环境:开发环境、测试环境、线上环境,不同的环境之间可能因为细微的差别导致项目部署失败。docker就是为了解决这种问题而出现的。一个docker可以看做一个集装箱,把项目、web服务器(tomcat、resin)、http服务器(Nginx、Apache)、数据库(MySQL、Oracle)等等环境和配置文件都放到这个集装箱里,这种方式保证了集装箱内的环境和配置是不变的。然后项目部署开发环境,再部署到测试环境或线上环境时,都是对docker的“复制”+“粘贴”操作,也就实现了同一份代码运行时的环境是不变的。


B、虚拟机的话,现在听的最多的就是JVM,也就是java虚拟机,先讲讲我对JVM的理解。JVM是java程序运行的环境。也因为JVM,使得java拥有“一次编译,到处运行”的特性。JVM对不同的操作系统和不同系统的指令进行了一个抽象,可以把JVM理解为一个翻译官,负责把java源程序编译出来的字节码文件翻译成不同的机器码,解释给不同的操作系统,实现java程序的运行。

从上面的话,应该能理解虚拟机的含义...虚拟机是对底层操作系统和硬件的抽象,可以使我们写的程序在不同的硬件系统、操作系统的主机上正确运行。
docker不是虚拟机,它只是对操作系统进行了抽象,没有对硬件进行抽象。所以用docker启动的程序耗费的资源要比虚拟机启动的小,docker启动程序的速度也非常快。


C、从A的理解可以看出,tomcat和docker不是一类东西,解决的是不同领域的问题。tomcat可以放在docker里。


D、docker镜像可以理解为类,是具有某些特征的事务的抽象(人话:镜像就是一个模板。一个java程序运行的环境基本都是nginx+tomcat+(redis/memcache+)mysql这种架构,只要架构一定,那么各个框架的配置也是相差无几的,docker镜像就是这些框架的配置的模板。另外,docker镜像会保存在docker的远程仓库中,方便调用)。

docker容器就是docker镜像的实例。要使用docker首先要具备一个docker容器,可以自己配置,也可以直接从docker远程仓库拉取。


遇到的问题


收获

1、在看各种资料理解docker的概念的时候,还是各种懵。强行逼自己用自己的话来把docker几个名词解释出来,虽然不一定准确,但确实是没那么懵逼了。真的是,能讲出来的东西,才是自己理解的。


明天的计划

补基础、面向对象的高级知识


进度



返回列表 返回列表
评论

    分享到