一个容器内的多个图像

Ank*_*rma 24 docker dockerfile

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

  1. MongoDB的
  2. 的NodeJS
  3. Nginx的
  4. 的RabbitMQ
  5. Redis的

一种选择是我采用Ubuntu映像,创建容器并逐个开始安装并完成,启动我的服务器,然后公开端口.

但这也很容易在虚拟盒子里完成,而且不会使用Docker的强大功能.因此,我必须开始用这些包构建我自己的图像.现在这里是一个问题,如果我开始编写我的Dockerfile,并且如果放置命令来下载其中的Node js(和其他),这又变得像虚拟化一样.

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

以下是我的查询:

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

提前致谢.

Gri*_*mmy 39

保持图像清晰.每个容器运行一个服务.使用docker hub上的官方图像为mongodb,nodejs,rabbitmq,nginx等.如果需要,可以扩展它们.如果你想在胖容器中运行所有东西,你也可以使用VM.

你当然可以在开发设置中做一些疯狂的东西,但为什么要花时间在生产环境中设置值的东西呢?如果您需要扩展其中一项服务怎么办?如何在每个服务上设置内存和CPU限制?.. 而这样的例子不胜枚举.

不要制作单片容器.

一个好的开始是使用docker-compose配置一组可以相互通信的服务.您可以制作文件的prod和dev版本docker-compose.yml.

进入正确的思维框架

在完美的世界中,您可以在生产中的集群环境中运行容器,以便能够扩展系统并具有并发性,但这可能会过度,具体取决于您正在运行的内容.至少可以把它放在脑后,因为它可以帮助你做出正确的决定.

如果你想成为一个纯粹主义者,可以考虑一些要点:

  • 如何在多个主机上拥有持久性卷存储?
  • 反向代理/负载均衡器应该是进入系统的入口点,使用内部网络与容器进行通信.
  • 我的服务是否能够在集群环境中运行(容器的多个实例)

您当然可以在开发中执行脏操作,例如在主机卷中映射以进行持久存储(并且许多在prod中使用独立于docker的人也可以这样做).

理想情况下,我们应该将dev中的docker和docker i prod分开.Docker在开发过程中是一个很棒的工具,因为你可以在几分钟内完成redis,memcached,postgres,mongodb,rabbitmq,node或者运行,并与其他团队一起构建设置.生产中的Docker可以是一个完全不同的野兽.

我还要补充一点,我一般都反对狂热主义,即"一切都应该在码头工作中".在有意义的时候在docker中运行服务.大公司制作自己的基本图像也并不罕见.这可能需要很多工作,并且需要维护才能跟上安全修复等问题.当你从docker开始时,这不一定是你跳过的第一件事.

  • “为什么要花时间在零产值的事情上?” 对于那些在 docker-compose 上浪费了几个小时来了解在 ECS 上使用是多么痛苦的人来说,读起来很有趣。 (3认同)
  • 完美点。因此,最佳实践是将每个程序包都放入其自己的容器中,并让它们彼此通信。以及我该如何与其他人共享此设置或将其部署到生产设置中? (2认同)
  • 好的,+ 1,再次感谢宝贵的想法. (2认同)