通常建议每个docker容器运行一个进程。如果您尝试运行需要不同类型工具的单个Web应用程序,这是有道理的。
例如,开源Web应用程序kanboard
使用
现在,如果这是我要运行的唯一Web应用程序,那么在每个容器中运行每个工具以利用docker 每个容器一个进程是有意义的。
但是说,我只想运行多个Web应用程序,而不是只运行一个Web应用程序,
现在我如何使用docker隔离这些Web应用程序?我问的原因是因为上面提到的每个应用程序可能都有自己的,
有两种方法可以使用docker来运行这些Web应用程序。我知道的两种方式,
one process per container
的码头工人的格言,并为mysql,postgres,sqlite,memcache等创建一个,并为每个应用程序代码本身创建一个,并使用docker linking
将相关容器链接在一起。这更麻烦。需要更多的组织和管理。我的问题是,还有其他办法吗?如果我不选择上述哪个选项以及为什么?
或许我使用错误的工具(码头工具箱)来完成工作?也许还有另一种方法可以在不使用docker容器的情况下完成应用程序隔离?
答案 0 :(得分:0)
每个容器可以运行多个进程
您只需使用能够管理生命终结的所有流程的基础映像(请参阅“PID 1 zombie reaping issue”)。使用知道如何执行此操作的基本映像:phusion/baseimage-docker
然后,每个webapp(包含其所有相关进程)将有一个容器
检查你是否可以在他们自己的容器中放入一些这些进程。
通常,NGiNX只能运行一个额外的容器,对所有其他Web应用程序进行反向代理,允许通过相同的URL访问它们(url/discourse
将重定向到容器管理话语,url/plex
到plex的那个,等等)
答案 1 :(得分:0)
原则上,您的第二种方法是首选。像docker compose这样的工具可以帮助您解决链接的混乱问题。
答案 2 :(得分:0)
你说:
这更麻烦。需要更多的组织和管理。
我认为这反过来是完全的。以下是我的优点和缺点:
多进程:
<强>优点强>
<强>缺点强>
CMD
或ENTRYPOINT
运行)正确监控每个进程。如果有任何失败,你最终会得到一个失败的容器我最近完成了同样的任务,由于以下原因,我决定去第二个appraoch:
的优点:
缺点:
我真的推荐第二种方法。使用上述docker-compose
之类的工具,您可以在一个docker-compose.yml
如果你然后使用像https://github.com/jwilder/nginx-proxy这样的工具(我做过,就像魅力一样),即使反向代理也很简单,你可以在一台主机上运行X不同的软件。
通过这种方式,我们为公司设置了jenkins,redmine,cms和更多东西。希望这可以帮助您做出决定。