家庭数据中心系列 浅谈三种虚拟技术:Virtual Machine、LXC、docker
本文最后更新于 351 天前,其中的信息可能已经有所发展或是发生改变,如有失效可到评论区留言。

前言

在家庭数据中心的搭建过程中,涉及到了3种虚拟技术,分别是传统的Virtual Machine(VM)、Linux容器(LXC)、以及我们搭建应用时候主要使用的docker技术。

为什么我会同时使用这3种虚拟技术呢?

要回答这个问题,我们先要搞清楚这3种技术之间的关系。说起来,这3种技术其实存在“包含”的大小关系,如下图(随手画的,比较随意,看得明白就成):

image.png

上图中的包含关系正确的来说应该是虚拟内容的多少,圈越大需要虚拟的内容就越多。

1、Virtual Machine(下文中就简称VM)

VM技术需要虚拟全套硬件,包括cpu、内存、网卡、硬盘、显卡等等,这种程度的虚拟会消耗一定的系统资源,不过带来的好处是完全的资源隔离性,这个在实际生产环境中尤为重要,可以确保重要业务之间的完全隔离。正常情况下,使用VM技术搭建的虚拟机是裸硬件,需要自行安装操作系统,不过可以通过制作模板的方式来提高部署效率。

本质上来讲,VM就是虚拟硬件。

2、Linux容器(LXC)

VM技术是通过消耗资源换来完全的资源隔离性,但是有时候我们也可能不太在意资源的完全隔离性而反而在意消耗,比如我:一台inter-cpu-mini主机,i5 13400的cpu(才10核还分大小~),64g内存,这点资源多一个虚拟机就是多一份消耗,蚊子再小也是肉啊,所以这种情况下不到万不得已我是不会用Virtual Machine来搭建虚拟机的。

这个时候,LXC技术就显得尤为实用:如果你的宿主机的操作系统是Linux,那么LXC技术可以几乎无消耗的提供给你各种发行版的Linux(还包含不同版本的选择)的虚拟机,而且新建一个虚拟机只需要几秒的时间,甚至还包含很多基础组件库,你说气人不?

本质上来讲,LXC就是虚拟Linux系统(通过共享宿主机内核的方式)。

3、docker

使用VM搭建的虚拟机是裸硬件,使用LXC搭建的虚拟机是裸Linux系统(且对宿主机操作系统有要求),但是对于大部分人而言并不在意硬件和使用的宿主操作系统(win,Linux,macos),而只是关心需要部署的应用,那么这个时候docker就是最理想的选择了。docker最大的优势就是只要能成功部署运行环境,不管硬件是pc,nas,服务器,软路由还是其他什么乱七八糟的硬件,统统都能运行。按照血统来看,docker其实是LXC加强了cgroup和namespace之后的产物。

不同环境下虚拟技术的选择

讲清楚了3个虚拟技术的各种优劣势,再回到家庭数据中心搭建中的选择问题。

由于要利旧乞丐版的m1 mac-mini(只有8g内存,干啥都嫌小),想来想去,就安装了docker desktop for mac作为主力的docker运行环境,同时作为tailscale中继服务器(这个以后专门用一篇文章讲)、apple缓存服务器、proxy发布服务器、VNC远程运维服务器,也算充分利用了。

inter-cpu-mini主机安装了PVE虚拟环境(Esxi是收费软件,不符合我们搭建家庭数据中心时免费的理念,关键宿主系统还没法折腾,比如安装tailscale),其免费版都支持集群部署、迁移这些功能,还原生支持LXC,加上PVE7.4本身就是基于debian 11的,可玩性高,除了这个还有其他选择吗。。?

PVE虚拟环境中,同时部署了2种类型的虚拟机(VM和LXC)。所有需要源码方式部署的应用都分开放在不同的LXC中,起到了一定的隔离作用(例如可以分开重启不同的LXC)。通过VM搭建的虚拟机有2个,一个是win11(作为RDP远程运维服务器,emby演示服务器),这个没办法,只能用虚拟机;另一个是debian12。

为什么有一个debian12的虚拟机?这个就和LXC的一些局限有关了。前面提到过,LXC本质上是和宿主机Linux共享内核,其为了安全,默认限制了一些对宿主机root调用的权限(可以通过启用特权模式容器开启,但是一般不建议这么干),所以如果在LXC中运行docker(“容器”套“容器”),有少量需要使用到宿主机root权限的应用就会报错(比如长亭雷池的WAF和宝塔云控平台)。为此,我专门创建了一个debian12的虚拟机用来作为备用docker环境,LXC就专注跑源码部署的应用了。其实LXC跑docker是最好的,只要docker没有特殊的权限要求,但是我有强迫症,不想LXC部署一堆docker,debian12虚拟机又部署一堆docker,所以干脆就把备用环境的docker全放在debian12虚拟机上跑了。

综上所述,适合docker部署的就用docker,适合源码部署的就用LXC,迫不得已的时候就用VM。

博客内容均系原创,转载请注明出处!更多博客文章,可以移步至网站地图了解。博客的RSS地址为:https://blog.tangwudi.com/feed,欢迎订阅;如有需要,可以加入Telegram群一起讨论问题。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
       

本站已禁用鼠标右键和各种快捷键,代码块内容可以直接在右上角点击复制按钮进行复制

zh_CN