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

关于 Docker 的正确使用姿势

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

    这几天刚看了 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 ),徒增了无数共享文件的负担。容器连接还多 network interface 呢,环境更加复杂了。
    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:00   ❤️ 1
    把环境管理交给 Docker ,代码管理交给 Git ,两部分开。在 Docker 用挂载目录的形式挂载具体的代码。注意解决一下项目初始化脚本。
    lightening
        9
    lightening  
       2016-02-29 18:26:39 +08:00
    楼主贴出的这个项目好像没有用到 compose 。 Link 和 compose 一起用才方便。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1037 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 23:10 · PVG 07:10 · LAX 15:10 · JFK 18:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.