什么是docker
Docker是2013年开始火起来的一门技术,号称是革命性的技术,它主要解决的是软件环境配置的问题以及资源管理利用的问题,后者目前我们称为云计算。
什么是软件环境配置的问题
如图,在开发软件的时候,一般会走三个阶段:开发=>测试=>发布,每个阶段所使用的机器可能都不一样,也就是说,可能开发同学觉的没有问题的软件,在测试同学的机器里就没法跑了,同样,测试同学测试ok的软件,部署在生产环境中,又没法正常的工作了,我们也经常会遇到这种问题,一个软件,在朋友的电脑里可以运行,但是在我们的电脑里却不正常了。
出现这种问题的,往往是因为我们的软件在运行的时候,会依赖的其他程序,而这些程序在各个机器上又有一些差异,比如一个php博客系统,运行的时候需要用到apache、php引擎和mysql数据库等等,如果你的机器上的php引擎版本比较低,或者mysql扩展没有按照,就会导致系统无法运行,这类问题,我们就称为环境问题。
有的同学可能会说,这个问题,在安装的时候,注意一下不就可以了,这个说起来容易,但做起来非常的困难,从实际的结果来看,每个企业都在为这种软件环境的问题而头疼不已,不然docker这门技术也不会有机会火起来。
docker是如何解决环境问题的
docker的logo图片是一个鲸鱼头上顶着集装箱:
docker的思路和集装箱差不多,既然我们的软件,在部署的时候会因为所处的环境的差异而变的不稳定,那么干脆,我们把软件和它所依赖的环境一起打包在一起,形成一个“集装箱”:
这样,在开发同学开发完成后只需要将“集装箱”交给测试同学测试,测试通过之后,在将“集装箱”放到线上运行,这个过程中始终都是同一个“集装箱”,所以可以将不稳定因数很好的控制起来。
docker和虚拟机有什么区别
听起来,虚拟机也可以达到上面的效果,但是虚拟机比较重:
如图,左边是虚拟机架构右边是docker架构,相比较docker,虚拟机主要的瓶颈在Guest OS层(客户机操作系统),每个虚拟机里面都要安装一个操作系统,这造成了虚拟机有以下一些缺点:
- 占用大量的磁盘空间,通常是GB级别
- 启动慢,通常是分钟级别,操作系统启动需要多长时间,虚拟机就需要多长时间
- 客户机操作体统运行时会提供很多我们不需要的功能和服务,造成CPU和内存资源的浪费。
docker则是利用了Linux内核的namespace,轻量级的将环境进行隔离,避免虚拟机中的那些问题,可以最大程度的利用计算机资源。
云计算的需求
云计算要求计算资源可以被共享和按需分配,docker天然支持了这种功能。在启动一个docker容器的时候,我们可以指定其使用的资源数量(CPU核数、内存大小等)。
多个docker通过编排和组装就可以提供高性能和高可用的能力,在2016年的618活动中,京东就动用了数10万个docker容器来为用户提供稳定的服务。
docker的管理
当数个docker一起工作的时候,就需要涉及到docker的管理了,包括docker的分组,docker的健康检测,docker间相互通信,docker的弹性伸缩,故障恢复等等,目前在做这一块的是docker compose以及google提供的k8s技术。
总的来说,docker可以让我们拜托头疼的程序部署问题,提升开发效率,同时让我们轻松拥有高性能高可用的系统。