社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

「 Docker 还是 虚拟机 」,一文讲透,让你不再纠结~

极空间私有云 • 3 月前 • 129 次点击  


A
B
DISEASE PREVENTION


元气满满的周一好呀,我是小极君~

一周的开端,最适合学习了!今天咱们继续来攻克Docker VS 虚拟机的问题。之前咱们就已经邀请了数码大佬@Stark-C 分别从新手视角讲解过这二者是什么。(还没学习的极友可以坐传送门👉Docker入门虚拟机入门

那么今天咱们把它们放在一起打个“PK”,一方面帮助新手极友们深化二者的核心区别,不再混淆;另一方面则是帮助大家学会如何“选对”——针对“轻量应用”或“完整系统”等不同的使用场景,学会辨别何时用Docker更高效,何时用虚拟机更强大。

知己知彼,才能让你的NAS更好用嘛。不过你放心,这篇文章可不是让你二选一,毕竟成年人嘛,当然“全都要”,但关键在于:认清什么情况下用谁更合适。

搞定它们,就像掌握两种趁手的工具,更精准的释放你NAS的潜能,让你的极空间身价再涨一番~

文章的最后,@Stark-C 大佬还会根据不同需求和预算,给了你不同的“解法”。话不多说,进入正题👇




引言

哈喽小伙伴们好,我是Stark-C~

前几天为大家分享了在极空间上虚拟机的一些玩法心得,没想到大家的热情还是挺高的。有部分小伙伴提到其实很多虚拟机应用可以直接使用Docker搞定,不仅部署简单,玩法更多,而且在资源占用上也会大大降低。

嗯,确实是这个道理。不说别的,看看全网NAS的折腾玩法,绝大多数基本都是Docker教程,虚拟机虽说也有但确实占比很小。

所以我今天也是心血来潮,根据自己的见识,以及浅薄的技术,和大家来聊一聊在NAS使用场景上,Docker和虚拟机的一些基本小科普,以及个人的一些使用心得和建议,如有纰漏和错误恳请各位专业大佬指正,同时也欢迎大家在评论区分享自己不同的看法和玩法~





Docker 和虚拟机的区别是什么?

需要说明的是:Docker和虚拟机其实都是一种虚拟化技术,并且它们都能让我们在NAS上同时运行多个不同且相互隔离的应用或者系统。就比如说,现在有很多的项目其实是同时支持Docker和虚拟机的,如软路由系统OpenWrt,智能家居系统Home Assistant,甚至还有微软操作系统Windows。

但是它们的实现原理、资源占用、性能表现以及应用场景等多个方面都有明显不同。具体区别如下:


NAS玩家闲聊:Docker和虚拟机有什么区别?两者该如何选择?

总结一下,就是Docker是基于宿主机(你可以简单的理解为NAS 的系统)内核来运行容器的,它通过共享宿主机的内核,为每个容器提供一个隔离的运行环境;而虚拟机则是在宿主机上模拟(虚拟)出了一个真实的硬件环境,它有一个完整且独立的系统内核,每个虚拟机系统可以说是完全隔离。

还有就是,Docker 容器启动速度非常快,因为它共享宿主机的内核,内核本身已经在运行;而虚拟机需要从头加载完整的操作系统内核,所以启动速度相对较慢,并且资源占用也更高。

我这里为大家举个通俗的例子:

  • Docker 更像写字楼里那种开放式工区的独立工位,每个人都有自己的桌面、电脑和工作内容,彼此之间互不干扰,但大家共享整栋楼的基础设施,比如电力、空调、网络和安保系统,因此入驻一个新员工只需要安排个工位,几分钟就能开始工作,换人、扩容、调整都非常轻松,整体效率高、成本低、灵活性强。

  • 而虚拟机则更像写字楼里一间间完全独立的小型办公室,每个办公室都有自己的门锁、布线、电源系统,甚至可以根据需求重新装修、安装独立空调,隔离性极强、自由度也更高,但布置、维护、搬迁都需要更多时间和资源,成本和占用都比工位大得多。

简而言之,两者的差别本质上就在于:Docker 共享宿主机的“基础设施”,轻量快速;虚拟机拥有完整独立的“房间结构”,隔离彻底但更重。





为什么 ARM NAS 没有虚拟机?

关注NAS的小伙伴都知道,目前市面上在售的NAS品牌根据使用处理器架构的不同分为X86和ARM两种机型,一般情况下,这两种机型搭载的系统是完全一样,功能也几乎完全相同,唯一的区别就是,ARM的NAS相比X86少了一个虚拟机功能。

很多人以为是厂商“阉割”,其实完全不是这么回事。


NAS玩家闲聊:Docker和虚拟机有什么区别?两者该如何选择?

至于我为什么这么说,其实只要有以下几点:

1, 硬件架构使然:X86 处理器拥有专为虚拟机而生的虚拟化扩展(Intel VT‑x、AMD‑V 等),不仅成熟而且强大;但是NAS 用的 ARM 芯片几乎没有虚拟化扩展,或者只有非常基础的能力,效率极低;硬件不给力,虚拟机自然也跑不起来呀!

2,软件生态不给力:要知道目前市面上的虚拟机生态绝大多数都是为 X86 平台开发和优化的,ARM 虽然也能跑虚拟机,但大概率会遇到兼容性和驱动的问题,并且还有各种奇怪的小bug导致系统不稳定,体验上远不如 X86。所以说如其带来这么糟糕的体验,还不如直接不用它;

3,产品定位:ARM NAS 通常是入门级产品,本身的定位就是低功耗低成本,但虚拟机是非常吃资源的,会占用设备的CPU、内存、IO以及存储空间,在 ARM 上强行跑虚拟机,不仅体验差,还会拖累 NAS 本身的稳定性,得不偿失。

(以上结论只是针对目前NAS的使用场景啊,并不是说所有ARM处理器都是这样,也有非常厉害的,比如说Cortex‑A系列,以及苹果的M系列~)





普通 NAS 用户到底该怎么选?

先说结论:对于普通的NAS用户来说,直接优先考虑Docker!




NAS玩家闲聊:Docker和虚拟机有什么区别?两者该如何选择?

因为无论ARM还是x86,对于大多数 NAS 用户来说,Docker 已经能覆盖绝大部分需求,哪怕是软路由(OpenWrt)或智能家居(Home Assistant)这类看似专业的需求,Docker依然能够搞定,只是在功能上会有一定限制,例如无法使用网卡直通或 Supervisor 管理。

另外就是当前Docker不管是使用人数还是应用生态也是远远大于虚拟机,所以你在全网能找到的NAS教程中,Docker的教程是远远多于虚拟机的;并且Docker容器可以随时更新和维护,虚拟机更新还要考虑系统兼容、配置重置等一系列问题,远不及Docker方便。

还有一点不能忽视的就是Docker轻量快速、资源占用低的优势,这个对于NAS真的太重要了!毕竟NAS不是专业的服务器,虚拟机太吃资源了,冗余的资源对于NAS的稳定运行还是很重要的!

虚拟机在我个人看到一般都是专业人士用来搭建独立的开发、测试和生产环境,或者企业场景中部署一个高安全性的隔离平台,用来存储商业机密或一些敏感数据。

当然了,普通用户必须用到虚拟机的场景也有,比如说在需要将NAS的物理网卡直通给软路由虚拟机,实现家庭网关功能;或者运行一些特定软件(比如说网银系统),为工作提供方便;还有就是我个人一直在用的,利用虚拟机的网络桥接功能,将配置好代理之后的Windows虚拟机接入家庭网络,实现更灵活的网络管理。

记住,技术是为需求服务的。反正就是能用Docker搞定的就不需要虚拟机,必须要虚拟机的就尽量少部署,并选择资源占用少的系统,千万不要因为虚拟机而影响NAS的正常运行。





NAS 该怎么选?ARM 还是 x86?

毫无疑问,如果预算充足,肯定是直接考虑X86平台的NAS,先不讨论使不使用虚拟机的问题,X86的NAS配置、性能,以及扩展性肯定是明显高于ARM的,从长远来看,X86 平台的 NAS 不仅能满足你当前的需求,并且未来的使用周期也会更长;

如果说预算有限,并且你的需求不高,除了基本的数据存储备份,就需要一些影音娱乐和轻量级应用,更便宜更省电的 ARM 架构 NAS 也是不错的选择;如果是重度影音爱好者,并涉及到播放转码这些需求,个人建议还是入手X86更靠谱一些~




NAS玩家闲聊:Docker和虚拟机有什么区别?两者该如何选择?

总之就是根据需求选 NAS,不存在绝对的“谁更好”,只有“谁更适合你”。如果你只是想要一个稳定的家庭数据中心,用来备份照片、跑几个轻量服务,那 ARM 完全够用,省电、安静、价格友好,还不折腾。如果你是重度玩家,想跑一堆 Docker、折腾虚拟机、搭建软路由、跑数据库、跑 AI、跑各种实验环境,那 x86 才是能让你越玩越爽、越用越稳的那条路。

极空间在售的ARM机型有极空间Q2C、Z2Pro、T2、T2S,X86机型有T6、Z2 Ultra、Q4、Z4Pro、Z4Pro+、Z423、Z425。供你参考~








礼遇季享好价

给自己/家人的新年礼物

已经帮你备好了👇


扫码直达👇

扫码直达👇


图片图片

图片

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/190873