各位开发还在本机搭环境还是用 docker? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
chengdonghui
V2EX    程序员

各位开发还在本机搭环境还是用 docker?

  chengdonghui 2021-05-06 17:19:27 +08:00 13594 次点击
这是一个创建于 1624 天前的主题,其中的信息可能已经有所发展或是发生改变。

原来搞 python 、java 、ruby 的时候,都在本机搭开发环境,后来有了 docker,直接把开发环境建到 docker 中,然后把源码映射到容器中去,这样各个开发环境都是隔离的,而且也提高了部署效率。

78 条回复    2021-06-18 06:58:42 +08:00
varzy
    1
varzy  
   2021-05-06 17:30:59 +08:00 via iPhone
前端开发,不可能保证所有环境都 docker 解决,现在又回到 brew install 了事
defunct9
    2
defunct9  
   2021-05-06 17:36:58 +08:00
k8s
letitbesqzr
    3
letitbesqzr  
   2021-05-06 17:37:06 +08:00   5
以前折腾过,后来发现还是太麻烦了....

我感觉 单机或者特小规模的部署环境,docker 只会带来更大的工作量...
zzzmh
    4
zzzmh  
   2021-05-06 17:45:22 +08:00   2
java 开发环境里除了 java tomcat 以外的都放 docker 比如 redis mysql mongo 之类的
放 docker 不要太方便(主力开发都在 linux,如果是 windows 就需要 virtualbox 跑 docker 略微麻烦一丢丢)
算了下内存也要比物理机直接装节约了(原理不懂 可能是限制可用内存后程序能自己调整?或者不够以后用了 swap ?)
而且切换版本也可以分分钟搞定,也可以多版本共存。。。
chengdonghui
    5
chengdonghui  
OP
   2021-05-06 18:06:46 +08:00
@varzy 前端开发,不管 vue 还是 react,方式一样啊,docker+docker-compose,如果网速够快,搭建个开发环境,10 分钟搞定
varzy
    6
varzy  
   2021-05-06 18:07:31 +08:00
@chengdonghui #5 主要是小程序啦,flutter 啦,这一大堆。node 相关的倒还好~
akagishigeru
    7
akagishigeru  
   2021-05-06 18:15:30 +08:00
本地开发吧 挺方便的
brader
    8
brader  
   2021-05-06 18:18:05 +08:00   1
来啦来啦,又要推荐我的 https://github.com/wenshunbiao/docker
chengdonghui
    9
chengdonghui  
OP
   2021-05-06 18:24:26 +08:00
@brader star 了
everyx
    10
everyx  
   2021-05-06 19:41:23 +08:00
前端,vscode + docker,方便
zjsxwc
    11
zjsxwc  
   2021-05-06 19:50:56 +08:00 via Android
我是在 vagrant 里套 docker,换电脑贼方便,就是一个 box 到处复制。

捂脸
billlee
    12
billlee  
   2021-05-06 20:24:39 +08:00
主力 Java, 不用 docker, 反正不会污染系统环境

python 会用 docker
walpurgis
    13
walpurgis  
   2021-05-06 20:34:56 +08:00 via Android
后端本地起数据库必上 docker,否则端口和目录烦死,开发环境还是虚拟机直接点
xuanbg
    14
xuanbg  
   2021-05-06 20:40:54 +08:00
有一套内网的开发环境,里面跑着所有服务的 docker 容器,基本上和生产环境也没什么两样。然后,如果我在迭代 A 服务,到自测的时候,把这个环境里面的 A 容器停掉,由我本地的服务替代它。同事如果在迭代 B 服务,自测的时候同样停掉环境里面的 B 容器。自测完成,正常发布到测试环境提测。测试完成再同时发布到开发环境和生产环境。
knightdf
    15
knightdf  
   2021-05-06 20:43:11 +08:00
从不用 docker,本地开发还用这个感觉很鸡肋
kevtyle
    16
kevtyle  
   2021-05-07 00:40:26 +08:00 via Android
@chengdonghui 之前试过在里面部署 vue 环境,但是热更新太慢了就没用了,我这样是错误用法?
coolcoffee
    17
