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

讨论 未结 13 48
mitu9527
mitu9527 会员 2022年6月6日 13:56 发表
<p>我是后端开发一枚,之前一直用 Windows + Vagrant + Linux 虚拟机(VirtualBox) 搭配开发环境,一直用的挺好也挺爽;但这种方案有一个问题,就是开发环境(无 Docker )、测试环境( Docker )和生产环境( Docker )不是一致的,代码即使在组内所有开发人员的开发环境中都能正常工作,到了测试环境和生产环境仍可能出问题(我自己就遇到过一两次这种情况),所以开发环境也打算上 Docker 。</p> <p>不过,前两天做了一些调研,据说 Docker For Windows 比较坑,不论是用 WSL2 backend 还是 Hyper-V backend (两种 backend 好像都是通过在 Hyper-V 虚拟机中跑的 docker ),那替代方案是什么?是 Windows + Vagrant + Linux 虚拟机(VirtualBox) + Docker 么?这个方案原理上好像和 docker-machine 异曲同工,使用上有没有什么坑呢?懂的老哥们帮忙解答一下呗,或者赐教一下更好的方案。</p>
收藏(0)  分享
相关标签: 灌水交流
注意:本文归作者所有,未经作者允许,不得转载
13个回复
  • gzlock
    2022年6月6日 13:56
    先用,遇到问题再解决问题 wsl2 + docker 与服务器的 ubuntu+docker 没啥区别
    0 0
  • mitu9527
    2022年6月6日 14:26
    额,我在 V2EX 里逛了好久,看到不少人反馈 Docker For Windows 不好用,觉得在这上面踩一边坑确实不值得,时间宝贵啊。
    0 0
  • cheng6563
    2022年6月6日 14:26
    坑都是 hyper-v 的,反正我是用回虚拟机了,vmware 只快照不关机还是凑合能用的。 开发环境上 docker 是嫌编译不够慢吗
    0 0
  • thedrwu
    2022年6月6日 14:26
    wsl2 自带的 dockerd 就挺好用, 如果是最新的 wsl Ubuntu22.04 需要换成 legacy 的 iptables 。
    0 0
  • mitu9527
    2022年6月6日 14:26
    主要还是为了追求一致性,不然就不折腾了。
    0 0
  • zx900930
    2022年6月6日 14:26
    wsl2 + docker 有一个非常恶心的 bug 你通过 socket 进行 bind mount 的 volume, 在 windows 每次重新启动后, 会变成空的 具体表现为你用 portainer 的 docker compose 创建的容器, 每次 windows 重启后, 都会被初始化, 因为 bind mount 的文件夹是空的. 只能手动 recreate 有问题的文件夹. 如果你不用 socket, 而是直接用 WSL 的命令行创建容器, 就没有问题, 然而这样创建的容器你用 portainer 是灰色的管理不了的. 你要对容器进行任何操作只能连入 WSL 打命令....
    0 0
  • zx900930
    2022年6月6日 14:26
    打错字了, 是 recreate 有问题的容器
    0 0
  • mitu9527
    2022年6月6日 14:26
    docker 还没入门,看不太懂。就是调研了一番之后,感觉问题太多,才跑过来提问有没有更好的方案,我个人不太想把时间花在折腾这种问题上。
    0 0
  • zx900930
    2022年6月6日 14:57
    个人建议, 宿主机 4c8t 或以上, RAM 在 32G 或以上的无脑虚拟机. 比 WSL2 少无数的坑 比如 固定 ip 的问题 网络 bridge 的问题 容器与宿主机应用互通的问题 mount 的问题 你要轻量使用或者是搞开发, 偶尔开着用用, 可以 WSL2
    0 0
  • mitu9527
    2022年6月6日 14:57
    多谢!我的电脑硬件配置比较高,按照你的建议,虚拟机比较适合我。
    0 0
  • BeautifulSoap
    2022年6月6日 14:57
    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 就行了
    0 0
  • zx900930
    2022年6月6日 15:29
    其实搞开发 wsl2 无所谓, 坑比较少 坑多的是拿来搞生产. systemd 不能用, 各种基于 sokcet 的操作都有各种 bug, 不说 portainer 这种 webui, 就连 watchtower 这种, 用 socket 升级个镜像, 然后新的镜像生成的容器就有几率出问题( 你在纯 linux+docker 下绝对不会出现这种问题 还有涉及到网络管理方面的 wsl2 的问题更是多到吐, 原因就是 wsl2 的网络实现已经是微软都维护不来的屎山了. 你如果只用 wsl2 来编译调试, 使用一些比较强大的 linux 命令行工具的话, wsl2 还是不错的.
    0 0
  • mitu9527
    2022年6月6日 15:29
    叫我回头研究研究。我之前看到了一种方案,虚拟机配置两个网卡,一个固定 ip ,一个 host-only ,然后 vscode remote 到虚拟机做开发。
    0 0