如何使用docker来运行多个开源Web应用程序?

通常,建议每个docker容器运行一个进程.如果您尝试运行需要不同类型工具的单个Web应用程序,这是有意义的.

例如,开源Web应用程序kanboard使用

> mysql
>阿帕奇
> php5
> memcache

现在,如果那是我将要运行的唯一Web应用程序,那么在每个容器中使用一个进程的docker将每个工具运行在一个单独的容器中是有意义的.

但是说,我只想运行多个Web应用程序,而不是只运行一个Web应用程序,

> kanboard
>醚垫
> plex
> owncloud
> dockuwiki
>话语

现在我如何使用docker隔离这些Web应用程序?我问的原因是因为上面提到的每个应用程序可能都有自己的,

>后端数据存储(mysql,postgres,sqlite)
>缓存存储(memcache,redis)
>并发任务管理(芹菜,队列,RQ,SHARQ)
> Web服务器(nginx,apache)
>搜索服务器(lucene,sphinx,opensearchserver)

有两种方法可以使用docker来运行这些Web应用程序.我知道的两种方式,

>在单个容器中运行每个应用程序及其所有依赖项.一个用于kanboard,一个用于以太网,等等.
>坚持每个容器一个进程的docker格言,并为mysql,postgres,sqlite,memcache等创建一个,并为每个应用程序代码本身创建一个,并使用docker链接将相关容器链接在一起.这更麻烦.需要更多的组织和管理.

我的问题是,还有其他办法吗?如果我不选择上述哪个选项以及为什么?

或者我可能使用错误的工具(docker container)来完成这项工作?也许还有另一种方法在不使用docker容器的情况下完成应用程序隔离?

最佳答案
您可以为每个容器运行多个进程.
您只需使用能够管理生命周期结束的所有流程的基础映像(请参阅“PID 1 zombie reaping issue”).使用知道如何操作的基本映像:phusion/baseimage-docker

然后,每个webapp将有一个容器(包含其所有依赖进程)

检查你是否可以在他们自己的容器中放入一些这些进程.

通常情况下,NGiNX只能运行一个额外的容器,对所有其他webapps进行反向代理,允许通过相同的URL访问它们(url / discourse将重定向到容器管理话语,url / plex到plex的那个,以及等等)

转载注明原文:如何使用docker来运行多个开源Web应用程序? - 代码日志