coolcoffee  
   2021-05-07 00:46:21 +08:00
docker 有环境隔离,可以反复试验各种特性以及回滚。 所以建议用 docker 搭建环境练手,练完再扔。

Mac 上的 Docker 本质上还是虚拟机,经常内存暴涨。反正我已经习惯了直接 brew 装环境开发,需要编排 Dockerfile 的时候就通过 VS Code Remote 连接调试。
ClericPy
    18
ClericPy  
   2021-05-07 01:02:42 +08:00
docker 有时候各种限制挺别扭的, 偶尔用到 Ubuntu 的 multipass

至于开发环境, vscode / chrome 带同步, 项目依赖一句 make dev install 直接本地创建 venv 了, Python 版本用 pyenv install, 没感觉啥大问题... 至于部署, 统一 Jenkins 打包机上跑, 再也不本地打包了, 太挫了...
GG668v26Fd55CP5W
    19
GG668v26Fd55CP5W  
   2021-05-07 01:39:47 +08:00 via iPhone
本地开发没必要上 docker,Linux 还好,Mac 上体验极差
Weixiao0725
    20
Weixiao0725  
   2021-05-07 01:48:15 +08:00
@zzzmh database 不是应该放在一个公用的测试服务器上吗?
ericls
    21
ericls  
   2021-05-07 02:13:20 +08:00 via iPhone
Linux 上用 就是把不同的服务当成 binary 就行了

别的平台 overhead 巨大
gBurnX
    22
gBurnX  
   2021-05-07 03:31:48 +08:00   4
有条件,一定要上虚拟化平台进行开发。好处如下:

1.如果只在一台物理机里开发,各种东西,比如 java 、C++、python 都要安装,而且有些软件比如 java 还要安装几个版本。混乱的环境,给开发会带来很多问题,处理起来,又好气又好笑,简直浪费时间。

虚拟化环境就没这个问题,先建立一个干净的模板,然后直接复制粘贴一堆出来,每个克隆后的环境,只安装一个系统。这样干净的系统,基本上不会出问题。


2.如果只在一台物理机里开发,你还要安装 QQ 与微信等一堆软件。这些东西就是祸源。如果长期不关机,这些软件经常搞坏 explorer.exe ,会出各种奇怪问题,比如桌面上,鼠标右键菜单没办法弹出来,有时候远程桌面又无法复制粘贴,等等。

出现了这种问题,系统得重启,但我已经打开了一大堆浏览器,里面很多资料还没看完;以及当前一堆软件开着一堆源码,在重启后,还要按顺序打开,特别浪费时间。

自从我把微信与 QQ,专门放到一台 IM 的虚拟化环境中去之后,再也没出过这种问题。微信与 QQ 想捣乱,直接重启那个虚拟化环境就行了,不影响开发。我甚至把开发、网页浏览、IM 、数据库软件等等,每一种工作,专门部署在一个虚拟化环境里,互相不影响。甚至连 Java 开发,也是部署了 3 个环境,一个给 8,一个 11,一个最新版。
a719031256
    23
a719031256  
   2021-05-07 08:38:46 +08:00
看你开发做什么
用于工作:本地环境
用于折腾:docker
garlics
    24
garlics  
   2021-05-07 08:52:49 +08:00
windows 下 docker io 有点慢,一直没找到方法解决这个问题。
darknoll
    25
darknoll  
   2021-05-07 09:01:13 +08:00
docker 太麻烦了,不太想用
chengdonghui
    26
chengdonghui  
OP
   2021-05-07 09:03:56 +08:00
@gBurnX 同意,docker 开发,在环境配置,依赖安装方面提高了很多效率,同时也避免因为环境的问题导致的 bug
chengdonghui
    27
chengdonghui  
OP
   2021-05-07 09:05:55 +08:00
@kevtyle 热更新慢,有可能是 docker 中 volume 的问题,volume 到本地源代码目录的映射,好像读写效率很低,不过也有解决办法
MeteorCat
    28
MeteorCat  
   2021-05-07 09:06:51 +08:00 via Android
虚拟机专门弄个开发环境就行了
learningman
    29
learningman  
   2021-05-07 09:08:03 +08:00 via Android
yarn 啊,node 啊之类的装在物理机上,数据库放在 docker 里
rf99wSiT6IxH1Z23
    30
rf99wSiT6IxH1Z23  
   2021-05-07 09:10:19 +08:00
数据库都放 docker 里面吧
bthulu
    31
bthulu  
   2021-05-07 09:15:02 +08:00
@gBurnX 这么多虚拟机, 不累吗你. 直接宿主机里装好, 简单省事性能好运行快. QQ 微信这一堆软件, 我还真没见过搞坏过 explorer.exe 的
chengdonghui
    32
chengdonghui  
OP
   2021-05-07 09:25:06 +08:00
docker 做开发环境还有一个好处,团队复制开发环境非常简单,docker + docker-compose,代码用 git clone 下来,docker-compose build,环境就好了
abcbuzhiming
    33
abcbuzhiming  
   2021-05-07 09:26:06 +08:00
@gBurnX 想知道你的“有条件”,是指的什么条件,虚拟化对硬件性能要求不低的
MengiNo
    34
MengiNo  
   2021-05-07 09:35:16 +08:00
全程 docker + vsc remote 非常方便,回老家也不一定背电脑回去,直接按量付费开一台分分钟就回来了
lozzow
    35
lozzow  
   2021-05-07 09:37:32 +08:00
没觉得装一堆东西很难受吗,用 docker 用完直接删除就 ok 了,清爽
Chingim
    36
Chingim  
   2021-05-07 09:46:31 +08:00
@gBurnX "截图发送给同事"这种需求, 虚拟机里的微信能满足吗?
yiqiao
    37
yiqiao  
   2021-05-07 09:58:37 +08:00
虚拟机搭建环境开发
konakona
    38
konakona  
   2021-05-07 10:09:27 +08:00
其实本地开发不适合、也不建议用 docker,除非是对立端的部署,比如你是前端,后端程序你不需要改但是要部署在本地方便你联调的。
arischow
    39
arischow  
   2021-05-07 10:13:58 +08:00 via iPhone
想问问前端理想中的开发环境是什么样?我想总会有用到后端环境的需求?
wangxiaoaer
    40
wangxiaoaer  
   2021-05-07 10:50:37 +08:00
@gBurnX #22 虚拟化平台指的是什么?虚拟机吗?
iSecret
    41
iSecret  
   2021-05-07 10:51:22 +08:00
@zjsxwc 我之前也是这种方案,后来直接用 vagrant 了,项目比较大文件很多,同步文件受 io 影响很大。
mingl0280
    42
mingl0280  
   2021-05-07 11:06:03 +08:00
C++硬件开发,虚拟机都用不了还 docker……
zjsxwc
    43
zjsxwc  
   2021-05-07 11:07:13 +08:00
@iSecret

宿主机 Linux 或 macOS 用 nfs 作为 synced_folder 类型,读写瞬开,特别快,默认的 vbox 共享文件 确实慢

https://www.vagrantup.com/docs/synced-folders/nfs
ColinLi
    44
ColinLi  
   2021-05-07 11:07:29 +08:00
本地开发为啥要用 docker ?用 docker 不是更麻烦吗,数据库搭建一个公共的开发数据库大家都能用,写代码的时候启动一个 idea 不就 ok 了
ColinLi
    45
ColinLi  
   2021-05-07 11:10:43 +08:00
@ColinLi 如果有其他相关的微服务,在开发环境都部署一套就完事了,开发的时候都可以直连
xingheng
    46
xingheng  
   2021-05-07 11:33:54 +08:00
@zjsxwc #43
@iSecret #41
vagrant 空跑的时候 cpu 占用率怎么样
zjsxwc
    47
zjsxwc  
   2021-05-07 12:09:52 +08:00
@xingheng
vagrant 本身不占什么资源,主要是 virtualbox 虚拟机占用,
我这 VBoxHeadless 进程空跑也就 2%的样子,
如果使用了开发虚拟机里面的服务,
那么最大占用 cpu 就看你在 virtualbox 里分配了多少资源给开发虚拟机。
chenshun00
    48
