这几天刚看了 docker ,并没有在实际生产工作中使用,所以想了解下 docker 的 best practice
1.在开发阶段是否需要使用 docker 环境?
2.是否需要将代码打包进镜像?
3.制作镜像的时候是用 dockerfile 多呢,还是快照多呢
4.对于 127 层这个限制大家怎么看,如果每次都在同一个容器上操作再导出快照,似乎很快就会超过限制,这是不是直接让大家在开发过程中否决定了 3 问题中的后者呢。
5.关于上线流程,大家一般是怎么打包上线呢?
1
xd547 2016-02-29 00:15:34 +08:00
关注下
|
2
lonelygo 2016-02-29 02:06:16 +08:00
我原来带的一个伙计现在不知道在哪做运维,貌似最近在研究 Docker ,等他能把他们公司现有的系统部署出来后问问 Docker 好玩不。
|
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 里的命令要用 & 串联就是这个道理,减少层数。 |
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 镜像。 |
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 的就能搞定,如果网络不好,直接导出镜像,然后在服务器载入部署,迁移也很容易,这让我充分感受到了“集装箱”的好处。 |
6
xuhaoyangx 2016-02-29 09:27:07 +08:00 1
快照不知道是不是直接在容器修改那个算快照。
开发环境看需求,如果生产环境也用 docker ,开发环境用 docker 能很方便的保持环境一致。 开发不需要把代码包含,映射进去即可,生产环境看情况而定。 自己用 docker 情况是, mac 无法加载一些 linux 的 so ,但乙方不能提供源码,只能构建一个 linux 环境加载,开个 vm 太费资源, docker 是一个不错的选择。 还有一个就是能快速把自己当前环境共享给他人。 |
7
lightening 2016-02-29 09:36:50 +08:00 via iPhone 1
这些问题全都是 case by case 的。先问下楼主你想解决什么问题?然后我们再来讨论 docker 能否解决你的问题,你适合用怎么样的 setup 。
|
8
wtbhk 2016-02-29 10:03:14 +08:00 1
把环境管理交给 Docker ,代码管理交给 Git ,两部分开。在 Docker 用挂载目录的形式挂载具体的代码。注意解决一下项目初始化脚本。
|
9
lightening 2016-02-29 18:26:39 +08:00
楼主贴出的这个项目好像没有用到 compose 。 Link 和 compose 一起用才方便。
|