V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LeeReamond
V2EX  ›  问与答

Docker 虚拟机的开销高,还是 wsl2 虚拟机的开销高?

  •  1
     
  •   LeeReamond · 2021-03-08 11:30:39 +08:00 via Android · 4277 次点击
    这是一个创建于 1356 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,标题可能有些歧义,我有一个实际应用场景。

    有一个网络服务需要部署,公司只提供 windows 系统的物理机器,这个无法更改。该服务是基于 linux 部署的,目前通过 hyperv 虚拟机运行在 windows 系统当中。现在需要使用单例 redis,有两种部署 redis 的方案,一种是再开一台 hyperv 虚拟机,部署 redis,另一种是在现有的 linux 虚拟机里安装 docker,开一个 redis 容器。

    想要请教一下各位,单纯追求性能,不考虑维护难度以及内存的情况下,哪种方案的 redis 性能更好?
    22 条回复    2021-04-19 18:04:53 +08:00
    cheng6563
        1
    cheng6563  
       2021-03-08 11:46:52 +08:00
    wsl2 就是用的 hyper-v 。
    直接现有虚拟机里部署就行了,免得浪费内存。
    cheng6563
        2
    cheng6563  
       2021-03-08 11:47:36 +08:00
    而且 wsl2 的端口转发还需要一堆操作,难搞。
    ScepterZ
        3
    ScepterZ  
       2021-03-08 11:51:28 +08:00
    还有一种方案是这个虚拟机不用 docker 直接开 redis 吧,不太懂虚拟机的网卡会不会瓶颈,感觉 cpu 内存什么的应该都还好
    LeeReamond
        4
    LeeReamond  
    OP
       2021-03-08 11:52:17 +08:00 via Android
    @cheng6563 hyperv 用的是 wsl2,说反了吧,网络桥接部分问题倒不是很大,我主要想知道这种虚拟机套 docker 的方式会不会增加一层虚拟化开销,底层不是很懂
    LeeReamond
        5
    LeeReamond  
    OP
       2021-03-08 11:53:10 +08:00 via Android
    @ScepterZ 确实但是我觉得最好隔离一下,虽然不知道有什么用,隔离了总是好的,所以不考虑直接开的方案
    also24
        6
    also24  
       2021-03-08 11:56:40 +08:00
    > 有两种部署 redis 的方案:
    > 一种是再开一台 hyperv 虚拟机,部署 redis,
    > 另一种是在现有的 linux 虚拟机里安装 docker,开一个 redis 容器。

    我寻思着你这两个方案,和 WSL2 也没啥关系啊?


    首先背诵 100 遍:Docker 不是虚拟机
    其次,假如两台虚拟机性能上没有差异的话,你这两个方案的性能应该是非常接近的。


    不过,如果宿主机内存不大,那方案 2 可以给唯一的一台虚拟机分配更多的可分配内存,有利于更灵活的使用。
    同理,方案 1 的好处就是隔离性更强,两台虚拟机之间(一般情况下)不会出现抢占资源的情况。
    miyuki
        7
    miyuki  
       2021-03-08 11:57:34 +08:00 via iPhone
    docker 是容器,不是虚拟机……你理解成进程就可以了
    Osk
        8
    Osk  
       2021-03-08 11:58:58 +08:00 via Android
    docker 不算虚拟化吧。。。

    hyper-v - linux/wsl2 - docker - 程序
    hyper-v - linux - 程序

    不套 docker 性能肯定更好一点。
    至于 wsl2,,,还是别用在生产环境吧。
    cheng6563
        9
    cheng6563  
       2021-03-08 12:00:38 +08:00 via Android
    @LeeReamond wsl2 的网络问题大的很,我都因为他的网络问题放弃使用了。回到 wsl1+vmware 模式了。不要用 wsl2 发生产服务
    lostberryzz
        10
    lostberryzz  
       2021-03-08 12:04:01 +08:00
    docker 部署吧,比较方便点,还可以 portainer web ui 管理容器
    LeeReamond
        11
    LeeReamond  
    OP
       2021-03-08 12:04:06 +08:00 via Android
    @Osk 但是这个外面还有个 windows 系统,不同 hyperv 之间资源抢占是否有开销,毕竟 docker 那个模式可以在同一个 linux 内由 linux 分配资源
    LeeReamond
        12
    LeeReamond  
    OP
       2021-03-08 12:05:14 +08:00 via Android
    @cheng6563 大佬能否细说一下 wsl2 的网络问题,我们现在是上生产环境的,服务运行时间大概半年,没遇到过什么问题,可能因为我们服务比较简单。它的网络有什么潜在的坑吗?
    NilChan
        13
    NilChan  
       2021-03-08 12:13:06 +08:00 via Android
    应该 Docker for Windows 更稳一点吧。
    Osk
        14
    Osk  
       2021-03-08 12:31:36 +08:00 via Android
    @LeeReamond hyper-v 中:外面有个 Windows 系统这种说法是不太恰当的,应该是:还有个 Windows 和它一起运行。

    但你司只有 Windows 物理机啊。。。
    aMR
        15
    aMR  
       2021-03-08 13:02:34 +08:00
    Docker for Windows + WSL2 后端不香么
    https://docs.docker.com/docker-for-windows/wsl/
    czwstc
        16
    czwstc  
       2021-03-08 13:07:52 +08:00 via iPhone
    @LeeReamond WSL2 就是基于 hyperv 技术的虚拟化。

    https://docs.microsoft.com/en-us/windows/wsl/wsl2-faq


    我记得外部访问 WSL2 例如 ssh 经常端口自动关了。 不过我个人觉得,生产环境哪有上 WSL 的? 至于 hyperV 跑 linux 和跑一个在 linux 里面的 docker,性能基本忽略不计,看运维的成本就好了。
    成本最大的不是虚拟机性能,而是人去运维的成本。
    locoz
        17
    locoz  
       2021-03-08 13:14:38 +08:00 via Android
    这两个东西貌似都是跑在 hyper-v 上,理论上来讲都差不多。
    also24
        18
    also24  
       2021-03-08 13:16:40 +08:00
    看了各位的回复,更懵逼了,楼主这两个方案和 WSL2 到底有个啥关联啊?
    totoro625
        19
    totoro625  
       2021-03-08 15:24:00 +08:00
    用过 wsl2+docker,觉得很难用,强烈不推荐

    不太清楚 wsl2+docker 的运行原理的可以尝试一下在自己的 Windows 上安装一个体验一下
    你的两种方案拆分来看就是:
    1 、开启 hyper-v 虚拟机,在里面安装 Debian 等系统,再运行 Redis 。(或者安装 docker+Redis )
    2 、开启 wsl2,wsl2 自动开启 hyper-v 虚拟机,再安装 docker-for-windows,docker-for-windows.exe 自动开启两个 hyper-v 虚拟机( 1 、docker ; 2 、docker-data ),此时你可以在 powershell/cmd 运行 Linux/docker 命令,但是由于三个 hyper-v 虚拟机都是没有管理 GUI 界面的,你会相当的痛苦,尤其是网络管理这一块,要用 powershell 管理,远不如自己开一个 hyper-v 来的舒服

    综合考虑人力成本,建议直接开一个 hyper-v 来跑熟悉的 Linux 而不是跑一个不熟悉的 wsl2

    单纯追求性能,必须是 wsl2 高,因为可以跑爆宿主机的内存 /CPU/硬盘,相当于直接运行在宿主机,能随意修改宿主机文件;而 hyper-v 的 Linux 是隔了一层保护外壳的

    但是你真的不要考虑维护难度么,想好好用上 wsl2 至少要会两种系统,大家都是当做玩具用的,等你研究透了估计能给微软提 bug
    also24
        20
    also24  
       2021-03-08 23:47:25 +08:00
    @totoro625 #19
    楼主的方案 2,不是说在 hyper-v 里的已有的 Linux 虚拟机里安装 docker 么?怎么关联到 WSL2 的?

    > 该服务是基于 linux 部署的,目前通过 hyperv 虚拟机运行在 windows 系统当中 ......
    > 另一种是在现有的 linux 虚拟机里安装 docker,开一个 redis 容器。
    ch2
        21
    ch2  
       2021-03-10 20:17:11 +08:00
    wsl2 并不适合作为 dedicaded server 使用
    sodulty
        22
    sodulty  
       2021-04-19 18:04:53 +08:00
    @ch2 快速搭环境开发还是可行的,wsl2 + docker desktop,点点鼠标就把该有的服务中间件启好了,网络用默认的桥接映射出端口 很方便
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2690 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:09 · PVG 11:09 · LAX 19:09 · JFK 22:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.