Docker-关于使用Redis、Postgres、ElasticSearch、NGINX、Workers和多个ruby应用程序的web应用程序设置的建议

Docker-关于使用Redis、Postgres、ElasticSearch、NGINX、Workers和多个ruby应用程序的web应用程序设置的建议,docker,Docker,我真的很喜欢Docker。我希望将现有的应用程序基础结构放入容器中,以提供一个一致的、隔离的环境,并简化部署 我的设置 我正在运行许多服务/守护进程(Redis、ES、PG、NGINX)以及一些工作程序(需要与PG和Redis交谈)。我有3个ruby web应用程序服务和一个faye服务,它们都需要与Redis、PG和ES对话。NGINX将需要反向代理应用程序 集装箱战略 我想知道的第一件事是,你会对docker和这些服务使用哪种策略 您是否会为每个服务创建一个(例如ubuntu)容器,然后用

我真的很喜欢Docker。我希望将现有的应用程序基础结构放入容器中,以提供一个一致的、隔离的环境,并简化部署

我的设置

我正在运行许多服务/守护进程(Redis、ES、PG、NGINX)以及一些工作程序(需要与PG和Redis交谈)。我有3个ruby web应用程序服务和一个faye服务,它们都需要与Redis、PG和ES对话。NGINX将需要反向代理应用程序


集装箱战略

我想知道的第一件事是,你会对docker和这些服务使用哪种策略

  • 您是否会为每个服务创建一个(例如ubuntu)容器,然后用相应的隧道(-link)启动容器
  • 您会将服务捆绑在一个容器上,将应用程序捆绑在另一个容器上吗
  • 或者,您会创建一个大型容器吗
Dockerfile

您是否可以为所有容器制作一个Dockerfile,或将其拆分? i、 e.Redis Dockerfile、Web01 Dockerfile等

开发与生产

在开发中,我希望在容器上立即更新文件更改(即从主机FS装载到容器中的路径)。安装点可能因开发人员而异。你会怎么安排

在生产中,我可以在主机上克隆应用程序repo并装载到VMs中,也可以在容器本身中克隆应用程序代码


我知道装载卷的-v标志,所以我想您可以设置一些环境变量,使主机装载点可配置。

容器策略 容器用于拆分服务,在容器中运行服务,所以这取决于服务以及您如何组织服务

Dockerfile


Dockerfile用于构建用于运行容器的映像,因此,为每个容器创建Dockerfile容器策略:这是一个常见问题。这实际上取决于你想对你的应用程序做什么

  • 如果您的应用程序将有大量的部署(例如,如果您的应用程序是SAAS,并且您将为每个客户部署一个新实例),但这些部署预计将非常小,那么您可能希望将所有内容都放在一个容器中,因为部署将更加容易
  • 如果您的应用程序可能会被显著地扩展(即,如果您希望需要多个前端、工作人员等),那么您可能希望将每个服务放在不同的容器中,以便可以单独扩展每个服务
  • 如果您的应用程序将有大量部署并且必须扩展,那么您将需要多个容器,并确保正确使用链接:-)
Dockerfile:每个图像需要一个Dockerfile。所以,如果你制作一个“一体式”容器,它就是一个Dockerfile;如果您将应用程序拆分为多个具有不同角色(Redis、DB、Web…)的容器,则会有相同数量的DockerFile

开发vs产品:这实际上取决于您使用的语言/框架等

  • 有时,您可以在本地机器上工作,不时地构建容器(并测试它们)(有点像“测试以推送到登台”,只是速度快得多)。 如果构建新容器需要一段时间(例如,如果使用
    ADD
    ,然后是昂贵的构建/依赖步骤),那么这是一种很好的方法
  • 如果容器构建速度很快,您可以在每次更改某些内容时不断地重新构建和重新部署新容器
  • 您还可以使用两个稍有不同的DockerFile。假设您的源代码位于
    /myapp
    中。在development Dockerfile中,您将声明
    /myapp
    ,并且开发人员将绑定挂载源的本地副本到
    /myapp
    。在生产Dockerfile中,您将使用
    ADD
    将源代码复制到
    /myapp
    。在构建过程中也会有一些细微的差异

最后一种方法并不理想(因为在开发和生产环境尽可能接近的情况下它会更好!),但在某些情况下(在构建新容器非常长的情况下),它会有很大帮助。

回答得很好,谢谢!希望避免使用开发和生产容器。看起来部件就在那里,所以我应该能够想出一种方法,根据环境自动设置容器。再次感谢您为我们提供的深思熟虑的选择!很好的答案,但project应该如何处理多个DockerFile?