docker与传统虚拟化的区别是什么

55次阅读
没有评论

共计 3017 个字符,预计需要花费 8 分钟才能阅读完成。

这篇文章主要介绍“docker 与传统虚拟化的区别是什么”,在日常操作中,相信很多人在 docker 与传统虚拟化的区别是什么问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”docker 与传统虚拟化的区别是什么”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

docker 是什么?

       docker,它是一个基于 LXC(LinuX Container)的高级容器引擎,使用 Go 语言开发,遵循 Apache2.0 协议,全部开源代码均托管在 github 上(https://github.com/docker/docker)。它诞生于 2013 年初,最初发起者是 dotCloud 公司,该公司现已经改名为 Docker Inc,专注于 Docker 相关技术和产品的开发。

        目前,主流的 linux、windows 和 mac 都已经支持 docker。需要注意的是,由于 docker 是基于 LXC 的,所以除了 linux 之外的操作系统,都是靠在虚拟机里面跑 linux,再在 linux 上跑 docker 来实现的。

       docker 诞生的主要目标是 Build,Ship and Run Any App,Anywhere,即通过对应用组件的封装 (Packaging)、分发(Deployment)、部署(Deployment)、运行(Runtime) 等生命周期的管理,达到应用组件级别的 一次封装,到处运行。这里的应用组件,既可以是一个 web 应用,也可以是一套数据库服务,甚至是一个操作系统或者编译器。

 

LXC 是什么?

       docker 引擎的基础是 Linux 容器(linux container,LXC)技术。IBM DevelperWorks 上给出了关于容器技术的准确描述:

      容器有效地将单个操作系统管理的资源划分到孤立的组中,以便更好地在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心 CPU 本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化(paravirtualization)和系统调用替换中的复杂性。

       liunux 容器并不是一个全新的概念,早期的容器技术有 chroot、Solaris Containers、FreeBSD jail、linux-VServer、Solaris Zones、OpenVZ、lxc 等。虽然这些技术发展很早,但是并没有集成到 linux 内核中去,使用起来很不方便,比如 OpenVZ 需要先给操作系统打上特定的内盒补丁才能使用。LXC 项目借鉴了前人成熟的容器设计理念,并给予一系列新的内核特性实现了更具扩展性的虚拟化容器方案,并且被集成到了主流 linux 内核中,进而成为 linux 系统轻量级容器技术的事实标准。

        在 LXC 的基础上,docker 做了很大的改善,比如:

1、LXC 的定位是作为一种虚拟机的替代方案。虽然所有的软件都可以安装在由 LXC 或者 Docker 管理的容器中,但是 Docker 更倾向于在一个容器中运行一个应用
 

2、每个 LXC 容器之间或许不兼容,但是  docker  采用了一种标准的配置方法使得由不同 docker 创建出的 LXC 能够完全兼容

3、Docker 实现了类似 git  的容器版本管理方法,并且能够进行增量更新。

4、可以创建  base image  并将其保存在远程仓库 (repository)  中以便复用,其他容器可以在其基础上进行创建并保存为新的 image。

5、docker 提供了各种容器管理工具(如分发、版本、移植等)让用户无需关注底层的操作,可以简单明了地管理和使用容器

6、Docker 管理着一个公共的 image 库方便用户分享自己的 image,同时公司也可以构造自己私有的 image 库。

7、Docker 的容器是根据  Dockerfile  构建的,你可以在构建 image 的过程中,根据需要运行任何命令和程序。

8、因为 docker 越来越流行,有大量的方法能够将其轻易地集成到开发过程中,比如可以采用统一的方法来构造用于持续集成的环境和开发环境的容器。
 

Docker 与虚拟机的区别

        其实,docker 和虚拟机都是属于虚拟化技术。而虚拟化技术又分了很多种类。比如 VM、KVM 这种全虚拟化和早期的 Xen 这种半虚拟化。而 docker 则是属于操作系统级虚拟化。

        像 VM、KVM 之类的虚拟出来的都是虚拟机,而 docker 作为一种轻量级的虚拟化方式,那么 docker 在运行应用上跟传统的虚拟机方式有哪些显著优势呢?

1、docker 容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式要快的很多

2、docker 容器对系统资源需求很少,一台主机上可以同时运行数千个 docker 容器

3、docker 通过类似 git 的操作来方便用户获取、分发和更新应用镜像,指令简明,学习成本很低

4、docker 通过 dockerfile 配置文件来支持灵活的自动化创建和部署机制,提高工作效率

下面是 docker 容器技术和传统虚拟机技术的特性比较:

特性容器虚拟机启动速度秒级分钟级硬盘使用一般为 MB 一般为 GB 性能接近原生弱于
  系统支持量单机支持上千个容器一般几十个隔离性安全隔离安全隔离

       docker 的这些优势是什么造成的呢?我们可以先看下图:

        传统虚拟化是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层,而 docker 容器却不需要这两层,而是直接使用操作系统的系统调用接口。正因为这样子,docker 容器除了运行其中的应用之外,基本不消耗额外的系统资源,保证应用性能的同时,尽量减小系统开销。传统虚拟机方式,运行 N 个不同的应用就要启动 N 个虚拟机(每个虚拟机需要单独分配内存、磁盘等资源),而 docker 只需要启动 N 个隔离的容器,并将应用放到容器中即可,这样子就减少了很多的资源消耗。

docker 在软件开发流程中的优势

       docker 在设计之初就有以下几个目的:

1、加强开发人员写代码的开发环境和应用程序要部署的生产环境的一致性,从而降低那种 开发一切正常,肯定是运维的问题 的风险。

2、缩短代码从开发、测试到部署、上线运行的周期,让你的程序具备可以执行,易于构建、并易于协作

3、docker 鼓励面向服务的架构和微服务架构。docker 推荐单个容器运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型

        使用 docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。

        总体来讲,docker 在开发和运维过程中,具有如下优势:

1、更快速的交付和部署

2、更高效的资源利用。docker 容器的运行不需要额外的虚拟机管理程序(VMM,以及 Hypervisor)支持,它是内核级的虚拟化,可以实现更高的性能,同时对资源的需求很低

3、更轻松的迁移和扩展

4、更简单的更新管理。使用 dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作,并且所有修改都以增量的方式进行分发和更新,从而实现自动化并且高效的容器管理。

到此,关于“docker 与传统虚拟化的区别是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计3017字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)