部署 Docker 部署的时候,怎么把数据库,服务器和代码分离,不知道现在有没有答案,求解

flowerwrong · 2014年09月20日 · 最后由 oth 回复于 2014年11月02日 · 9306 次阅读

在用 docker 部署的时候,不论是 ruby 还是 php 项目,我都只是实现了数据库在单独的 container,而代码和服务器〈nginx〉在同一个 container,然后--link 数据库。

这样的缺点就是,多少个项目就要启动多少个 nginx 服务器,当然像 node,py 这种自带的里层不用 nginx 之类的,但是也得启动一个小型服务器。 那么问题就来了…… 怎么实现代码和服务器的分离?

比如说我有多个 rails 项目,我应该怎样分配 container 呢?谢谢。

看看这个是不是你想要的效果?https://github.com/jwilder/nginx-proxy

dockerfile 和 sql 放到一个单独 repo 里不可以么?

楼主要想把 nginx 也分离出去那就单独起一个 nginx 的 containner 就可以了呀,把 nginx 的配置文件用 volume 挂载进去。跟应用服务器的通信可以用 link 端口的方式,也可以挂载 sock 文件。

#4 楼 @hemslo 可是代码怎么搞?例如一个 rails project,我放在一个代码container里面,volume共享,然后那个代码container里面得有 ruby 和 rails 环境,那么我的nginx container里面也得 ruby 环境对吧,passenger 要用。可是我得在代码container里面跑一个 thin 之类的服务器对吧,然后 nginx 代理,可是这样每个代码 container 都得有 thin 服务器要跑!! 如果代码container里面不跑服务器,该怎么使用这个 rails 项目呢?

passenger 没用过,我是用 unicorn 的。。。app server container 里跑 unicorn,web server container 里跑 nginx 就可以了,只需要 app server 有 rails 环境

#6 楼 @hemslo 那如果 10 个项目不是要跑是个 unicorn,这个就是我的 point

酱紫啊,unicorn 不是一个萝卜一个坑的吗,两个项目公用 unicorn 不好吧,咋更新。。。

#8 楼 @hemslo 代码都放在一个 container 里面也不靠谱的吧?

是啊,所以 app server 都是分开滴呀

#1 楼 @tsl0922 我看了那个,他是基于 docker-gen 利用 docker 元信息,例如环境变量,再加上模板来生成配置文件,还是用到代理,也就是本身代码 container 里面还是得有一个服务器,例如 ruby 跑 thin,node,python 项目等自带的。好处是不用手写配置文件,然后手动 ssh 到 nginx container 进行 nginx reload。还是很有用的,谢谢。

suse 11 sp2 可以用 docker 吗?有什么类似 docker 哪有的工具能现在 agent?

#13 楼 @tonysh 可以的,所有主流 linux 发行版都支持,后一句没看懂

#14 楼 @flowerwrong suse 11 sp2 可以吗?有案例介绍下吗?我有些 mysql 的服务器上需要用到一些工具,mysql 本身用 cgroup 做了限制,不行把监控的 agent 也加入 cgroup,因为万一以后出现了其他 agent 就太麻烦了。

#15 楼 @tonysh 我对 suse 不熟,但是 64 位 linux 操作系统都支持。官网有 suse 的安装文档,详见 https://docs.docker.com/installation/openSUSE/ 下面一篇翻译是针对 suse 11 sp2 的 http://bbs.chinaunix.net/thread-4142490-1-1.html

#15 楼 @tonysh 抱歉,我搞混了 suse 和 opensuse

#17 楼 @flowerwrong 没有关系 给了很好的帮助

时隔多天,答案任无,继续求解。

docker 是用来做进程级隔离的,目的是方便的操作海量的进程,进而提高整个机房或者数据中心的负载密度。 做代码与服务隔离,需要精细的设计,要权衡这个精细设计成本。

如果管理海量 docker 都是问题,这个成本就比较高了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号