chenshun00  
   2021-05-07 12:11:44 +08:00
我是 mac,用 docker 装的一些环境,例如 mysql,redis/mongo,es,kibana,以及 RocketMQ(broker/ns),挺方便的,不过还是体现在开发环境方面. 切换机器只要装一下 docker 就可以了. dockerfile 这种都上传到 dockerhub 了。
ysicing
    49
ysicing  
   2021-05-07 12:51:30 +08:00
定制了 vagrantfile 很方便
服务的话用 docker & k8s
xingguang
    50
xingguang  
   2021-05-07 13:24:01 +08:00
我在 docker 里 npm install 都要一个小时,遂放弃
zhaojames077
    51
zhaojames077  
   2021-05-07 14:08:39 +08:00
开发 Python 项目的时候会用 Docker,主要一些需要基于 C 的依赖(例如 mysqlclient )需要使用 brew 安装到机器上,略有些麻烦
iSecret
    52
iSecret  
   2021-05-07 14:16:48 +08:00
@xingheng 是的,空跑不占什么资源的,需要考虑的挂载导致的 io 瓶颈,我现在项目的文件是直接丢虚拟机里的,不走挂载,当然你需要有定时同步代码的习惯,不然哪天 box 坏了或者无法连接代码不会丢失。
Suomea
    53
Suomea  
   2021-05-07 14:47:54 +08:00
docker 方便的多啊
caixiaomao
    54
caixiaomao  
   2021-05-07 14:58:56 +08:00
redis mysql 等基本都用 docker
BeautifulSoap
    55
BeautifulSoap  
   2021-05-07 15:06:10 +08:00
对于 mysql,ElasticSearch,Redis 这些那肯定得用 docker 跑啊,配合 docker-compose 直接一键就需要的东西全跑起来了,方便得很,这种不同项目要用不同内容的肯定用 docker

至于开发方面,除了 php 、nodejs 我是直接无脑用 docker 外,其他的 go 、python 之类的我觉得还是本地更方便一点,主要还是为了调试。php 本身安装就麻烦得一塌糊涂,安装 php-fpm,安装 nginx,做配置,涉及到的 php 项目多了,是真的吐血,所以直接 docker 是真的节省人生。nodejs 因为不是主力开发,所以直接塞 docker 里,各种版本之类的不用管非常舒心
zxCoder
    56
zxCoder  
   2021-05-07 15:15:23 +08:00
@zjsxwc vagrant 性能如何呢
INTOX8O
    57
INTOX8O  
   2021-05-07 16:15:30 +08:00
Win WSL2+docker 真香
imycc
    58
imycc  
   2021-05-07 16:29:29 +08:00
这题我会。本地一个虚拟机,搞 python web 开发和前端。

简单的开发直接本地部署,用 pyenv 管理多个项目,一个项目一个虚拟环境隔离开。前端本来就是一个项目一份依赖,再加上 nvm 管理多个 nodejs 版本,基本满足需要。
复杂业务就打包成镜像,用 docker-compose 编排一下各个服务的关联。

第三方服务、组件之类的,一律 docker 搞定。没啥特殊需求的直接用官方镜像,有特殊需求的还会自己重打个镜像。(比如数据库配置之类的)

开发的时候直接把代码目录挂进去容器内,调试效率不会比直接部署差。
gBurnX
    59
gBurnX  
   2021-05-07 20:51:22 +08:00
@bthulu 磨刀不误砍柴工,前期准备各种不同的 OS 以及开发环境,做模板,是很累。

问题是,一旦这种东西都做好了,直接起飞。比如临时想要 3 个不同的环境,直接克隆,分分钟的事情。
gBurnX
    60
gBurnX  
   2021-05-07 20:52:14 +08:00
@abcbuzhiming 条件,指的是至少要有一台高配虚拟化物理服务器。虚拟化是对硬件性能要求不低,但作为生产工具,这是值得的。
gBurnX
    61
