很多人都用过虚拟机,如VMWare,虚拟机就是在你的操作系统里面装一个软件,然后通过这个软件模拟出一台甚至多台“子电脑”出来。在“子电脑”里,你可以和正常电脑一样运行程序,而“子电脑”和“子电脑”之间,是相互隔离的互不影响。
虚拟机虽然可以隔离出很多“子电脑”,但由于它需要虚拟出整个操作系统,因此会很占空间,启动很慢。用过的人大概都深有体会。
什么是容器?
容器和虚拟机一样,也是虚拟化技术,但是与虚拟机不同的是,容器不需要虚拟出整个系统。与虚拟机相比,容器更像是一个“沙箱”,其底层完全依赖寄生主机的内核。如下图所示。
另外,如果我们从隔离级别、隔离策略、系统资源、启动时间、镜像存储、集群规模和高可用策略等方面,对比容器和虚拟机,你会发现容器基本全面碾压虚拟机。
也正由于容器这些突出的优点,加之微服务的兴起,近几年容器技术受到了热烈的欢迎、追捧和发展,其中佼佼者之一就是Docker。
什么是Docker
Docker是创建容器的工具,是应用容器引擎。它可以让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上。虽然,Docker与容器联系紧密,但这并不代表Docker就是很多人理解的容器。
如果要形象的描述说明,Docker就像是一艘大邮轮,而容器就是上面的集装箱。所有集装箱的正常工作都要依赖邮轮,但是集装箱与集装箱之间互不影响。另外,每一个集装箱都可以很容易地从邮轮上拆卸下来,也可以很容易地安装到邮轮上。
什么是容器编排?
容器编排是微服务架构下的一个场景需要,因为此时一个完整的后端服务不再是单体服务,而是由多个职责和功能不同的服务组成的复杂服务。此时,如果还是按照单体服务时的那种方式创建、部署和销毁容器,你将发现工作量巨大,甚至不可能完成。
为解决这个问题,人们想到了容器编排。
容器编排是指对单独组件和应用层的工作进行组织的流程,也是指对容器的创建、部署、销毁、网络处理、故障转移等管理行为。容器编排将很多对于容器的操作进行自动化,精细化,降低了管理大量容器的难度。
当前常见的容器编排工具有K8S(Kubernetes)、Docker-Compose和Docker Swarm等,但较为常用的是K8S。
为什么大家都使用K8S,而不使用Docker-Compose和Docker Swarm?在下一篇文章中,我将接着讲。