话说用 docker 当环境进行开发咋样?

2020-04-11 00:14:55 +08:00
 Flands

最近在对比 mac 和 win 的优劣势(本帖不讨论),然后看到这个帖子

https://www.v2ex.com/t/660818?p=2

刚好这两天捣鼓 docker,现在感觉用搞个 image 当开发环境也可以啊。
vscode 依旧打开宿主机的项目目录,然后在 container 里跑。
项目成员的环境也能一致,不知道运行效率如何。

14346 次点击
所在节点    程序员
79 条回复
NeinChn
2020-04-12 13:50:39 +08:00
@lululau
蛤蛤蛤,不带你这么黑的
搞 Java 开发的应该大部分都不用 Docker 做开发环境,毕竟 OSX 本地能跑何苦跑在远程开发机 /Docker 上
把 Docker 做开发机最开心的那一批不都是 C++/Python(尤其是依赖了只支持 linux so 的那种)/Go 的么
pangliang
2020-04-12 20:29:31 +08:00
对"开发环境" 怎么定义?
开发的时候写代码的"地方"? 开发的时候运行代码的"地方"?
那确实没必要; 本机就能跑

但是仅仅是代码能运行, 项目就能运行了么?
比如 mysql, kafka, redis 怎么办? 搞台低配服务器?远程连慢了点吧?
公司找一台机器装好大家都用? 貌似可以哦, 不错哦
但是是不是还需要考虑考虑如何满足开发者"离线"或者"在家办公"需求?

维护一个 docker-compose, 利大于弊
NeinChn
2020-04-12 21:14:08 +08:00
@pangliang
稍微规模大一点的公司
如果需要多人协作共同开发,都是有公共的 dev 环境支持的,不需要自己用 docker 装什么基础组件 MySQL/Redis/Kafka
都会用 VPN 连接内网再开发的,公网直连就是作死
docker-compose 几乎没什么用.
唯一需要自己安装的就是自己项目的 debug 运行环境,所以开发环境才可能需要 docker.大规模部署也可以 docker
只是几个人的小项目就不说了,喜欢怎么玩怎么玩...
pangliang
2020-04-12 22:34:00 +08:00
@NeinChn
vpn 连内网的, 恭喜你进入的都是好公司, 不需要居民楼做办公室的创业公司的网络状况
sxfscool
2020-04-13 08:55:07 +08:00
之前有试过,volume 挂载的文件更新慢,就是 docker 里编辑保存了,在宿主机看还是没变化,重启 docker 后才会变,这一点比较烦,自己比较菜也不知道是为什么
God365
2020-04-13 10:36:47 +08:00
@pangliang
vpn 连内网的, 恭喜你进入的都是好公司, 不需要居民楼做办公室的创业公司的网络状况 +1
JingW
2020-04-13 13:42:00 +08:00
docker 里面跑 vscode 的话,UI 怎么出来呢?我记得 X11 出来的速度是非常慢的,尤其是 vscode 这种基于 electron 的东西
julyclyde
2020-04-13 20:24:46 +08:00
把短生命周期的容器,当作长生命周期的虚拟机来用
是一种常见错误
Flands
2020-04-13 23:53:33 +08:00
@RRRSSS 感觉很多环境是通用的,一个容器里可以运行几个项目

@ericgui nodejs 不用,vscode 从目录下找 modules 里的包。其他的语言还没试过,主要是让编辑器能从容器内找环境就行
@cszchen @beginor 在一块固态硬盘上测试结果
root@d37d4560a708:/data/code/fio-master# time dd if=/dev/zero of=/testw.dbf bs=4k count=100000 oflag=direct
100000+0 records in
100000+0 records out
409600000 bytes (410 MB, 391 MiB) copied, 14.6767 s, 27.9 MB/s

root@d37d4560a708:/data/code/fio-master# dd if=/dev/zero of=./largefile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.56453 s, 193 MB/s

root@d37d4560a708:/data/code/fio-master# dd if=./largefile of=/dev/null bs=4k
262144+0 records in
262144+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.0241 s, 214 MB/s


AS SSD 测试,大概数据
连续读写 500/200
4K 25/55


@lhx2008 服务直接搭啊

@locoz @MengiNo @esw @aleung 类似 Golang 这种咋识别包呢?外部的那种,纠结这个问题,用 jetbrains 的软件

@caola @takashiki WSL2 + docker ?为啥不直接用 docker 啊?多一层 wsl 有啥好处嘛?

@xdays 你需要升级配置,9750H 以上吧。。

@JingW vscode 运行在宿主机,代码映射到容器内

@julyclyde 无状态容器解决环境问题,如果环境需要变更则修改 dockerfile
takashiki
2020-04-14 10:20:51 +08:00
@Flands #69 windows 上的 docker 之前是通过虚拟机实现的,现在通过 wsl 基本就是原生,是少了一层
Flands
2020-04-14 11:04:37 +08:00
@takashiki wsl 实现也是 Hyper-V,docker 一样是这个啊,应该差不多吧。
takashiki
2020-04-14 11:28:18 +08:00
@Flands #71 查了下 wsl2 确实是基于 Hyper-V 架构,个人感觉比原本的 docker 好用的点在于:
1. 直接使用 wsl 资源,得益于 wsl 的动态资源申请策略,可以直接使用整台机器的全部资源
2. 直接使用 wsl 文件系统,不用 VHD 以及配置驱动器共享之类的
3. wsl2 目前的使用体验十分接近原生,基于 wsl2 的 docker 使用感觉就和在 linux 系统上基本一致,启动速度比原先基于 Hyper-V 快很多
locoz
2020-04-14 18:34:22 +08:00
@Flands #69
“类似 Golang 这种咋识别包呢?外部的那种,纠结这个问题,用 jetbrains 的软件”
不清楚,我现在没用 Windows 做开发机了,之前 Python 是可以通过设置 Pycharm 远程调试的方式读取到 Docker 中的 Python 解释器的,Goland 应该也可以。
RRRSSS
2020-04-14 18:56:35 +08:00
@Flands 那你可以这么搞,Docker 启动容器只做环境,代码用 volume 映射进去。这样的话,脚本语言还行,编译语言怎么弄,我还不清楚。
beginor
2020-04-14 19:46:12 +08:00
@Flands docker 在 Linux 系统上太大没什么问题, 但是在 Mac 和 Win 上需要依赖虚拟化,CPU 和磁盘性能会打折扣。

尤其是在使用卷映射时,磁盘 IO 是个大问题,dd 连续读写和实际使用不同, 运行 `npm ci` `webpack build --prod` `ng build --prod` 这些大量小文件读写时的性能是远远不如原生平台
leohxj
2020-06-29 23:37:56 +08:00
完了,连环境都搞不定了。
dioxide
2020-07-05 21:07:35 +08:00
@beginor 这是 docker 和 mac 两者在设计上的特点造成的组合使用的硬伤么? 还是说 docker 的的 mac 版本在不断迭代改进,只是目前不稳定?
beginor
2020-07-06 07:03:01 +08:00
这个只能说是设计上的问题。

docker 在 Mac 上是虚拟机,使用 NFS 挂载本地卷,性能肯定不如原生磁盘

如果以后 Mac 上也有原生 docker 的话,我想得有点儿多了, 这也不是不可能
yb2313
122 天前
dev contain 现在挺好用的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/661334

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX