一尘不染

一个容器中有多个图像

docker

所以,这是问题所在,我 需要做 一些 开发 ,为此,我需要以下软件包:

  1. MongoDb
  2. 节点
  3. Nginx的
  4. 兔子Mq
  5. 雷迪斯

一种选择是, 我获取一个Ubuntu映像创建一个容器 并开始一个接一个地安装它们并完成,启动我的服务器,并公开端口。

但这也可以在虚拟框中轻松完成,并且不会使用Docker的功能。因此,我必须开始使用这些软件包构建自己的映像。现在,这是一个问题,如果我开始编写我的Dockerfile,并在其中放置用于下载Node
js(及其他)的命令,这将再次变得像虚拟化一样。

我需要的是,我 从Ubuntu的启动 和不断 增加引用
MongoDB的,的NodeJS,RabbitMQ的,Nginx的和Redis的 内部 Dockerfile 终于露出各自携出。

这是我的查询:

  1. 这可能吗?从一个基本映像开始时,就像在Dockerfile中添加其他映像的引用一样。
  2. 如果是,那怎么办?
  3. 这也是正确的做法吗?
  4. 如何在Docker中做这些事情?

提前致谢。


阅读 240

收藏
2020-06-17

共1个答案

一尘不染

保持图像明亮。每个容器运行一项服务。在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启动时,这不一定是您要做的第一件事。

2020-06-17