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

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

  •  1
     
  •   chengdonghui · 41 天前 · 6330 次点击
    这是一个创建于 41 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    76 条回复    2021-06-12 11:58:45 +08:00
    varzy
        1
    varzy   41 天前 via iPhone
    前端开发,不可能保证所有环境都 docker 解决,现在又回到 brew install 了事😂
    defunct9
        2
    defunct9   41 天前
    k8s
    letitbesqzr
        3
    letitbesqzr   41 天前   ❤️ 5
    以前折腾过,后来发现还是太麻烦了....

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

    捂脸
    billlee
        12
    billlee   40 天前
    主力 Java, 不用 docker, 反正不会污染系统环境

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

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

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

    别的平台 overhead 巨大
    gBurnX
        22
    gBurnX   40 天前   ❤️ 3
    有条件,一定要上虚拟化平台进行开发。好处如下:

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

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


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

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

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

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

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

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

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

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

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

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

    因为宿主机是 windows 没办法.如果给我一台 mac... 另说`
    zjsxwc
        67
    zjsxwc   39 天前
    @zxCoder

    性能最大的限制的 io,我上面说了换 nfs 后,体验和本地没多少区别,
    限制是宿主机只能是 Linux 或者 macOS,windows 不支持的。
    bthulu
        68
    bthulu   39 天前
    @gBurnX 上班开机, 下班关机, 怎么会出现连续开机一个月的情况
    bthulu
        69
    bthulu   39 天前
    @qile1 微软官方 docker 版 sqlserver, https://hub.docker.com/_/microsoft-mssql-server
    findex
        70
    findex   38 天前 via iPhone
    用 podman 吧,开源比 docker 可靠
    junksheng
        71
    junksheng   5 天前
    请问 jdk 放 docker 后, idea 怎么连接 docker 进行编译哇?
    junksheng
        72
    junksheng   5 天前
    @zzzmh 想知道 jdk 编译环境也放 docker 里面吗
    zzzmh
        73
    zzzmh   5 天前
    @junksheng 开发的机器,我是只用 redis mysql 之类的,线上环境用 nginx tomcat redis mysql 之类的
    junksheng
        74
    junksheng   5 天前 via Android
    @zzzmh 也就是说只是把 Redis,MySQL 这些服务放在 docker 内,在开发的时候连接,但是编译和调试还是要本地环境 jdk 对吗
    zzzmh
        75
    zzzmh   5 天前
    @junksheng 本地环境 jdk 和 tomcat 放 docker 不方便。感觉意义也不大。redis 和 mysql 合适,切换方便
    junksheng
        76
    junksheng   4 天前
    @zzzmh 主要是会用到多个 jdk 版本, 放在一起感觉环境会很乱...
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2414 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 11:43 · PVG 19:43 · LAX 04:43 · JFK 07:43
    ♥ Do have faith in what you're doing.