关于 Docker 的正确使用姿势

2016-02-29 00:06:26 +08:00
 dingyaguang117

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

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

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

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

还有一个就是能快速把自己当前环境共享给他人。
lightening
2016-02-29 09:36:50 +08:00
这些问题全都是 case by case 的。先问下楼主你想解决什么问题?然后我们再来讨论 docker 能否解决你的问题,你适合用怎么样的 setup 。
wtbhk
2016-02-29 10:03:14 +08:00
把环境管理交给 Docker ,代码管理交给 Git ,两部分开。在 Docker 用挂载目录的形式挂载具体的代码。注意解决一下项目初始化脚本。
lightening
2016-02-29 18:26:39 +08:00
楼主贴出的这个项目好像没有用到 compose 。 Link 和 compose 一起用才方便。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/259745

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX