最近在上系统分析与设计这门课的时候,pml老师提到了一个神器——docker,听说很强大,后来我就自己去查了查,发现还真的挺好用的,接下来我就来科普一下docker这个强大的工具。
官网的介绍如下所示:
Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications.
其实看完这句话还是不明白究竟是啥的,下面就慢慢解释。不过长话短说的话,把他想象成一个用了一种新颖方式实现的超轻量虚拟机,在大概效果上也是正确的。当然在实现的原理和应用上还是和VM有巨大差别的,并且专业的叫法是应用容器(ApplicationContainer)
拿现实世界中货物的运输作类比, 为了解决各种型号规格尺寸的货物在各种运输工具上进行运输的问题,我们发明了集装箱,而集装箱就作为容器
Docker的初衷也就是将各种应用程序和他们所依赖的运行环境打包成标准的容器,进而发布到不同的平台上运行
比如我现在想用MySQL那我就找个装好MySQL的容器,运行起来,那么我就可以使用MySQL了。
那有同学会说直接装个MySQL不就好了,何必还需要这个容器这么诡异的概念?话是这么说,可是你要真装MySQL的话可能要再装一堆依赖库,根据你的操作系统平台和版本进行设置,有时候还要从源代码编译报出一堆莫名其妙的错误,可不是这么好装。而且当你的电脑上同时安装了Oracle数据库,MySQL和MongoDB的时候,就没这么简单了,会出现报错,这时候要是有容器就能解决这样的问题。
那么既然容器和VM 这么类似为啥不直接用VM 还要整出个容器这么个概念来呢?Docker 容器相对于VM 有以下几个优点:
1) 启动速度快,容器通常在一秒内可以启动,而VM 通常要更久
2) 资源利用率高,一台普通PC 可以跑上千个容器,你跑上千个VM 试试
3) 性能开销小,VM 通常需要额外的CPU 和内存来完成OS 的功能,这一部分占据了额外的资源
为啥相似的功能在性能上会有如此巨大的差距呢,其实这和他们的设计的理念是相关的.
VM的 Hypervisor需要实现对硬件的虚拟化,并且还要搭载自己的操作系统,自然在启动速度和资源利用率以及性能上有比较大的开销。
而Docker就省了这一步,直接基于主机的操作系统,大大减少了系统资源的开销