在一个码头容器中运行多个应用程序

这个问题是我继续探索Docker的一部分,在某种程度上跟随了我的earlier questions之一。现在我已经了解了如何通过连接一堆Docker容器来获得一个完整的应用程序堆栈(实际上是一个迷你VPS)。例如,可以创建一个堆栈,它为Apache PHP5提供了一些扩展名Redis MemCached MySQL,所有这些都运行在Ubuntu之上,或者没有附加的数据容器,可以方便地对用户数据进行序列化。

一切非常漂亮和优雅。但是,我不得不想知道…。 5个容器运行那个小VPS(我计数5不是6,因为Apache PHP5进入一个容器)。那么假设我有100个这样的VPS运行?这意味着我有500个集装箱运行!我了解这里的论据 – 很容易组合新的应用程序堆栈,更新堆栈的一个组件等。但是,这样做没有不必要的开销?

假设我这样做

把所有的应用程序放在一个容器中
写一个小shell脚本

!/斌/庆典
服务memcached启动
服务redis-server启动
….
服务apache2启动
而:

  :
DONE

在我的Dockerfile我有

ADD start.sh /usr/local/bin/start.sh
RUN chmod +x /usr/local/bin/start.sh

....
ENTRYPOINT ["/bin/bash"]
CMD ["/usr/local/bin/start.sh"]

然后我把这个容器和赛跑

docker run -d -p 8080:80 -v /var/droidos/site:/var/www/html -v /var/droidos/logs:/var/log/apache2 droidos/minivps

我在做生意现在当我想以编程方式关闭这个容器时,我可以通过执行一个单一的docker命令来执行。

有一个类似性质的许多问题,一个谷歌为他们找到。除了我以上所述的论点之外,一个应用程序的容器方法的最常见的原因之一是“Docker设计工作的方式”。我想知道什么

>运行N连接容器的x100实例的缺点是什么?主机上通过速度,内存使用等进行权衡?
>我在这里做了什么错?

最佳答案
容器基本上是一个过程。在体面的Linux系统上运行500个进程没有技术问题,尽管它们必须共享CPU和内存。

容器在一个进程上的成本是一些额外的内核资源来管理名称空间,文件系统和控制组以及Docker守护程序中的一些管理结构,特别是处理stdout和stderr。

引入命名空间以提供隔离,使得一个容器不会干扰任何其他容器。如果您的5个容器组成一个不需要隔离的单元,那么您可以使用–net = container共享网络命名空间。目前没有功能来分享cgroups,AFAIK。

你建议的是什么问题:

>这不是“码头方式”。这对你来说可能不重要。
>您必须维护脚本才能使其正常运行,担心进程重新启动等等,而不是使用为任务设计的业务流程
>你将不得不管理文件系统中的冲突,例如两个进程需要不同版本的库,或者它们都写入相同的输出文件
> stdout和stderr将混合五个进程

转载注明原文:在一个码头容器中运行多个应用程序 - 代码日志