保持图像明亮。每个容器运行一项服务。在docker
hub上使用mongodb,nodejs,rabbitmq,nginx等官方镜像。如有需要,请对其进行扩展。如果要在胖容器中运行所有内容,则最好使用VM。
您当然可以在开发设置中做疯狂的事情,但是为什么要花时间在生产环境中设置 零
价值的东西呢?如果您需要扩展其中一项服务怎么办?如何在每个服务上设置内存和cpu约束?.. 而这样的例子不胜枚举。
不要制造整体容器。
一个好的开始是使用docker-compose配置一组可以互相通信的服务。您可以制作文件的prod和dev版本
docker-compose.yml。
进入正确的心态
在理想的情况下,您将在生产环境中的集群环境中运行容器,以便能够扩展系统并具有并发性,但是根据您所运行的内容,这可能会显得过高。最好将其放在脑后,因为它可以帮助您做出正确的决定。
如果您想成为一名纯粹主义者,请考虑以下几点:
- 您如何在多个主机之间拥有持久的卷存储?
- 反向代理/负载均衡器可能应该是使用内部网络与容器进行通信的系统的入口点。
- 我的服务是否甚至可以在群集环境中运行(容器的多个实例)
您当然可以在开发人员中做一些脏事,例如在主机卷中映射以进行持久存储(许多在产品中使用docker Standalone的人也可以这样做)。
理想情况下,我们应该将docker in dev和docker I
prod分开。Docker是开发期间的绝佳工具,因为您可以启动Redis,memcached,postgres,mongodb,rabbitmq,node或其他任何东西,并在几分钟之内运行,从而与团队其他成员共享设置。产品中的Docker可能是完全不同的野兽。
我还要补充一点,我通常反对狂热主义,即产品中的“一切都应在docker中运行”。在有意义的情况下在docker中运行服务。大型公司制作自己的基本映像也很常见。这可能需要很多工作,并且需要进行维护以跟上安全修复程序等的工作。从docker启动时,这不一定是您要做的第一件事。



