这个问题是我对Docker的持续探索的一部分,某种程度上是我之前提出的问题的后续。我现在明白了如何通过链接一堆Docker容器来获得一个完整的应用程序堆栈(实际上是一个迷你VPS)。例如,可以创建一个堆栈,其中包含Apache + PHP5及其扩展程序+ Redis + MemCached + MySQL,所有这些都在Ubuntu上运行,并且可以选择是否使用额外的数据容器来轻松序列化用户数据。
非常不错和优雅。然而,我不禁想知道... 运行那个小VPS需要5个容器(我计算了5个而不是6个,因为Apache + PHP5放在一个容器中)。那么假设我有100个这样的VPS正在运行?那就意味着我有500个容器正在运行!我理解这里的论点-易于组合新的应用程序堆栈,更新堆栈的一个组件等等。但是,以这种方式运作是否存在不必要的开销呢?
假设我这样做了。
非常不错和优雅。然而,我不禁想知道... 运行那个小VPS需要5个容器(我计算了5个而不是6个,因为Apache + PHP5放在一个容器中)。那么假设我有100个这样的VPS正在运行?那就意味着我有500个容器正在运行!我理解这里的论点-易于组合新的应用程序堆栈,更新堆栈的一个组件等等。但是,以这种方式运作是否存在不必要的开销呢?
假设我这样做了。
- 将我的所有应用程序放入一个容器中
编写一个小的shell脚本
!/bin/bash service memcached start service redis-server start .... service apache2 start while: do : 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设计的方式”。我想知道:
- 运行x100个N个链接容器的缺点是什么 - 在主机上速度,内存使用等方面的权衡?
- 我这里做错了什么?