Windows 下使用 Docker 的一个疑问,懂的老哥们帮忙解答一下。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mitu9527
V2EX    Docker

Windows 下使用 Docker 的一个疑问,懂的老哥们帮忙解答一下。

  •  1
     
  •   mitu9527 2022-06-06 21:46:29 +08:00 3083 次点击
    这是一个创建于 1224 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我是后端开发一枚,之前一直用 Windows + Vagrant + Linux 虚拟机(VirtualBox) 搭配开发环境,一直用的挺好也挺爽;但这种方案有一个问题,就是开发环境(无 Docker )、测试环境( Docker )和生产环境( Docker )不是一致的,代码即使在组内所有开发人员的开发环境中都能正常工作,到了测试环境和生产环境仍可能出问题(我自己就遇到过一两次这种情况),所以开发环境也打算上 Docker 。

    不过,前两天做了一些调研,据说 Docker For Windows 比较坑,不论是用 WSL2 backend 还是 Hyper-V backend (两种 backend 好像都是通过在 Hyper-V 虚拟机中跑的 docker ),那替代方案是什么?是 Windows + Vagrant + Linux 虚拟机(VirtualBox) + Docker 么?这个方案原理上好像和 docker-machine 异曲同工,使用上有没有什么坑呢?懂的老哥们帮忙解答一下呗,或者赐教一下更好的方案。

    27 条回复    2023-06-11 10:24:26 +08:00
    gzlock
        1
    gzlock  
       2022-06-06 21:51:13 +08:00   1
    先用,遇到问题再解决问题
    wsl2 + docker 与服务器的 ubuntu+docker 没啥区别
    mitu9527
        2
    mitu9527  
    OP
       2022-06-06 21:55:48 +08:00
    @gzlock 额,我在 V2EX 里逛了好久,看到不少人反馈 Docker For Windows 不好用,觉得在这上面踩一边坑确实不值得,时间宝贵啊。
    cheng6563
        3
    cheng6563  
       2022-06-06 21:58:28 +08:00   1
    坑都是 hyper-v 的,反正我是用回虚拟机了,vmware 只快照不关机还是凑合能用的。
    开发环境上 docker 是嫌编译不够慢吗
    thedrwu
        4
    thedrwu  
       2022-06-06 22:01:10 +08:00 via Android
    wsl2 自带的 dockerd 就挺好用, 如果是最新的 wsl Ubuntu22.04 需要换成 legacy 的 iptables 。
    mitu9527
        5
    mitu9527  
    OP
       2022-06-06 22:01:20 +08:00
    @cheng6563 主要还是为了追求一致性,不然就不折腾了。
    zx900930
        6
    zx900930  
       2022-06-06 22:20:37 +08:00   1
    wsl2 + docker 有一个非常恶心的 bug
    https://github.com/docker/for-win/issues/12654
    你通过 socket 进行 bind mount 的 volume, 在 windows 每次重新启动后, 会变成空的

    具体表现为你用 portainer 的 docker compose 创建的容器, 每次 windows 重启后, 都会被初始化, 因为 bind mount 的文件夹是空的. 只能手动 recreate 有问题的文件夹.

    如果你不用 socket, 而是直接用 WSL 的命令行创建容器, 就没有问题, 然而这样创建的容器你用 portainer 是灰色的管理不了的. 你要对容器进行任何操作只能连入 WSL 打命令....
    zx900930
        7
    zx900930  
       2022-06-06 22:21:56 +08:00
    打错字了, 是 recreate 有问题的容器
    mitu9527
        8
    mitu9527  
    OP
       2022-06-06 22:24:29 +08:00
    @zx900930 docker 还没入门,看不太懂。就是调研了一番之后,感觉问题太多,才跑过来提问有没有更好的方案,我个人不太想把时间花在折腾这种问题上。
    zx900930
        9
    zx900930  
       2022-06-06 22:27:56 +08:00   3
    个人建议, 宿主机 4c8t 或以上, RAM 在 32G 或以上的无脑虚拟机.
    比 WSL2 少无数的坑
    比如
    固定 ip 的问题
    网络 bridge 的问题
    容器与宿主机应用互通的问题
    mount 的问题

    你要轻量使用或者是搞开发, 偶尔开着用用, 可以 WSL2
    mitu9527
        10
    mitu9527  
    OP
       2022-06-06 22:41:02 +08:00
    @zx900930 多谢!我的电脑硬件配置比较高,按照你的建议,虚拟机比较适合我。
    BeautifulSoap
        11
    BeautifulSoap  
       2022-06-06 22:47:42 +08:00   1
    wsl2 做主力开发的表示,最坏的选择就是用了 Docker For Windows(wsl2 backend)之后,把代码等文件放 windows 里挂载到 docker 。会导致各种各样奇奇怪怪的问题

    次一点的是把所有文件放 wsl2 里,在 wsl2 中挂载文件到 docker ,然后用 windows 的 IDE 去访问 wsl2 中的文件,虽然这么做 docker 挂载问题不大了,但 wsl2 和 windows 的文件交互性能很差(毕竟通过网络共享的),总体体验一般

    最优的解是,把所有文件放 wsl2 里,然后直接在 wsl2 里装 docker ,最后 IDE 也装到 wsl2 里。这是目前为止体验最好的选择。而且因为所有操作都在 wsl2 中完成,有着纯粹的 linux 环境体验

    至于怎么在 wsl2 里跑 GUI 程序,windows11 直接用 wsl-g 开箱即用,windows10 的话装个 xserver 就行了
    zx900930
        12
    zx900930  
       2022-06-06 23:02:17 +08:00
    @BeautifulSoap 其实搞开发 wsl2 无所谓, 坑比较少
    坑多的是拿来搞生产.
    systemd 不能用, 各种基于 sokcet 的操作都有各种 bug, 不说 portainer 这种 webui, 就连 watchtower 这种, 用 socket 升级个镜像, 然后新的镜像生成的容器就有几率出问题( 你在纯 linux+doker 下绝对不会出现这种问题

    还有涉及到网络管理方面的 wsl2 的问题更是多到吐, 原因就是 wsl2 的网络实现已经是微软都维护不来的屎山了.

    你如果只用 wsl2 来编译调试, 使用一些比较强大的 linux 命令行工具的话, wsl2 还是不错的.
    mitu9527
        13
    mitu9527  
    OP
       2022-06-06 23:07:26 +08:00
    @BeautifulSoap 叫我回头研究研究。我之前看到了一种方案,虚拟机配置两个网卡,一个固定 ip ,一个 host-only ,然后 vscode remote 到虚拟机做开发。
    Buges
        14
    Buges  
       2022-06-06 23:50:13 +08:00 via Android   1
    直接手动开虚拟机装 docker 就行了,不需要 vagrant 。当然最好还是直接 host 系统用 Linux 。
    mitu9527
        15
    mitu9527  
    OP
       2022-06-07 07:37:23 +08:00
    @Buges 个人觉得用 Vagrant 做一些 linux 初始准备工作还是有点用的,也可以快速的把 linux 虚拟机分发给别人,不过用处确实没有之前那么大了。
    killva4624
        16
    killva4624  
       2022-06-07 10:17:08 +08:00   1
    vmware linux docker ,或者 vscode + remote docker daemon 吧,省掉未知的折腾。
    mitu9527
        17
    mitu9527  
    OP
       2022-06-07 11:25:59 +08:00
    @killva4624 嗯,准备用虚拟机中装 docker 。
    leaves98
        18
    leaves98  
       2022-06-07 13:32:28 +08:00
    小白请问一下,可以不安装 docker desktop ,直接在 wsl2 里安装 docker engine 吗?两种方式有什么区别呢?
    mitu9527
        19
    mitu9527  
    OP
       2022-06-07 15:35:50 +08:00
    @leaves98 按照我的了解,原理上它们是一样的。
    zx900930
        20
    zx900930  
       2022-06-07 16:16:04 +08:00
    @Buges 我也是这么觉得, host linux, windows 应用可以 wine 也可以虚拟机, 不过除了 exchange server 之类的重依赖 windows 的应用, 其它的大概都能找到 linux 下的平替
    ly879
        21
    ly879  
       2023-05-16 21:50:38 +08:00
    @BeautifulSoap 请问方案三,wsl2 全家桶+wslg 目前用着还好吗?谢谢!
    BeautifulSoap
        22
    BeautifulSoap  
       2023-05-17 12:01:16 +08:00 via Android
    @ly879 我一年前 win11 下用的 wsl2+wslg ,除了 IDEA 偶尔弹出窗口的坐标有问题之外没问题。因为我从 win10 开始就是用的 wsl2+xserver 所以后来 win11 就换到 wsl2+xserver 了
    Derrick92
        23
    Derrick92  
       2023-06-11 10:09:21 +08:00
    @BeautifulSoap 谢谢您呀,还想问问比如翻墙软件 [为了在 wsl2 里面 clone 外网] 也是安装在 wsl2 上嘛,然后想问问您推荐 wsl2 的那个 Linux 发行版本呢?
    Derrick92
        24
    Derrick92  
       2023-06-11 10:09:45 +08:00
    @BeautifulSoap 然后日常 win11 也会关闭自动更新是嘛?
    Derrick92
        25
    Derrick92  
       2023-06-11 10:13:37 +08:00
    @BeautifulSoap win11 推荐使用 wsl2+ MobaXterm 是嘛?
    Derrick92
        26
    Derrick92  
       2023-06-11 10:16:38 +08:00
    @BeautifulSoap 还想问问老哥有没有 wsl2 的学习使用视频之类的,或者说 github 的配置方案借鉴一下~
    Derrick92
        27
    Derrick92  
       2023-06-11 10:24:26 +08:00
    @BeautifulSoap 还有感觉既然使用的是 wsl2+MobaXterm 的形式,那好像没必要升级到 win11 ? hh 主要是感觉 win10 用的蛮好的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     832 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 21:22 PVG 05:22 LAX 14:22 JFK 17:22
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86