IT界2014年之前,对于服务器虚拟化的使用,有过一个流派,基于Windows server系统+VMware组成服务器集群,但是后期由于这样的使用方式维护成本相当高,比如服务器的序列、服务器台账以及服务器与服务器之间的切换等等,诸如此类的问题都需要人工去主导,所以这种流派渐渐的泯灭消失在正式环境开发中,如今只会在一些学习环境下见到这样的环境,就比如作者在2021年的时候上班的公司接了公家学校合同组建IT的相关专业,当时公司方面赞助学院微机教室的器材中,软件方面就是提供了一台华为的服务器,在这台服务器上搭的Windows Server 2008+vmware。
2014年以后,主流的正式开发中,所使用的虚拟化技术就是linux+docker+k8s,两者相比之间好处就在于系统支持上linux比WINDOWS更利于服务器的运行,同时docker将虚拟化的使用变得更简洁更轻量化,大大的简化了运维成本,而k8s是后面我们要介绍的一个东西,它其实是基于docker的一个脚手架,这个脚手架的作用就像我前面说的,用来解决服务器的序列、服务器故障切换等等的运维问题,它的运行是用逻辑单元pod,可以把pod看成我们开发好的一个大服务,一个pod里面包含着n个docker,这些docker承载着组成这个大服务的各种环境镜像。
言归正传,Docker它的本质是将某个服务做成镜像,用的时候实例化一个容器环境,有点开箱即用的味道。最直观的好处就是当我们开发一个东西后,拿到它的人不在需要一点一点的复刻运行环境,只需要拿到我们提供的Docker镜像就可以直接运行。
另一点好处启动快,我们在开发中常常用到VMware,但是该虚拟机软件下的虚拟机实例启动一次往往是分钟级的,但是Docker运行的虚拟容器的重启是秒级的。这里说的虚拟机实例
和虚拟容器
有些差别,虽然vmware和docker都是虚拟化技术的软件,可VMware的虚拟机实例说的是一个完整的操作系统,而虚拟容器它本质上是一个被隔离的进程,其中运行了Docker镜像的实例对象。
在Docker的技术背景下生成了一个概念DevOps
,它的核心思想是开发既运维,白话就是不要运维岗位了,开发使用Docker保证环境的维护,但是目前为止这个概念还不现实,不是说技术达不到,而是社会工作结构就不允许资本家怎么干。当然这种概念虽然不现实,但是它的本意是好的,它是为了更快速的交付和部署、更便捷的升级和容器伸缩、更简单的运维以及更高效的资源利用。
这里强调一下容器伸缩,其实也有一部分高效利用资源的意思,典型的例子就是阿里双十一、春运买票或者微博热点等业务背景下,需要大量的服务器资源,这个时候需要的资源可能动辄上千台服务器,你总不能去手动搭建吧?时间不说是否足够,人力成本就能拖垮你,就算真的搭建出来了,万一出现意外呢?最后不出现意外,使用结束这些资源后怎么办呢?放哪里不动等下一次用?
综上所述,Docker的优点也就体现出来了,轻量化秒级的快速启动速度、简单易用、活跃的社区,支撑统一的打包部署运行方案、镜像支持增量分发、易于构建良好的API、资源的利用尤其是内存和IO的开销。
大家在使用Docker的时候注意,Docker是用Go语言写的,而且出的比较晚,同时一般使用它都是在Linux上,当然Windows也可以,只是很少有人用,当前使用的CentOS中理论上只有6.5及其以上的版本可以运行Docker,因为Docker最低需要Linux的内核版本达到2.6.32-431或更高。
Docker的核心三大要素分为镜像、容器、仓库
,其中镜像就和我们安装系统的ISO一个意思,是实例化容器时的模板。容器是镜像的实例。仓库是存放镜像的地方。
图看不懂没关系,知道Docker的三要素是什么就行。