Docker的理解及与虚拟机的区别
概念什么是Docker?Docker是一个开源的应用容器引擎,它基于go语言开发,并遵从Apache2.0开源协议。使用Docker可以让开发者封装他们的应用以及依赖包到一个可移植的容器中,然后发布到任意的 Linux 机器上,也可以实现虚拟化。Docker 容器完全使用沙箱机制,相互之间不会有任何接口,这保证了容器之间的安全性。Docker诞生于2013年初,目前有两个版本,Community
概念
什么是Docker?
Docker是一个开源的应用容器引擎,它基于go语言开发,并遵从Apache2.0开源协议。使用Docker可以让开发者封装他们的应用以及依赖包到一个可移植的容器中,然后发布到任意的 Linux 机器上,也可以实现虚拟化。Docker 容器完全使用沙箱机制,相互之间不会有任何接口,这保证了容器之间的安全性。
Docker诞生于2013年初,目前有两个版本,Community Edition(CE,社区版)和Enterprise Edition(EE,企业版)。其中Docker社区版是免费开源的,对于个人和小团队来说是比较理想的选择;Docker企业版则是收费的,是专门为企业和大型IT团队提供的,用于要求比较严格的商业应用中。
Docker的特点
在学习一项技术时,了解该技术的特点才能更好地实际运用。Docker 作为当前主流的一个开源容器引擎,其主要特点如下。
1、更快速的交付和部署
开发者可以使用一个标准的Docker镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker 可以快速创建容器以及快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。Docker容器轻,且启动速度快,可以大量地节约开发、测试和部署的时间。
2、更高效的虚拟化
Docker 容器在运行时,不需要额外的虚拟机程序的支持。由于它是内核级的虚拟化,所以可以实现更高的性能和效率。
3、更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人计算机和服务器等。这种良好的兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个平台,十分有利于应用的迁移和扩展。
4、更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
除上述几个特点外,Docker还具有实现逻辑分离、适合与面向服务的架构配合使用等特点
Docker与虚拟机的区别
理解一:
- 启动速度:因为VM是一个完整的操作系统包括硬件和内核,所以它是一个重量级的系统;而容器是轻量级的,因为容器只打包了操作系统的基础文件和库文件、还有应用程序及所有的依赖,他的运行速度就好比在一台机器上创建一个进程一样,所以启动速度较快。
- 运行性能:由于VM增加了Hypervisor层用于虚拟化硬件,势必会增加一定的开销,所以运行性能有所损失;而容器是直接运行在物理操作系统上的,他本身与系统上其他进程并没有太大区别,所以运行性能是接近原生的。
- 磁盘占用:VM是一个完整的操作系统,所以为GB级别的;而容器只包含了一些系统启动的必要组件和程序依赖,所以是MB级别的。
- 数量:不用多说,运行一个操作系统的开销和运行一个进程的开销对比很明显。
- 隔离性:虚拟机是一个完整的操作系统级别的隔离,要比容器好很多;容器是进程级别的隔离,隔离的不彻底,因为多个容器之间使用的是同一个宿主机的操作系统内核,具体原因下一篇博文会详细分析。
- 操作系统:VM出的比较早,几乎支持了所有的操作系统;而容器只支持Linux内核,所以只能运行在Linux服务器上。
- 封装程度:理由同启动速度。
理解二:
从上图的对比中可以看出,虚拟机是运行在每个应用层级的客户端操作系统上的,这是资源密集型的。由于产生的磁盘镜像和应用程序的操作系统设置相互交叉,所以导致虚拟机对系统的依赖性很强,一旦系统出现问题,虚拟机依赖的文件以及安全补丁等都可能会出现文件丢失的情况。
Docker中的容器是基于进程的隔离,多个容器可以共享单个内核,并且创建 Docker 容器的镜像所需要的配置并不依赖于宿主机系统。正是因为容器之间配置的隔离性,容器之间就没有配置交叉,所以Docker的应用可以运行在任何地方。
参考转载至以下位置:
备注,博客只让放一个原文地址,请见谅。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)