分享

可以用docker代替虚拟机,运行生产服务器吗?

 邸彦强 2021-06-10

Docker中文叫容器,和虚拟机有很多相似之处,也有诸多不同之处。用来运行生产系统,都是没问题的。虚拟机具有普适性,而Docker的轻量化更适合微服务架构的应用,下面我们就来了解一下:

1、Docker和虚拟机异同点

①、虚拟机

说起虚拟机我们都非常熟悉。它利用虚拟化技术将操作系统和物理服务器脱离关系,虚拟机通过虚拟层和宿主物理服务器打交道。这样,我们的宿主物理服务器只要性能足够,就可以运行大量的虚拟机。而虚拟机因为脱离了物理硬件的捆绑关系,也就具备了很多优点:

  • 完整性:虚拟机就是打包了操作系统、虚拟硬件等等的一组文件,它具有真实计算的完整功能;
  • 独立性:虚拟机和虚拟机之间本身是互相隔离的,就算两台虚拟机在同一台宿主机上,也不会因为其中一台虚拟机出问题,导致另外一台虚拟机出问题。
  • 可移植性:整个虚拟机是一组文件,可以很方便的复制迁移。一迁移就是这个系统都迁移出去了。
  • 高可用性:虚拟机因为和物理服务器脱离了捆绑关系,它可以在被虚拟化的服务器中自由漂移。任何一台物理服务器出现故障,虚拟机并不会因此无法工作。同时,当然虚拟化平台还提供了性能负载均衡和灾备的一些特性。
  • 高性能:单个虚拟机是无法突破宿主物理服务器的性能的,那如果要实现更大的性能,虚拟机可以组建集群,将集群虚拟机分布在不同的物理服务器中来实现。

当然,虚拟机不止我这里说的好处。它是云计算的最基础技术,没有它就无法实现云计算。

②、Docker

Docker是在虚拟机之后才出现的技术。它也是在操作系统之上的轻量化虚拟技术。它可以运行在传统的物理服务器上,也可以运行在虚拟机之中。它是将应用系统的运行环境和应用软件打包在一起的技术,它也具备很多优点:

  • 独立性:每一个Docker都是一套应用软件和配套环境,和其他Docker是互相隔离的;
  • 便捷性:软件从开发者手上开发出来到使用者这边,只需一个Docker镜像就可以把开发者的完整环境搬到使用者这边。无需重新配置环境。
  • 可移植性:Docker的可移植性主要是应用软件和环境可以快速迁移。
  • 高可用:Docker本身无法实现高可用。它需要借助分布式管理平台来实现高可用性,比如:著名的谷歌K8S,是一整套非常不错的分布式管理程序,已经可以实现所谓的“容器云”
  • 高性能:同样是通过分布式管理平台,来实现多个Docker的集群。性能不够就加Docker。

③、两者相同点和不同点

虚拟机和Docker都具有高可用和高性能的特点,他们都是一种虚拟化的技术。但两者也存在很多的不同点:

  • 虚拟机的虚拟化处在更宏观的层面,操作系统都被打包进去。优点在于无需重装系统,而且虚拟化可以和硬件直接打交道,性能调度掌握在虚拟平台上,缺点在于,每一个虚拟机都需要运行一套操作系统。
  • 而Docker的虚拟化则在更微观的层面,它并不是完整计算环境,它只打包了应用程序和环境,所以,缺点在于调度硬件的性能取决于外在操作系统,同时,Docker太多后关系非常复杂,人工是很难理清楚性能问题和故障的,还好容器平台都有自动化工具。它的优点就是非常轻量化,应用可移植性非常强,对软件开发来说非常方便。

2、Docker可以取代虚拟机的地方

通过上面虚拟机和Docker的对比发现,Dokcer更适合当前采用微服务架构的应用软件开发、部署、运维的所有过程。那到底什么是微服务架构呢?

这个起源于互联网公司,互联网的软件都是需要快速上线,持续迭代更新,又有大量的轻量并发访问。基于这些特点,互联网公司通常将一个大型的应用程序和服务拆分为数个甚至数十个的支持微服务,通常扩展单个组件而不是整个的应用程序堆栈,从而满足互联网访问这种特性。这就是我们常说的微服务。架构对比示意图如下:

从图中,我们可以看到传统架构是一个紧耦合的应用,各个模块都是集成在一个应用里面。不仅应用对性能要求高,数据库对性能要求也高。自然不适合Docker来做,更适合虚拟化或者物理集群来做。而微服务架构则不同,拆散成了很多个微小的服务组件,这样就比较适合Docker来开发部署了

当然,现在微服务架构已经不局限在互联网公司用了。只要具有互联网软件相似特点的应用,都可以采用微服务架构来开发。所以,Docker也就被用的越来越多。但Docker和虚拟化并不是互相排斥的,反而是相互贯通的

3、Docker和虚拟机是互相贯通的

因为Docker是微型虚拟化的容器,它可以运行在物理机操作系统上,也可以运行在虚拟机的操作系统之上。所以,Docker和虚拟机并不互相矛盾。反而是相辅相成的。现在,很多互联网应用都是在虚拟机组建的云端上部署Docker应用。这样既有云计算的弹性性能提供,也有Docker快速灵活部署应用的特点。是相辅相成的绝佳方法。

总结

总之,Docker是轻量级的虚拟化,只打包软件和软件运行环境。而虚拟机则是打包操作系统的重量级虚拟化。两者之间有虚拟化的共同特点,也有自己的独特性。在实际使用中,Docker非常适合采用微服务架构的软件开发、部署、运维。而虚拟机则普适性比较广,但它和Docker是互相贯通的,相辅相成的,并不矛盾冲突。

感谢阅读!我是数智风,用经验回答问题,欢迎评论关注。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多