gBurnX  
   2021-05-07 20:52:48 +08:00
@Chingim 能。截图后直接复制粘贴就行了。
gBurnX
    62
gBurnX  
   2021-05-07 20:54:59 +08:00
@wangxiaoaer 虚拟化平台有很多种,比如 VMware 的 ESXi 或 WorkStation 、Oracle 的 VM VirtualBox 、Windows Hyper-V 、docker 、k8s 等等。只要能达到环境隔离的目的就行了。
gBurnX
    63
gBurnX  
   2021-05-07 20:57:14 +08:00
@bthulu 另外关于 QQ 与微信这些软件,你可以连续开机一个月试试,在电脑里开三个五 QQ,以及至少 2 个微信,看看有没有问题。
freak118
    64
freak118  
   2021-05-07 21:06:20 +08:00
不是吧 前端有什么必要用 docker 啊
qile1
    65
qile1  
   2021-05-07 21:36:53 +08:00 via Android
@garlics 我是 window 安装 oracle 虚拟机,里面安装 win10 和我本地系统配置一样,部署 python 后慢的没法用,服务器分配了八核 cpu 还是慢的不行,后来直接把 fastapi 打包成 exe,复制 5 个批量运行在 window 系统用 nginx 做负载才好了,谁让我们用的业务数据库是 sql server 呢!要不早都换成 docker 玩了
chaleaoch
    66
chaleaoch  
   2021-05-07 21:38:44 +08:00
纯 docker
宿主机系统只装 GUI 客户端 + vscode 剩下都是 docker 解决.

因为宿主机是 windows 没办法.如果给我一台 mac... 另说`
zjsxwc
    67
zjsxwc  
   2021-05-08 08:24:35 +08:00
@zxCoder

性能最大的限制的 io,我上面说了换 nfs 后,体验和本地没多少区别,
限制是宿主机只能是 Linux 或者 macOS,windows 不支持的。
bthulu
    68
bthulu  
   2021-05-08 08:34:20 +08:00
@gBurnX 上班开机, 下班关机, 怎么会出现连续开机一个月的情况
bthulu
    69
bthulu  
   2021-05-08 08:36:37 +08:00
@qile1 微软官方 docker 版 sqlserver, https://hub.docker.com/_/microsoft-mssql-server
findex
    70
findex  
   2021-05-09 00:18:26 +08:00 via iPhone
用 podman 吧,开源比 docker 可靠
junksheng
    71
junksheng  
   2021-06-11 00:00:55 +08:00
请问 jdk 放 docker 后, idea 怎么连接 docker 进行编译哇?
junksheng
    72
junksheng  
   2021-06-11 00:02:11 +08:00
@zzzmh 想知道 jdk 编译环境也放 docker 里面吗
zzzmh
    73
zzzmh  
   2021-06-11 09:38:20 +08:00
@junksheng 开发的机器,我是只用 redis mysql 之类的,线上环境用 nginx tomcat redis mysql 之类的
junksheng
    74
junksheng  
   2021-06-11 12:43:39 +08:00 via Android
@zzzmh 也就是说只是把 Redis,MySQL 这些服务放在 docker 内,在开发的时候连接,但是编译和调试还是要本地环境 jdk 对吗
zzzmh
    75
zzzmh  
   2021-06-11 14:04:31 +08:00
@junksheng 本地环境 jdk 和 tomcat 放 docker 不方便。感觉意义也不大。redis 和 mysql 合适,切换方便
junksheng
    76
junksheng  
   2021-06-12 11:58:45 +08:00
@zzzmh 主要是会用到多个 jdk 版本, 放在一起感觉环境会很乱...
peihuan
    77
peihuan  
   2021-06-18 01:41:23 +08:00   1
@junksheng jenv 了解一下
junksheng
    78
junksheng  
   2021-06-18 06:58:42 +08:00 via Android
@peihuan 有道理,但我已经解决了,谢谢了嗷
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3256 人在线   最高记录 6679       Selec Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 35ms UTC 11:15 PVG 19:15 LAX 04:15 JFK 07:15
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86