Docker最主要解决了环境部署问题,其次是解决应用之间相互影响的问题。
关于这个问题,首先我们需要从Docker定义来说起。
Docker定义
维基百科是这么定义Docker:
Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付应用、运行应用。 Docker允许用户将基础设施中的应用单独分割出来,形成更小的颗粒,从而提高交付软件的速度。 Docker容器 与虚拟机类似,但原理上,容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。
通俗的说,就好比我打包了个QQ软件,然后传给了你,你只要在你电脑装了Docker,在它上面运行起来就可以使用。
Docker出现解决了什么问题?
A.解决环境部署问题
在Docker未出现之前,我们一般在一台Linux服务器上要部署环境,需要安装各种系统依赖包,配置各种开源的中间件,最后才能部署好一个业务系统。
这样的工作,换了一台新的服务器,你又得重新来一遍,是不是很痛苦。
- 开发人员需要部署开发环境,以便各个开发人员共同使用。
- 测试人员需要部署测试环境测试,才能开始验证测试。
- 运维人员部署生产环境同样也得重新部署一次。
而Docker的出现,解决了环境部署问题。同一个Docker的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。
B.持续集成+持续部署+持续交付流水线管理
持续集成,持续部署,持续交付对于微服务开发来说,是提高团队整体效率不可或缺的一环。
随着持续集成工具(比如Jenkins)的快速发展,也增加了对Docker的支持,代码从开发者的机器到最终在生产环境上的部署,大大提高了生产效率。
有兴趣的可以了解下:SpringBoot + maven + Jenkins + docker 。
C.解决应用之间相互影响的问题
当我们只有一台Linux服务器,但是需要安装两套应用服务,而这两套服务系统依赖的版本不一致,那么用Docker创建两个不同的容器就可以轻松解决这个问题。
Docker VS 虚拟机
我们首先来看下虚拟机的架构,如下图所示:
再来看下Docker的架构,如下图所示:
从这里可以看到主要少了Hypervisor、Guest OS两层。
- 由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,所以效率更高。
- Docker由于直接利用宿主机的操作系统,则省略了Guest OS这个过程,因此新建一个docker容器只需要几秒钟。
下面在看这个形象的比喻,可能会更直观。
- 虚拟机是这样的:
- Docker是这样的:
总而言之:容器性价比高,做的事少并且使用起来相当廉价,而虚拟机提供整个虚拟化硬件层,可以做更多的事情但是使用成本显著。
我自己使用的Docker
持续集成部署这里我就不展示了,这里展示我本机电脑安装的Docker服务。
比如:
- 下载一个精简版的CentOS7,然后自己DIY加服务。
- 下载个Kali Linux 学习下安全知识。
再看看我在服务器搭建的Oracle服务:
如果你有过搭建环境的基础,你也可以自己搭建一个Oracle服务镜像,测试人员和开发人员用这个oracle基本能满足需求。
结束语
总之,Docker的出现是有它的必然性,轻便,简单,能快速提高效率,为何不尝试一下呢?
当你会用Docker之后,你可以自己制作镜像,供其他人使用。
备注:部分图片来自网上截图,如有侵权,请联系本人删除。