Docker – 使用Redis,Postgres,ElasticSearch,NGINX,工作人员和多个ruby应用程序设置Web应用程序的建议

前端之家收集整理的这篇文章主要介绍了Docker – 使用Redis,Postgres,ElasticSearch,NGINX,工作人员和多个ruby应用程序设置Web应用程序的建议前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我刚刚进入Docker.我想将现有的应用程序基础架构放在容器中,以提供一致和隔离的环境,并且更容易部署.

我的设置

我正在运行一些服务/守护程序(Redis,ES,PG,Nginx)以及一些工作人员(需要与PG和Redis交谈).我有3个Ruby应用程序服务和一个faye服务,所有这些都需要和Redis,PG和ES进行通话. Nginx将需要反向代理应用程序.

集装箱策略

我想知道的第一件事是你将在Docker和这些服务中使用哪种策略.

>您将为每个服务创建一个(例如ubuntu)容器,然后使用适当的隧道(-link)启动它们到容器?
>您将一个容器上的服务和另一个应用程序捆绑在一起吗?
>或者,你会创建一个巨大的容器吗?

Dockerfile

你/你能为所有容器制作一个Docker文件,还是将它们分开?
即Redis-Dockerfile,Web01-Dockerfile等

发展与生产

在开发中,我想对容器(即从主机FS容器中安装的路径)立即更新文件更改.开发人员的开发人员可能有所不同.你会如何设定?

在生产中,我可以克隆主机上的应用程序备份,并挂载在虚拟机中,或者我可以克隆容器本身中的应用程序代码.

我知道安装卷的-v标志,所以我想象你可以设置一些环境变量来使主机安装点可以配置.

最佳答案
集装箱策略:这是一个常见问题.这真的取决于你对应用程序的处理方式.

>如果您的应用程序拥有大量部署(例如,如果您的应用程序是SAAS,并且您将为每个客户部署一个新实例),但是这些部署预计会相当小,那么您可能希望将所有内容都放在一个单一的容器,因为部署将会容易得多.
>如果您的应用程序可能会显着缩放(即,如果您希望需要多个前端,工作人员等),则可能希望将每个服务放在不同的容器中,以便您可以分别扩展每个服务.
>如果您的应用程序将拥有大量的部署,并且必须扩展,那么您将需要多个容器,并确保正确使用链接:-)

Dockerfile:每个图像需要一个Dockerfile.所以,如果你制作一个“一体化”容器,那就是一个Docker文件;如果您将应用程序拆分为具有不同角色(Redis,DB,Web …)的多个容器,这是多个不同的Docker文件.

Dev vs Prod:它真的取决于语言/框架等.你使用

>有时,你可以在你的本地机器上工作,并且每一次都建立容器(并测试它们),然后(有点像你会“尝试推入”,除了它要快得多).
如果构建新容器需要一段时间(例如,如果您使用ADD,然后是昂贵的构建/依赖性步骤),这是一个很好的方法.
>如果容器构建速度快,您可以重新重新部署新容器,每次更改某些内容时.
>您也可以使用两个稍微不同的Dockerfiles.假设你的来源将在/ myapp中.在开发Dockerfile中,您将声明/ myapp为VOLUME,并且开发人员将期望将源的本地副本绑定到/ myapp.在生产Dockerfile中,您将使用ADD将源复制到/ myapp.在构建过程中也会有微小的差异.

最后一个方法不是很理想(因为dev和prod环境尽可能的接近),但在某些情况下(当构建新的容器很长时),它有很多帮助.

猜你在找的Docker相关文章