V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mitu9527
V2EX  ›  Docker

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

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

    我是后端开发一枚,之前一直用 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+docker 下绝对不会出现这种问题

    还有涉及到网络管理方面的 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  
       317 天前
    @BeautifulSoap 请问方案三,wsl2 全家桶+wslg 目前用着还好吗?谢谢!
    BeautifulSoap
        22
    BeautifulSoap  
       317 天前 via Android
    @ly879 我一年前 win11 下用的 wsl2+wslg ,除了 IDEA 偶尔弹出窗口的坐标有问题之外没问题。因为我从 win10 开始就是用的 wsl2+xserver 所以后来 win11 就换到 wsl2+xserver 了
    Derrick92
        23
    Derrick92  
       292 天前
    @BeautifulSoap 谢谢您呀,还想问问比如翻墙软件 [为了在 wsl2 里面 clone 外网] 也是安装在 wsl2 上嘛,然后想问问您推荐 wsl2 的那个 Linux 发行版本呢?
    Derrick92
        24
    Derrick92  
       292 天前
    @BeautifulSoap 然后日常 win11 也会关闭自动更新是嘛?
    Derrick92
        25
    Derrick92  
       292 天前
    @BeautifulSoap win11 推荐使用 wsl2+ MobaXterm 是嘛?
    Derrick92
        26
    Derrick92  
       292 天前
    @BeautifulSoap 还想问问老哥有没有 wsl2 的学习使用视频之类的,或者说 github 的配置方案借鉴一下~
    Derrick92
        27
    Derrick92  
       292 天前
    @BeautifulSoap 还有感觉既然使用的是 wsl2+MobaXterm 的形式,那好像没必要升级到 win11 ? hh 主要是感觉 win10 用的蛮好的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5386 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 08:37 · PVG 16:37 · LAX 01:37 · JFK 04:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.