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的这个imagecontainer的魅力所在。
  • 注意:imagecontainer里运行的应用的关系,可以参照面向对象语言中,对象的关系,粗略的将image理解为类,container中运行的应用是image的副本实例化的产物。

可能有人要问,这种单独应用的环境的确解决了,那么是如何解决给1000台机器搭建不同的环境呢?突然想到了小品,把大象装冰箱一共分几步?这里是把应用封装安装到1000台机器分几步?

4.解决给1000台机器搭建不同的环境:

  1. 给1000机器安装docker,传统方式分发一键给所有机器安装。

  1. 给要部署的应用构建所需要的不同的image单元模板,不同的模板可以编程,用dockerfile来编写,image放在指定的仓库。

  1. 让1000台机器从指定的仓库自个拉取各自需要的镜像,各生成各自的container,用脚本也可以,用程序编程也可以。

  1. 检验容器是否正常运行。

5.回归正传,docker的理解:

  • docker是用来做软件发布的一个软件,是一个工具。这点要记好了,这喵的只是个工具。

  • 运行在docker的应用可以跨平台运行,其实是“作弊”的跨平台运行,所谓跨平台运行,就是多个操作系统都有对应的docker安装包嘛,docker是跨平台的,但是docker上跑的应用可没跨平台。应用都是运行在docker上,应用哪来的什么跨平台,都是这么干的,java的跨平台,也是这么个意思。

  • docker可以定制化软件运行环境和基于运行环境开发的软件于模板里面,上面有提到过叫image。用dockerfile写嘛,其实就是写写运行安装软件和环境的脚本嘛,贼简单,语法和shell脚本类似。

  • 上面也说过了可以在跨平台运行,那么运行在哪呢?是运行在容器中,这个容器叫ContainerContainer是被docker管理的。也就是说,礼物还是装在熟悉的盒子里面嘛,盒子都放在docker这个桌子上。想了解原理的可以看这里,这个前辈写得挺透彻的。

  • 要生成自定义镜像,有个东东来了,那就是Dockerfile,简单来说,Dockerfile是一个脚本,用来编写要自定义的镜像该如何去生成的步骤,比如说,要生成一个自定义的image镜像,是基于ubuntu的,那么在Dockerfile的最前头应该有这么一句话 FROM ubuntu等等,具体的Dockerfile的指令操作,在此不细说,大家只要明白Dockerfile是个用来描述自定义镜像的生成步骤的脚本,反正很简单就是了。啰嗦一句,每个Dockerfile中操作的指令都会让docker在执行Dockerfile的时候生成一个临时的layer,多个layer构成一个image镜像,如果命令有改动,会生成新的layer,没有改动,就只保留一份layer

6.结束语

  • 见到新技术的时候,不要去怕深入,新技术的出现,肯定是因为有新需求的出现,新需求出现了,但原有的解决相应问题的解决方案不够用了,那么便会推进新的技术理论的出现和发展。
  • 不要为了学习新技术而学习新技术,因为如果没有具体的去使用新技术,是不那么容易理解的,从问题出发到解决方案和技术。
  • 搞不懂新技术是干什么的,要学会不求甚解,先学会用,然后再相辅相成的大胆猜测,小心求证。
  • 最后一句,干就完了,不怂。

下一篇:Docker相关知识《Docker安装》

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