所以,这是问题所在,我 需要做 一些 开发 ,为此,我需要以下软件包:
一种选择是, 我获取一个Ubuntu映像 , 创建一个容器 并开始一个接一个地安装它们并完成,启动我的服务器,并公开端口。
但这也可以在虚拟框中轻松完成,并且不会使用Docker的功能。因此,我必须开始使用这些软件包构建自己的映像。现在,这是一个问题,如果我开始编写我的Dockerfile,并在其中放置用于下载Node js(及其他)的命令,这将再次变得像虚拟化一样。
我需要的是,我 从Ubuntu的启动 和不断 增加 的 引用 的 MongoDB的,的NodeJS,RabbitMQ的,Nginx的和Redis的 内部 Dockerfile 终于露出各自携出。
这是我的查询:
提前致谢。
保持图像明亮。每个容器运行一项服务。在docker hub上使用mongodb,nodejs,rabbitmq,nginx等官方镜像。如有需要,请对其进行扩展。如果要在胖容器中运行所有内容,则最好使用VM。
您当然可以在开发设置中做疯狂的事情,但是为什么要花时间在生产环境中设置 零 价值的东西呢?如果您需要扩展其中一项服务怎么办?如何在每个服务上设置内存和cpu约束?.. 而这样的例子不胜枚举。
不要制造整体容器。
一个好的开始是使用docker-compose配置一组可以互相通信的服务。您可以制作文件的prod和dev版本docker-compose.yml。
docker-compose.yml
进入正确的心态
在理想的情况下,您将在生产环境中的集群环境中运行容器,以便能够扩展系统并具有并发性,但是根据您所运行的内容,这可能会显得过高。最好将其放在脑后,因为它可以帮助您做出正确的决定。
如果您想成为一名纯粹主义者,请考虑以下几点:
您当然可以在开发人员中做一些脏事,例如在主机卷中映射以进行持久存储(许多在产品中使用docker Standalone的人也可以这样做)。
理想情况下,我们应该将docker in dev和docker I prod分开。Docker是开发期间的绝佳工具,因为您可以启动Redis,memcached,postgres,mongodb,rabbitmq,node或其他任何东西,并在几分钟之内运行,从而与团队其他成员共享设置。产品中的Docker可能是完全不同的野兽。
我还要补充一点,我通常反对狂热主义,即产品中的“一切都应在docker中运行”。在有意义的情况下在docker中运行服务。大型公司制作自己的基本映像也很常见。这可能需要很多工作,并且需要进行维护以跟上安全修复程序等的工作。从docker启动时,这不一定是您要做的第一件事。