Docker 适合开发吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sunjourney
V2EX    Docker

Docker 适合开发吗?

  •  
  •   sunjourney 2017-01-17 14:18:13 +08:00 8456 次点击
    这是一个创建于 3189 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 Docker 运行开发环境,用 Dockerfile 的 CMD 运行一个 express 进程,修改了项目源码有时候要重启动 express ,不用 docker 的话, ctrl + c 就可以了,用 docker 得 restart 整个 container ,时间比 ctrl + c 慢不少,部署没这个问题,使用 docker 配合开发有什么最佳姿势?另外求个 docker 群

    29 条回复    2018-02-03 12:00:58 +08:00
    doublleft
        1
    doublleft  
       2017-01-17 14:19:21 +08:00
    恭喜你入了 Docker 大坑

    可以开始考虑全套的 CI + 负载均衡 + 集群管理了。
    guyskk
        2
    guyskk  
       2017-01-17 14:46:49 +08:00 via Android
    可以把代码挂载(volume)到容器上,进入容器操作 shell
    guyskk
        3
    guyskk  
       2017-01-17 14:55:56 +08:00 via Android
    分享一篇文章:
    http://www.kkblog.me/notes/使用 Docker 构建高效 Web 开发环境
    yushiro
        4
    yushiro  
       2017-01-17 15:00:49 +08:00
    aerostone
        5
    aerostone  
       2017-01-17 15:11:08 +08:00 via Android
    不错,马克一下
    HypoChen
        6
    HypoChen  
       2017-01-17 15:13:42 +08:00
    一定要慎重
    blanu
        7
    blanu  
       2017-01-17 15:14:33 +08:00 via iPhone
    实话说, docker 是部署友好的,开发的时候相对来说还是用本地环境,或者是用非 cmd 命令然后 exec 进去搞比较好
    sunjourney
        8
    sunjourney  
    OP
       2017-01-17 15:16:45 +08:00
    @doublleft 接触 docker 几个月了,就是之前本机开发完用 docker 部署。现在尝试用 docker 开发,有时候要重新 restart container 感觉比较重。(虽然 container 是个轻概念)

    @guyskk 正是这么做的,代码在容器里,不过 dockerfile 写了 CMD [ "node", "bootstrap" ] 这类东西,“进入容器操作 shell ”的意思是不加 CMD ,直接 docker exec -it 这种方式吧,那么开发和部署的 image 会有些不同呢。不过似乎可惜把部署的 image 构建于开发的 image 之上。
    crysislinux
        9
    crysislinux  
       2017-01-17 15:18:06 +08:00   1
    开发一般是挂载 volume 到容器,用工具监控改动自动重启 express 的。就算本地开发一般也不是手动 Ctrl c 的。
    jarlyyn
        10
    jarlyyn  
       2017-01-17 15:18:18 +08:00
    docker exec -t -i DOCKERNAME bash
    sunjourney
        11
    sunjourney  
    OP
       2017-01-17 15:23:30 +08:00
    @crysislinux “就算本地开发一般也不是手动 Ctrl c 的。” 能具体解释下吗?比如,修改了 listen 的端口,加入了中间件, express 要重新启动,我就是 ctrl + c 再重新运行的,这个还有别的优雅的方式?
    guyskk
        12
    guyskk  
       2017-01-17 15:29:09 +08:00 via Android
    @sunjourney 是的,开发环境我一般只把外部依赖(mysql redis 这些)装到容器里,代码还是在宿主机运行,这样调试更方便,还有些调试使用的库也不适合装到容器里
    lostsquirrelX
        13
    lostsquirrelX  
       2017-01-17 15:48:38 +08:00
    IDE 插件支持才是正解
    otakustay
        14
    otakustay  
       2017-01-17 17:10:23 +08:00
    我一般会有一套开发环境,一套联调环境,开发环境直接启 express 直接 ctrl+c ,但到了联调(或提测前夕)会构建出 docker 来跑一次确保在和线上一致的环境下没有问题。这个阶段理论上不会有大量的问题和错误,所以不会有频繁的 ctrl+c 这种需要

    当然也可以全套 docker ,但需要在里面加进去 watch 文件并自动重启 express 的功能,同时用 volume 映射到源码上,或者提供一个封装了 docker exec 的脚本直接让你快速重启
    spice630
        15
    spice630  
       2017-01-17 17:33:55 +08:00
    我就用 docker 来开发,环境实在太复杂了,要么维护一堆软件安装脚本,要么维护 dockerfile ,我选择后者。
    https://github.com/songtianyi/docker-dev-envs
    欢迎贡献自己的开发环境~~
    mritd
        16
    mritd  
       2017-01-17 17:37:00 +08:00 via iPhone
    欢迎加入 k8s swarm 等着你
    lightening
        17
    lightening  
       2017-01-17 17:37:23 +08:00
    我们实际使用下来觉得并不好用,还是 Vagrant 方便一点。
    ryd994
        18
    ryd994  
       2017-01-17 17:48:59 +08:00 via Android
    快速开发其实不必用 docker
    但是配置开发环境的时候务必要有记录,其实直接写 dockerfile 更好
    debug 差不多了再进 docker 测试
    FlowMEMO
        19
    FlowMEMO  
       2017-01-17 18:23:58 +08:00
    借个楼问下, vagrant 和 docker 那个更适合开发.
    schoolers
        20
    schoolers  
       2017-01-17 19:00:44 +08:00
    @FlowMEMO docker
    wizardoz
        21
    wizardoz  
       2017-01-17 21:05:28 +08:00
    docker 也可以 ctrl+c.
    我调试用的 docker 都是跑一个 ssh ,直接登陆进去操作。
    DarsyCheuk
        22
    DarsyCheuk  
       2017-01-17 21:17:53 +08:00 via iPhone
    正确使用 docker 对于开发来说效率还是提高的~
    neutrino
        23
    neutrino  
       2017-01-17 22:24:06 +08:00
    @schoolers 解决了 npm 在 windows 下--no-bin-links 和 path too long 的问题吗?
    qwer1234asdf
        24
    qwer1234asdf  
       2017-01-17 22:33:24 +08:00
    想把 Vagrant 当集群用,就是唧唧不给力
    Reficul
        25
    Reficul  
       2017-01-17 22:55:13 +08:00 via Android
    Python 可以给进程发送 HUP 信号重新加载, node 不知道有没有类似的,可以参考下
    yimity
        26
    yimity  
       2017-01-18 08:33:58 +08:00
    Windows 下 用 docker -v 挂载宿主机目录,然后编辑宿主机的文件之后, docker 里面的程序不能 watch 到文件更改,从而程序不能自动重启,应该如何解决?
    其实就是 ionic 2 的项目。都是最新版的环境。
    scalaview
        27
    scalaview  
       2017-01-18 10:43:38 +08:00
    使用感觉良好
    mb4555
        28
    mb4555  
       2018-01-26 20:51:33 +08:00
    不错
    dan381006472
        29
    dan381006472  
       2018-02-03 12:00:58 +08:00
    我现在用的 kfkdock
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2572 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 02:03 PVG 10:03 LAX 19:03 JFK 22:03
    Do have faith in what you're doing.
    ubao 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