用通俗的话说明Docker是什么
1.docker官方解释:见 【Docker百度百科】看完了是不是一头雾水?还是不知道做什么的,对么?反而更迷糊了?不急,接下来看~~还有很多不明白的,比如说:容器是什么?镜像是什么?还有很多很多疑问?说实话,我非常讨厌这样的官方的很学术的介绍,非常的不利于初学者初次接触这种新技术,可能就被这个解释给弄得不敢继续深入下去了,感觉非常非常难,废话不多说,上正餐!
·
1.docker官方解释:
见 【Docker
百度百科】
- 看完了是不是一头雾水?还是不知道做什么的,对么?反而更迷糊了?不急,接下来看~~
- 还有很多不明白的,比如说:容器是什么?镜像是什么?还有很多很多疑问?
- 百科,这应该是科普的作用,又不是写书,搞这么深入细节干嘛?有需要深入的,自个儿去深入就得了,提供引用的书籍介绍下书籍就可以了。学学维基百科,这分类和逻辑才是棒。
- 说实话,我非常讨厌这样的官方的很学术的介绍,非常的不利于初学者初次接触这种新技术,可能就被这个解释给弄得不敢继续深入下去了,感觉非常非常难,废话不多说,上正餐!
2.先想一个问题,为什么docker会火起来?当然是存在即是合理啦:
docker
是为了解决传统虚拟环境的短板而新兴的技术。
- 生产环境部署应用,需要根据不同的开发语言,或者开发方式,会需要各种各样的环境。比如有的是
python
写的,那么需要python
环境,Ruby
写的,那么需要Ruby环境等等,不尽相同。
- 矛盾点在于,传统的部署解决方案用的是虚拟机作为部署单元,用类似
VMware
这样的工具来进行管理,如果只是单台虚拟机搭建环境什么的,压根用不上docker
,但是如果要给1000台机器搭建环境呢?环境都一样还好办,但是如果是五花八门的呢?
- 传统的技术,随着技术的发展,必定要从机器集群向云端演变,那么从开发角度上,要将业务越分越细,也就是微服务,那么应用单元就会越来越小,传统的虚拟机去部署这些个微服务,就显得有点大炮打蚊子的感觉。
docker
的容器化概念,简直就是刚刚好。
3.docker
的部署方式和传统虚拟机的对比:
- 传统虚拟机,单个虚拟机是一个部署单元,相对来讲是一个资源比较大的节点,功能并不单一,因为开辟一个虚拟机从操作系统到环境部署都是一个比较大的开销,所以,一般来讲为了节省资源,一个虚拟机会部署多个应用,那么一个虚拟机上的不同环境的应用,所需要的环境都会在这一个虚拟机单元上安装。应用之间如果环境相互影响,也是件比较头痛的事情。
docker
解决传统虚拟机部署的痛点,是这么干的。docker
引入了image
,姑且理解为模板吧,每个image
,都是一种定制好的模板,模板包括有定制化的环境,比如JDK1.8
,python3
等等这类基础环境,有需要的时候,那么直接根据需要用不同的模板,这样就可以得到包含基础环境的container
,姑且理解为送女朋友的五花八门形形色色的盒子。这个盒子里就是一个个应用,这样定制有心思的礼物才能给女朋友(客户)美好的体验。说到这里,不知道有没有感受到docker
的这个image
和container
的魅力所在。- 注意:
image
和container
里运行的应用的关系,可以参照面向对象语言中,类与对象的关系,粗略的将image
理解为类,container
中运行的应用是image
的副本实例化的产物。
可能有人要问,这种单独应用的环境的确解决了,那么是如何解决给1000台机器搭建不同的环境呢?突然想到了小品,把大象装冰箱一共分几步?这里是把应用封装安装到1000台机器分几步?
4.解决给1000台机器搭建不同的环境:
- 给1000机器安装
docker
,传统方式分发一键给所有机器安装。
- 给要部署的应用构建所需要的不同的
image
单元模板,不同的模板可以编程,用dockerfile
来编写,image
放在指定的仓库。
- 让1000台机器从指定的仓库自个拉取各自需要的镜像,各生成各自的
container
,用脚本也可以,用程序编程也可以。
- 检验容器是否正常运行。
5.回归正传,docker
的理解:
docker
是用来做软件发布的一个软件,是一个工具。这点要记好了,这喵的只是个工具。
- 运行在
docker
的应用可以跨平台运行,其实是“作弊”的跨平台运行,所谓跨平台运行,就是多个操作系统都有对应的docker
安装包嘛,docker
是跨平台的,但是docker
上跑的应用可没跨平台。应用都是运行在docker
上,应用哪来的什么跨平台,都是这么干的,java
的跨平台,也是这么个意思。
docker
可以定制化软件运行环境和基于运行环境开发的软件于模板里面,上面有提到过叫image
。用dockerfile
写嘛,其实就是写写运行安装软件和环境的脚本嘛,贼简单,语法和shell
脚本类似。
- 上面也说过了可以在跨平台运行,那么运行在哪呢?是运行在容器中,这个容器叫
Container
,Container
是被docker
管理的。也就是说,礼物还是装在熟悉的盒子里面嘛,盒子都放在docker
这个桌子上。想了解原理的可以看这里,这个前辈写得挺透彻的。
- 要生成自定义镜像,有个东东来了,那就是
Dockerfile
,简单来说,Dockerfile
是一个脚本,用来编写要自定义的镜像该如何去生成的步骤,比如说,要生成一个自定义的image
镜像,是基于ubuntu
的,那么在Dockerfile
的最前头应该有这么一句话FROM
ubuntu
等等,具体的Dockerfile
的指令操作,在此不细说,大家只要明白Dockerfile
是个用来描述自定义镜像的生成步骤的脚本,反正很简单就是了。啰嗦一句,每个Dockerfile
中操作的指令都会让docker
在执行Dockerfile
的时候生成一个临时的layer,多个layer
构成一个image
镜像,如果命令有改动,会生成新的layer
,没有改动,就只保留一份layer
。
6.结束语
- 见到新技术的时候,不要去怕深入,新技术的出现,肯定是因为有新需求的出现,新需求出现了,但原有的解决相应问题的解决方案不够用了,那么便会推进新的技术理论的出现和发展。
- 不要为了学习新技术而学习新技术,因为如果没有具体的去使用新技术,是不那么容易理解的,从问题出发到解决方案和技术。
- 搞不懂新技术是干什么的,要学会不求甚解,先学会用,然后再相辅相成的大胆猜测,小心求证。
- 最后一句,干就完了,不怂。
更多推荐
已为社区贡献1条内容
所有评论(0)