我是后端开发一枚,之前一直用 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 异曲同工,使用上有没有什么坑呢?懂的老哥们帮忙解答一下呗,或者赐教一下更好的方案。
1
gzlock 2022-06-06 21:51:13 +08:00 1
先用,遇到问题再解决问题
wsl2 + docker 与服务器的 ubuntu+docker 没啥区别 |
2
mitu9527 OP @gzlock 额,我在 V2EX 里逛了好久,看到不少人反馈 Docker For Windows 不好用,觉得在这上面踩一边坑确实不值得,时间宝贵啊。
|
3
cheng6563 2022-06-06 21:58:28 +08:00 1
坑都是 hyper-v 的,反正我是用回虚拟机了,vmware 只快照不关机还是凑合能用的。
开发环境上 docker 是嫌编译不够慢吗 |
4
thedrwu 2022-06-06 22:01:10 +08:00 via Android
wsl2 自带的 dockerd 就挺好用, 如果是最新的 wsl Ubuntu22.04 需要换成 legacy 的 iptables 。
|
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 打命令.... |
7
zx900930 2022-06-06 22:21:56 +08:00
打错字了, 是 recreate 有问题的容器
|
8
mitu9527 OP @zx900930 docker 还没入门,看不太懂。就是调研了一番之后,感觉问题太多,才跑过来提问有没有更好的方案,我个人不太想把时间花在折腾这种问题上。
|
9
zx900930 2022-06-06 22:27:56 +08:00 3
个人建议, 宿主机 4c8t 或以上, RAM 在 32G 或以上的无脑虚拟机.
比 WSL2 少无数的坑 比如 固定 ip 的问题 网络 bridge 的问题 容器与宿主机应用互通的问题 mount 的问题 你要轻量使用或者是搞开发, 偶尔开着用用, 可以 WSL2 |
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 就行了 |
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 还是不错的. |
13
mitu9527 OP @BeautifulSoap 叫我回头研究研究。我之前看到了一种方案,虚拟机配置两个网卡,一个固定 ip ,一个 host-only ,然后 vscode remote 到虚拟机做开发。
|
14
Buges 2022-06-06 23:50:13 +08:00 via Android 1
直接手动开虚拟机装 docker 就行了,不需要 vagrant 。当然最好还是直接 host 系统用 Linux 。
|
15
mitu9527 OP @Buges 个人觉得用 Vagrant 做一些 linux 初始准备工作还是有点用的,也可以快速的把 linux 虚拟机分发给别人,不过用处确实没有之前那么大了。
|
16
killva4624 2022-06-07 10:17:08 +08:00 1
vmware linux docker ,或者 vscode + remote docker daemon 吧,省掉未知的折腾。
|
17
mitu9527 OP @killva4624 嗯,准备用虚拟机中装 docker 。
|
18
leaves98 2022-06-07 13:32:28 +08:00
小白请问一下,可以不安装 docker desktop ,直接在 wsl2 里安装 docker engine 吗?两种方式有什么区别呢?
|
20
zx900930 2022-06-07 16:16:04 +08:00
@Buges 我也是这么觉得, host linux, windows 应用可以 wine 也可以虚拟机, 不过除了 exchange server 之类的重依赖 windows 的应用, 其它的大概都能找到 linux 下的平替
|
21
ly879 2023-05-16 21:50:38 +08:00
@BeautifulSoap 请问方案三,wsl2 全家桶+wslg 目前用着还好吗?谢谢!
|
22
BeautifulSoap 2023-05-17 12:01:16 +08:00 via Android
@ly879 我一年前 win11 下用的 wsl2+wslg ,除了 IDEA 偶尔弹出窗口的坐标有问题之外没问题。因为我从 win10 开始就是用的 wsl2+xserver 所以后来 win11 就换到 wsl2+xserver 了
|
23
Derrick92 2023-06-11 10:09:21 +08:00
@BeautifulSoap 谢谢您呀,还想问问比如翻墙软件 [为了在 wsl2 里面 clone 外网] 也是安装在 wsl2 上嘛,然后想问问您推荐 wsl2 的那个 Linux 发行版本呢?
|
24
Derrick92 2023-06-11 10:09:45 +08:00
@BeautifulSoap 然后日常 win11 也会关闭自动更新是嘛?
|
25
Derrick92 2023-06-11 10:13:37 +08:00
@BeautifulSoap win11 推荐使用 wsl2+ MobaXterm 是嘛?
|
26
Derrick92 2023-06-11 10:16:38 +08:00
@BeautifulSoap 还想问问老哥有没有 wsl2 的学习使用视频之类的,或者说 github 的配置方案借鉴一下~
|
27
Derrick92 2023-06-11 10:24:26 +08:00
@BeautifulSoap 还有感觉既然使用的是 wsl2+MobaXterm 的形式,那好像没必要升级到 win11 ? hh 主要是感觉 win10 用的蛮好的
|