【发布时间】:2015-10-26 23:18:56
【问题描述】:
通常建议每个 docker 容器运行一个进程。如果您尝试运行需要不同类型工具的单个 Web 应用程序,这是有道理的。
例如,开源 Web 应用程序kanboard 使用了
- mysql
- 阿帕奇
- php5
- 内存缓存
现在,如果这是我要运行的唯一 Web 应用程序,那么在单独的容器中运行每个工具以利用 docker 每个容器一个进程是有意义的。
但是说,我不想只运行一个 Web 应用程序,而是想运行多个 Web 应用程序,
- 看板
- 以太垫
- 丛
- 拥有云
- dokuwiki
- 话语
现在我如何使用 docker 来隔离这些 Web 应用程序?我问的原因是因为上面提到的每个应用程序可能都有自己的,
- 后端数据存储(mysql、postgres、sqlite)
- 缓存存储(memcache、redis)
- 并发任务管理(celery、队列、RQ、SHARQ)
- 网络服务器(nginx、apache)
- 搜索服务器(lucene、sphinx、opensearchserver)
有两种方法可以使用 docker 来运行这些 Web 应用程序。我知道的两种方式,
- 在单个容器中运行每个应用程序及其所有依赖项。一个用于kanboard,一个用于etherpad,依此类推。
- 遵守
one process per container的dockers dictum,为mysql、postgres、sqlite、memcache等创建一个,为每个应用程序代码本身创建一个,并使用docker linking将相关容器链接在一起。这更乱。需要更多的组织和管理。
我的问题是是否有其他方法?如果没有我应该选择以上哪个选项,为什么?
或者我是否使用了错误的工具(docker 容器)来完成这项工作?或许还有另一种不使用 docker 容器来实现应用程序隔离的方法?
【问题讨论】:
标签: docker