(1)VM vs Docker
1 需求
应用创建后,期望可以做到封装一次,到处执行。为此,有VM和Docker容器两种封装方案。
2 本质上的区别
VM:在宿主机器、宿主机器操作系统的基础上创建虚拟层,在虚拟层上创建虚拟机,每个虚拟机拥有虚拟化的操作系统、虚拟化的仓库,并且每个虚拟机中可安装应用。
Container(Docker容器):在宿主机器、宿主机器操作系统上创建了Docker引擎,在引擎的基础上再安装应用。但是Docker容器存在一个问题,没有操作系统,Docker容器中的应用如何运行?
比如有一个App A必须在ubuntu中运行,可以在Docker中创建一个Ubuntu的镜像文件,这样就能将ubuntu系统集成到docker中,运行的应用就是ubuntu的应用。
3 区别
3.1 Size
以运行一个ubuntu中的应用为例,有虚拟机和Docker容器两种形式,其中:
(1)虚拟机中Ubuntu所占内存一般是几十个G。
(2)Docker容器中ubuntu镜像所占内存一般是几十M。
因此,对于同样一个应用,Docker容器所需要的存储空间相当于虚拟机的千分之一。
3.2 Startup
Docker在宿主机的操作系统上创建Docker引擎,直接在宿主主机的操作系统上调用硬件资源,而不是虚拟化操作系统和硬件资源,所以操作速度会更快。
应用启动时间对比:虚拟机启动大概2分钟,Docker只需要2秒钟。
因此,对于一个同样应用,相比于VM,Docker可以做到秒级启动。
3.3 Integration
Docker的集成性要比VM要好。
根据以上三点可知,对于一台宿主机而言,进行应用的封装时,使用docker比使用VM更合适,大小不到VM的千分之一,可以做到秒级启动,并且集成性更好。
4 Docker特点
(1)封装快、启动迅速
用户只需要几分钟就可以将自己的程序Docker化,随后就可以创建容器来运行应用程序,大多数Docker容器不到1秒即可启动。结合前面的分析,同一宿组机中能够运行更多的容器,使用户充分利用资源。
(2)职责的逻辑分类
Docker设计的目的就是要加强开发人员写代码的开发环境和应用程序要部署的生产环境一致,从而降低那种开发时一切正常,上线后出了问题就归结为肯定是运维的问题。
因此,使用Docker,开发人员只需关心容器中运行的应用程序,而运维人员只需关心如何管理容器。
(3)鼓励使用面向服务的架构
Docker鼓励面向服务的体系结构和微服务结构。
在一个Docker容器中可以运行多个应用,但是Docker推荐单个容器中只运行一个应用程序。这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序、扩展和调试应用程序变得简单。
有疑问欢迎留言