最近在对比 mac 和 win 的优劣势(本帖不讨论),然后看到这个帖子
刚好这两天捣鼓 docker,现在感觉用搞个 image 当开发环境也可以啊。
vscode 依旧打开宿主机的项目目录,然后在 container 里跑。
项目成员的环境也能一致,不知道运行效率如何。
1
hoyixi 2020-04-11 00:17:08 +08:00
这话说的,“用手机打打电话也可以啊”,可不是就是打电话的吗
|
2
ostrichb 2020-04-11 00:17:30 +08:00 via Android
毕竟是一个容器,效能总会有折扣。
如果是 Linux 系统的话不会太明显。但是如果要在 Windows 里面运行的话,因为是虚拟机,所以说性能折扣会更大。 |
3
WispZhan 2020-04-11 00:19:59 +08:00
你要是个 Linux,我没话说。 一个 mac 一个 win,2 个 Docker 都是基于虚拟机这有什么好说的呢。
|
5
Flands OP @WispZhan 损失 20%以内的话能接受吧,搞 3700x 级别的 U 的话体验上应该没太大差距。
来源 > https://www.reddit.com/r/docker/comments/7xvlye/docker_for_macwindows_performances_vs_linux/ |
6
lululau 2020-04-11 00:32:44 +08:00
说实话,真的搞不懂做 Java 开发的或者用其他语言做 Web 开发的为什么那么多钟情于把开发环境放在容器里。。。。。。
|
8
littlewing 2020-04-11 00:37:27 +08:00
win 和 mac 的 docker 都是开个虚拟机然后装上 linux,在 linux 上跑 docker
|
9
jhdxr 2020-04-11 00:38:05 +08:00
@lululau 看场景。举个例子,某些项目无法确定用户的环境到底怎样的,那么 docker 在中间做这么一层,可以规避掉不少坑。
|
10
nvkou 2020-04-11 00:47:17 +08:00 via Android 2
性能不用考虑。你是开发,不是测试。
脚本型语言比较适用,如 lamp 一把梭。Python 编译型语言就算了吧。 |
11
RRRSSS 2020-04-11 04:54:52 +08:00
可以,docker 当开发环境,那你代码怎么办,用 volume 映射么?不过我寻思至于么,你有这么多项目要用不同环境么?
一般都是开发完了,上线的时候写个 Dockerfile 扔上去。 |
12
ericgui 2020-04-11 07:13:39 +08:00
nodejs 啊,php 等,还是要本地安装的
但是呢,mysql 啊,redis 等各种其他的,就可以用 docker 了 这是我目前的使用模式 |
13
lizheming 2020-04-11 07:22:00 +08:00 via iPhone
我们就是这么弄得呢,开发依赖打包到镜像,统一所有同学的依赖版本较少项目初始化的时间。
|
14
cszchen 2020-04-11 07:38:28 +08:00 via Android
在 win 和 mac 下,磁盘读写很慢
|
15
cszchen 2020-04-11 07:39:41 +08:00 via Android
补充一下,是在开发环境下,把项目目录映射到容器的情况下运行很慢。
|
16
beginor 2020-04-11 07:47:19 +08:00 via Android
尝试过, 确实会减少配置的时间, 统一配置,统一管理也是挺好的。
但是只限于 Linux,Windows 和 Mac 用 docker 文件系统性能差,npm 和 git 问题挺, 最终放弃。 |
17
lhx2008 2020-04-11 07:51:11 +08:00 via Android
sql redis mongo 消息队列这些“环境”楼主怎么处理呢?
|
18
wangxiaoaer 2020-04-11 08:17:52 +08:00 via Android
@jhdxr 这是部署的问题,只要最终应用容器化就行,不需要开发环境用容器。
|
19
AlphaTr 2020-04-11 08:28:09 +08:00 via iPhone 1
就是这么干的,mysql 、nginx 、redis 等这类环境都是通过 docker 来做的;宿主机保持干净,开发环境重建也比较快
|
20
pomelotea2009 2020-04-11 09:15:17 +08:00 via Android
@AlphaTr 这三样我都是使用 zip 免安装包,还原或者重装系统后,几个指令就可以配好
|
21
locoz 2020-04-11 09:19:18 +08:00 via Android
当然可以啊,我以前 Windows 下开发的时候就是用的 docker 。
先把环境用 docker file 配好,然后直接用 ide 的远程同步(或者直接整个目录映射进去)和调试功能进行开发,体验就是和 linux 上差不多。 然后如果公司有测试环境之类的东西也是 docker 的话,直接改改 docker file 扔过去就能跑了,很方便。 |
22
locoz 2020-04-11 09:20:29 +08:00 via Android
运行效率其实还好,没啥明显的感觉,就是内存吃得多。
|
23
MengiNo 2020-04-11 09:21:23 +08:00 via iPhone
好奇怪 看到有几层楼说 本地使用自己环境 上线容器化。开发测试都没用过的环境就敢直接上线么... docker 最初不就是一为方便重装换机 多版本,二位不同开发者机器环境及线上线下问题。怎么开发反而都不用,仅仅线上使用,那有啥意义……
|
24
anyc007 2020-04-11 09:35:50 +08:00
可以的啊,我先就是这样做的,很方便
|
26
linvaux 2020-04-11 09:48:58 +08:00
个人没这习惯,而且感觉这种做法有点吃力不讨好
|
28
celeron533 2020-04-11 10:03:56 +08:00
如果你的项目有多个历史版本需要维护或者你反复横跳于多个项目组,而且各个项目都有不可调和的互斥依赖关系(如老版本在 java6,新版本在 java9 ),那么可以考虑容器实现。
不然的话还是建议相对固定的本地开发环境比较好 |
29
caola 2020-04-11 10:04:48 +08:00
现在用 WSL2 已经非常的爽了
|
30
xuanbg 2020-04-11 10:09:11 +08:00
用 docker 搞开发环境,真是天才的思路!!!
像我这样愚笨的人,就只会用 docker 部署开发中的项目用来自测…… |
31
jin7 2020-04-11 10:10:44 +08:00
别问 实际体验再说 发现更麻烦自然会放弃 反正我是放弃了
|
32
rockyou12 2020-04-11 10:14:29 +08:00
@MengiNo 光是容器化后能上 k8s 就很有意义了,而且你们没有线上的测试环境嘛……不可能开发完,本地测完就直接部署到生产吧
|
33
xdays 2020-04-11 10:41:04 +08:00
我发现,多数开发在尝试用 docker 来跑开发环境最后都放弃了,因为你除了像以前一样安装开发环境所需要的依赖(构建 image 的时候),还得学会怎么用 docker, docker-compose,而这些东西如果你公司的生产环境没有用或者用了作为开发平常也接触不到生产环境,那用 docker 就是增加了额外的学习成本。所以说,这取决于开发对的 devops 的理解,如果有这种意识的话,那这个学习成本给整个开发部署的过程会带来很大的好处。
回到你说的效率问题,win 我不清楚,docker for mac 依然存在性能问题,尤其是频繁改动文件的时候,系统 cpu 使用率极高,风扇狂转。 |
34
rrfeng 2020-04-11 10:52:34 +08:00 via Android
vs code docker remote 了解一下
|
35
nvkou 2020-04-11 10:59:23 +08:00 via Android
@xdays 不是啊。一个人搞懂了就好了啊。docker file 一分发就行了。或者导出为文件,工友导入就是了。规则是自己定义的。而且构建 image 是容器里面的依赖,和宿主机无关。
|
36
ljpCN 2020-04-11 11:06:20 +08:00 via Android
大家都在说用 docker 做开发环境的合理性。我问个另外的问题:你打开宿主机的项目文件夹,那 vscode 识别到的是宿主机的开发环境,那代码提示什么的怎么办?(比如这是一个 Python 但你宿主机没装 Python 或者版本不一样)
|
38
fuis 2020-04-11 11:57:14 +08:00
关于容器的运行效率,docker 当然是要在 Linux 下面跑。在 macOS 和 Windows 的 docker 都是虚拟机,有什么意义了。
|
39
MengiNo 2020-04-11 12:03:31 +08:00
@rockyou12 我个人是 docker 跑全程的,本地开发一个项目就是 用 vscode remote container 做一个镜像 然后在容器内部开发测试,提交后 ci/cd 也是用 drone 跑完最后做成一个镜像提交到 image repo 。 我感觉这样才是完整保证环境一致 即纵向每个步骤环境一致 横向每个开发人员环境一致。 不过的确现实情况下没有一个同事愿意搞这么一套 都是提交 dev 后把任务丢给测试 23333 。。。 只是我个人觉得 ci/cd 只能帮你发现测试用例的逻辑问题, 至于这个镜像怎么样 好像并没有什么好的方式,不过容器都是基于标准 base 制作的不太会出问题,可能是我多虑了。
|
40
esw 2020-04-11 13:30:56 +08:00
我经常这样搞,因为平常做网络相关开发,经常需要搭建一些特定 topo 的模拟环境,不过环境一般放在服务器上,代码在本地写,然后用 fswatch + rsync 自动同步到服务器上,这样下来本地和服务器都不会因为文件 io 造成性能损失,体验非常好
|
41
yuikns 2020-04-11 13:47:02 +08:00
@ljpCN 如果单纯说 python 。可以使用容器内部的 python 环境作为 python env 的。这个 python extension 是支持的
|
42
hantsy 2020-04-11 13:49:09 +08:00
一般都是 Devops 准备,做到开发部署环境一致。
代码编辑一般本地环境没有什么太大的问题。运行的时候,有的环境可以跑 Docker 也很方便,开发的依赖环境全部可以跑 Docker,比如 MySQL,Nigix 等。最终项目提供 Dockerfile,也在 CI 上 Build Docker Image, Push 到 Docker registry 。 在生产环境上完全使用 Docker 部署,做到一致性。 |
43
drackzy 2020-04-11 13:52:19 +08:00
linux 下开发, 生产部署有问题才会本地起 docker 看下
|
44
walker2laok 2020-04-11 13:56:28 +08:00
那是相当于的疏忽,用了让人爱不释手!最近正好搭建 ROS 环境,折腾了两天也没成,最后在 hub.docker.com 上翻到了镜像,个把小时搞定环境.
|
45
vicnicLight007 2020-04-11 13:59:37 +08:00 via iPhone
@ericgui 本地 PHP 和动物 mysql 怎么搞一起?我现在是 php 也是容器
|
47
dangyuluo 2020-04-11 16:52:31 +08:00
我们公司的开发环境完全是在 Docker 下的,用一个 wrapper 启动和停止,简直不要太好用!
|
48
wweir 2020-04-11 18:21:51 +08:00
完全可以,不过很多自定义的东西,光靠 dockerfile 很难定制出来,还是虚机才好使
所以我选择每年花点小钱买个云虚机,然后开发环境走到哪里都是一致的 |
49
nekochyan 2020-04-11 18:28:50 +08:00
我们公司服务器好像就是,不过听后端老是抱怨调试 bug 非常麻烦。。。
|
50
takashiki 2020-04-11 19:39:57 +08:00
现在 wsl2 backend 的 docker 确实非常舒服了
|
51
tairan2006 2020-04-11 22:28:31 +08:00
我记得以前不都是用 vagrant 搭建开发环境么。。
|
52
ericgui 2020-04-12 00:12:35 +08:00
@vicnicLight007 你就 run 一个 mysql 的 container,然后就 localhost:3306 连接即可啊
|
53
yeqizhang 2020-04-12 03:00:39 +08:00 via Android
为啥我理解的环境开发,和开发环境不一样呢……
使用某个环境开发,不是就是在这个环境下写代码的意思? 开发环境不是项目开发人员一起部署自测的一个环境吗,类比测试环境…… |
54
imycc 2020-04-12 06:41:54 +08:00
win10+linux (本地虚拟机)+docker (跑在 linux 上)
开发时候用 vim/vscode 写代码,环境配置都在 linux 上,代码挂载到容器里 做 web 前后端开发跟一些简单的运维工作,从 15 年开始都是这么用的。 工作配置的台式机 i7+16G,不做压力测试的话,跑 web 应用完全足够。 好处嘛,就是方便管理环境,之前负责的项目包括六七个小服务,三个人在开发,不用 docker 的话很难统一大家的开发环境,外包 QA 要运行你的环境也很麻烦。 踩过的坑是容器内的软件版本比线上的新,线上的版本是固定的,而容器在构建的时候有时候会重新装包,有一次 php 小版本升了一点,在编码问题上表现不一致,新功能上线之后没有效果,两个人查了半天。。 |
55
imycc 2020-04-12 06:45:18 +08:00
说起来现在本地开发很少自己配置服务了,dockerhub 上找个合适的镜像,略微调一下配置就可以用。
A 项目的 mysql 跟 B 项目的 mysql 分开跑不同容器,开发哪个项目就起哪个,不用担心搞乱。 最多的时候自己经手了四个项目(都是内部平台),一个个配置环境真的要死 |
56
swulling 2020-04-12 09:36:45 +08:00 via iPhone
vscode remote for docker 了解下
|
57
falcon05 2020-04-12 09:51:29 +08:00 via iPhone
这玩意在 win 和 mac 搞开发都很别扭,一方面是性能,甚至比 vagrant 虚拟机还耗资源,另一方面很多操作跟用原生 docker 还不一样,甚至做不来,除非开发环境本身就是用 Linux 。
|
58
sagaxu 2020-04-12 10:04:35 +08:00 via Android
上 docker 不是为了大规模容器编排吗?开发环境上不上都行,如果从干净系统开始,半个小时你都搭不好,你可能需要 docker 。我搭开发环境,取决于下载 IDE 的时间,其它都是 apt install 搞定。
|
59
aleung 2020-04-12 10:05:34 +08:00 via Android
在我们团队里已经用了几年了。以 nodejs 后端开发为主,但其他技术栈同理。见我以前写的 blog: https://aleung.github.io/blog/2017/09/07/docker-dev-env/
|
61
NeinChn 2020-04-12 13:50:39 +08:00
@lululau
蛤蛤蛤,不带你这么黑的 搞 Java 开发的应该大部分都不用 Docker 做开发环境,毕竟 OSX 本地能跑何苦跑在远程开发机 /Docker 上 把 Docker 做开发机最开心的那一批不都是 C++/Python(尤其是依赖了只支持 linux so 的那种)/Go 的么 |
62
pangliang 2020-04-12 20:29:31 +08:00
对"开发环境" 怎么定义?
开发的时候写代码的"地方"? 开发的时候运行代码的"地方"? 那确实没必要; 本机就能跑 但是仅仅是代码能运行, 项目就能运行了么? 比如 mysql, kafka, redis 怎么办? 搞台低配服务器?远程连慢了点吧? 公司找一台机器装好大家都用? 貌似可以哦, 不错哦 但是是不是还需要考虑考虑如何满足开发者"离线"或者"在家办公"需求? 维护一个 docker-compose, 利大于弊 |
63
NeinChn 2020-04-12 21:14:08 +08:00
@pangliang
稍微规模大一点的公司 如果需要多人协作共同开发,都是有公共的 dev 环境支持的,不需要自己用 docker 装什么基础组件 MySQL/Redis/Kafka 都会用 VPN 连接内网再开发的,公网直连就是作死 docker-compose 几乎没什么用. 唯一需要自己安装的就是自己项目的 debug 运行环境,所以开发环境才可能需要 docker.大规模部署也可以 docker 只是几个人的小项目就不说了,喜欢怎么玩怎么玩... |
65
sxfscool 2020-04-13 08:55:07 +08:00
之前有试过,volume 挂载的文件更新慢,就是 docker 里编辑保存了,在宿主机看还是没变化,重启 docker 后才会变,这一点比较烦,自己比较菜也不知道是为什么
|
67
JingW 2020-04-13 13:42:00 +08:00
docker 里面跑 vscode 的话,UI 怎么出来呢?我记得 X11 出来的速度是非常慢的,尤其是 vscode 这种基于 electron 的东西
|
68
julyclyde 2020-04-13 20:24:46 +08:00
把短生命周期的容器,当作长生命周期的虚拟机来用
是一种常见错误 |
69
Flands OP @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 |
70
takashiki 2020-04-14 10:20:51 +08:00
@Flands #69 windows 上的 docker 之前是通过虚拟机实现的,现在通过 wsl 基本就是原生,是少了一层
|
72
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 快很多 |
73
locoz 2020-04-14 18:34:22 +08:00
@Flands #69
“类似 Golang 这种咋识别包呢?外部的那种,纠结这个问题,用 jetbrains 的软件” 不清楚,我现在没用 Windows 做开发机了,之前 Python 是可以通过设置 Pycharm 远程调试的方式读取到 Docker 中的 Python 解释器的,Goland 应该也可以。 |
74
RRRSSS 2020-04-14 18:56:35 +08:00
@Flands 那你可以这么搞,Docker 启动容器只做环境,代码用 volume 映射进去。这样的话,脚本语言还行,编译语言怎么弄,我还不清楚。
|
75
beginor 2020-04-14 19:46:12 +08:00 via Android
@Flands docker 在 Linux 系统上太大没什么问题, 但是在 Mac 和 Win 上需要依赖虚拟化,CPU 和磁盘性能会打折扣。
尤其是在使用卷映射时,磁盘 IO 是个大问题,dd 连续读写和实际使用不同, 运行 `npm ci` `webpack build --prod` `ng build --prod` 这些大量小文件读写时的性能是远远不如原生平台 |
76
leohxj 2020-06-29 23:37:56 +08:00
完了,连环境都搞不定了。
|
77
dioxide 2020-07-05 21:07:35 +08:00
@beginor 这是 docker 和 mac 两者在设计上的特点造成的组合使用的硬伤么? 还是说 docker 的的 mac 版本在不断迭代改进,只是目前不稳定?
|
78
beginor 2020-07-06 07:03:01 +08:00 via Android
这个只能说是设计上的问题。
docker 在 Mac 上是虚拟机,使用 NFS 挂载本地卷,性能肯定不如原生磁盘 如果以后 Mac 上也有原生 docker 的话,我想得有点儿多了, 这也不是不可能 |
79
yb2313 89 天前
dev contain 现在挺好用的
|