mitu9527
V2EX  ›  Docker

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

  •  1
     
  •   mitu9527 · Jun 6, 2022 · 4079 views
    This topic created in 1610 days ago, the information mentioned may be changed or developed.

    我是后端开发一枚,之前一直用 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 replies  •  2023-06-11 10:24:26 +08:00
    gzlock
    gzlock
    Jun 6, 2022❤️1
    1
    先用,遇到问题再解决问题
    wsl2 + docker 与服务器的 ubuntu+docker 没啥区别
    mitu9527
    mitu9527
    OP
    Jun 6, 2022
    2
    @gzlock 额,我在 V2EX 里逛了好久,看到不少人反馈 Docker For Windows 不好用,觉得在这上面踩一边坑确实不值得,时间宝贵啊。
    cheng6563
    cheng6563
    Jun 6, 2022❤️1
    3
    坑都是 hyper-v 的,反正我是用回虚拟机了,vmware 只快照不关机还是凑合能用的。
    开发环境上 docker 是嫌编译不够慢吗
    thedrwu
    thedrwu
    Jun 6, 2022 via Android
    4
    wsl2 自带的 dockerd 就挺好用, 如果是最新的 wsl Ubuntu22.04 需要换成 legacy 的 iptables 。
    mitu9527
    mitu9527
    OP
    Jun 6, 2022
    5
    @cheng6563 主要还是为了追求一致性,不然就不折腾了。
    zx900930
    zx900930
    Jun 6, 2022❤️1
    6
    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
    zx900930
    Jun 6, 2022
    7
    打错字了, 是 recreate 有问题的容器
    mitu9527
    mitu9527
    OP
    Jun 6, 2022
    8
    @zx900930 docker 还没入门,看不太懂。就是调研了一番之后,感觉问题太多,才跑过来提问有没有更好的方案,我个人不太想把时间花在折腾这种问题上。
    zx900930
    zx900930
    Jun 6, 2022❤️3
    9
    个人建议, 宿主机 4c8t 或以上, RAM 在 32G 或以上的无脑虚拟机.
    比 WSL2 少无数的坑
    比如
    固定 ip 的问题
    网络 bridge 的问题
    容器与宿主机应用互通的问题
    mount 的问题

    你要轻量使用或者是搞开发, 偶尔开着用用, 可以 WSL2
    mitu9527
    mitu9527
    OP
    Jun 6, 2022
    10
    @zx900930 多谢!我的电脑硬件配置比较高,按照你的建议,虚拟机比较适合我。
    BeautifulSoap
    BeautifulSoap
    Jun 6, 2022❤️1
    11
    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
    zx900930
    Jun 6, 2022
    12
    @BeautifulSoap 其实搞开发 wsl2 无所谓, 坑比较少
    坑多的是拿来搞生产.
    systemd 不能用, 各种基于 sokcet 的操作都有各种 bug, 不说 portainer 这种 webui, 就连 watchtower 这种, 用 socket 升级个镜像, 然后新的镜像生成的容器就有几率出问题( 你在纯 linux+docker 下绝对不会出现这种问题

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

    你如果只用 wsl2 来编译调试, 使用一些比较强大的 linux 命令行工具的话, wsl2 还是不错的.
    mitu9527
    mitu9527
    OP
    Jun 6, 2022
    13
    @BeautifulSoap 叫我回头研究研究。我之前看到了一种方案,虚拟机配置两个网卡,一个固定 ip ,一个 host-only ,然后 vscode remote 到虚拟机做开发。
    Buges
    Buges
    Jun 6, 2022 via Android❤️1
    14
    直接手动开虚拟机装 docker 就行了,不需要 vagrant 。当然最好还是直接 host 系统用 Linux 。
    mitu9527
    mitu9527
    OP
    Jun 7, 2022
    15
    @Buges 个人觉得用 Vagrant 做一些 linux 初始准备工作还是有点用的,也可以快速的把 linux 虚拟机分发给别人,不过用处确实没有之前那么大了。
    killva4624
    killva4624
    Jun 7, 2022❤️1
    16
    vmware linux docker ,或者 vscode + remote docker daemon 吧,省掉未知的折腾。
    mitu9527
    mitu9527
    OP
    Jun 7, 2022
    17
    @killva4624 嗯,准备用虚拟机中装 docker 。
    leaves98
    leaves98
    Jun 7, 2022
    18
    小白请问一下,可以不安装 docker desktop ,直接在 wsl2 里安装 docker engine 吗?两种方式有什么区别呢?
    mitu9527
    mitu9527
    OP
    Jun 7, 2022
    19
    @leaves98 按照我的了解,原理上它们是一样的。
    zx900930
    zx900930
    Jun 7, 2022
    20
    @Buges 我也是这么觉得, host linux, windows 应用可以 wine 也可以虚拟机, 不过除了 exchange server 之类的重依赖 windows 的应用, 其它的大概都能找到 linux 下的平替
    ly879
    ly879
    May 16, 2023
    21
    @BeautifulSoap 请问方案三,wsl2 全家桶+wslg 目前用着还好吗?谢谢!
    BeautifulSoap
    BeautifulSoap
    May 17, 2023 via Android
    22
    @ly879 我一年前 win11 下用的 wsl2+wslg ,除了 IDEA 偶尔弹出窗口的坐标有问题之外没问题。因为我从 win10 开始就是用的 wsl2+xserver 所以后来 win11 就换到 wsl2+xserver 了
    Derrick92
    Derrick92
    Jun 11, 2023
    23
    @BeautifulSoap 谢谢您呀,还想问问比如翻墙软件 [为了在 wsl2 里面 clone 外网] 也是安装在 wsl2 上嘛,然后想问问您推荐 wsl2 的那个 Linux 发行版本呢?
    Derrick92
    Derrick92
    Jun 11, 2023
    24
    @BeautifulSoap 然后日常 win11 也会关闭自动更新是嘛?
    Derrick92
    Derrick92
    Jun 11, 2023
    25
    @BeautifulSoap win11 推荐使用 wsl2+ MobaXterm 是嘛?
    Derrick92
    Derrick92
    Jun 11, 2023
    26
    @BeautifulSoap 还想问问老哥有没有 wsl2 的学习使用视频之类的,或者说 github 的配置方案借鉴一下~
    Derrick92
    Derrick92
    Jun 11, 2023
    27
    @BeautifulSoap 还有感觉既然使用的是 wsl2+MobaXterm 的形式,那好像没必要升级到 win11 ? hh 主要是感觉 win10 用的蛮好的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2774 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 00:28 · PVG 08:28 · LAX 16:28 · JFK 19:28
    ♥ Do have faith in what you're doing.