V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chengdonghui
V2EX  ›  程序员

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

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

    原来搞 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 相关的倒还好~
    JaguarJack
        7
    JaguarJack  
       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 打包机上跑, 再也不本地打包了, 太挫了...
    falcon05
        19
    falcon05  
       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   ·   实用小工具   ·   3007 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 13:29 · PVG 21:29 · LAX 05:29 · JFK 08:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.