关于 Docker 的正确使用姿势 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dingyaguang117
V2EX    Docker

关于 Docker 的正确使用姿势

  •  
  •   dingyaguang117
    dingyaguang117 2016-02-29 00:06:26 +08:00 4204 次点击
    这是一个创建于 3592 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这几天刚看了 docker ,并没有在实际生产工作中使用,所以想了解下 docker 的 best practice
    1.在开发阶段是否需要使用 docker 环境?
    2.是否需要将代码打包进镜像?
    3.制作镜像的时候是用 dockerfile 多呢,还是快照多呢
    4.对于 127 层这个限制大家怎么看,如果每次都在同一个容器上操作再导出快照,似乎很快就会超过限制,这是不是直接让大家在开发过程中否决定了 3 问题中的后者呢。
    5.关于上线流程,大家一般是怎么打包上线呢?

    第 1 条附言    2016-02-29 01:55:20 +08:00
    9 条回复    2016-02-29 18:26:39 +08:00
    xd547
        1
    xd547  
       2016-02-29 00:15:34 +08:00
    关注下
    lonelygo
        2
    lonelygo  
       2016-02-29 02:06:16 +08:00
    我原来带的一个伙计现在不知道在哪做运维,貌似最近在研究 Docker ,等他能把他们公司现有的系统部署出来后问问 Docker 好玩不。
    fantasticfears
        3
    fantasticfears  
       2016-02-29 02:29:33 +08:00   1
    1.在开发阶段是否需要使用 docker 环境?
    Absolutely no 。开发环境要方便,再说数据库和代码的环境再复杂也需要掌握。开发隔离环境没有意义, Docker 用 Linux Container 把文件系统隔开了( namespace ),徒增了无数共享文件的负担。容器连接还多 networkinterface 呢,环境更加复杂了。
    2.是否需要将代码打包进镜像?
    有好处也有坏处。好处是不用再分发了,坏处是没法更新,也没法执行一些动态的初始任务。这个跟项目太相关了。
    3.制作镜像的时候是用 dockerfile 多呢,还是快照多呢
    不了解快照是什么。 dockerfile 的好处明显, CLI ,怎么 build 都一样,可以自动化。
    4.对于 127 层这个限制大家怎么看,如果每次都在同一个容器上操作再导出快照,似乎很快就会超过限制,这是不是直接让大家在开发过程中否决定了 3 问题中的后者呢。
    dockerfile 里的命令要用 & 串联就是这个道理,减少层数。
    senghoo
        4
    senghoo  
       2016-02-29 08:16:49 +08:00   1
    贴个自己的实践,
    1.在开发阶段是否需要使用 docker 环境?
    yes ,开发阶段就保持和生产环境一致,能避免很多问题。而且依赖很多服务的时候(比如 redis,mysql)用 docker-compose 快速启动环境很方便。
    2.是否需要将代码打包进镜像?
    yes ,使用 docker 镜像保证宿主机无状态,做到一次 build ,到处运行。
    3.制作镜像的时候是用 dockerfile 多呢,还是快照多呢
    接触以来没用过快照, dockerfile 记录了镜像是怎么 build 出来的。保留可复制性。
    5.关于上线流程,大家一般是怎么打包上线呢?
    jeckins 自动化就能 build docker 镜像。
    jamiesun
        5
    jamiesun  
       2016-02-29 09:26:44 +08:00   1
    ToughRADIUS 在发不上完全采用 Docker ,不敢说最好的姿势,但自己较舒适。

    先做一个基本镜像( linux + pypy ):

    https://github.com/talkincode/docker-pypy/blob/master/Dockerfile

    再衍生子镜像( pypy modules ):

    https://github.com/talkincode/tough-pypy/blob/master/Dockerfile

    最后具体的项目(把基本镜像和模块依赖剥离后有助于构建速度):

    https://github.com/talkincode/ToughRADIUS/blob/stable_v2/Dockerfile

    最后用 bash 和 docker-compose 封装工具脚本。

    https://github.com/talkincode/ToughRADIUS/blob/stable_v2/scripts/trshell


    部署过程 1 , 2 , 3 , 4

    $ wget https://raw.githubusercontent.com/talkincode/ToughRADIUS/master/scripts/trshell -O /usr/local/bin/trshell

    $ chmod +x /usr/local/bin/trshell

    $ trshell docker_setup

    $ trshell install

    目前我能直接感受到的好处是:一起配合开发的伙伴,不论是水平高低,不再被不一致的运行环境困扰了,利用 vps 或各家 docker 管理平台可以很轻松的完成部署集成测试。

    为客户部署的时候,如果客户网络环境不错,就直接在线部署,按手册一步步来,随便会点 linux 的就能搞定,如果网络不好,直接导出镜像,然后在服务器载入部署,迁移也很容易,这让我充分感受到了“集装箱”的好处。
    xuhaoyangx
        6
    xuhaoyangx  
       2016-02-29 09:27:07 +08:00   1
    快照不知道是不是直接在容器修改那个算快照。
    开发环境看需求,如果生产环境也用 docker ,开发环境用 docker 能很方便的保持环境一致。

    开发不需要把代码包含,映射进去即可,生产环境看情况而定。

    自己用 docker 情况是, mac 无法加载一些 linux 的 so ,但乙方不能提供源码,只能构建一个 linux 环境加载,开个 vm 太费资源, docker 是一个不错的选择。

    还有一个就是能快速把自己当前环境共享给他人。
    lightening
        7
    lightening  
       2016-02-29 09:36:50 +08:00 via iPhone   1
    这些问题全都是 case by case 的。先问下楼主你想解决什么问题?然后我们再来讨论 docker 能否解决你的问题,你适合用怎么样的 setup 。
    wtbhk
        8
    wtbhk  
       2016-02-29 10:03:14 +08:0   1
    把环境管理交给 Docker ,代码管理交给 Git ,两部分开。在 Docker 用挂载目录的形式挂载具体的代码。注意解决一下项目初始化脚本。
    lightening
        9
    lightening  
       2016-02-29 18:26:39 +08:00
    楼主贴出的这个项目好像没有用到 compose 。 Link 和 compose 一起用才方便。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1004 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 18:33 PVG 02:33 LAX 10:33 JFK 13:33
    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