Docker - 使用Redis,Postgres,ElasticSearch,NGINX,Workers和多个ruby应用程序设置Web应用程序的建议

 美好生活的日子 发布于 2023-02-03 12:22

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

我的设置

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

集装箱战略

我想知道的第一件事是你将使用docker和这些服务的策略.

您是否会为每个服务创建一个(例如ubuntu)容器,然后使用适当的隧道(-link)启动它们到容器?

你会将服务捆绑在一个容器上,而将应用程序捆绑在另一个

或者,你会创建一个巨大的容器?

Dockerfile

您是否/可以为所有容器制作单个Dockerfile,还是将它们拆分?即Redis-Dockerfile,Web01-Dockerfile等.

发展与生产

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

在生产中,我可以在主机上克隆应用程序存储库并在VM中安装,或者我可以在容器内部克隆应用程序代码.

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

1 个回答
  • 容器策略:这是一个经常被问到的问题.这真的取决于你想要对你的应用程序做什么.

    如果您的应用程序将进行大量部署(例如,如果您的应用程序是SAAS,并且您将为每个客户部署一个新实例),但这些部署预计会相当小,那么您可能希望将所有内容放在一个容器中,因为部署会容易得多.

    如果您的应用程序可能会显着缩放(例如,如果您希望需要多个前端,工作人员等),您可能希望将每个服务放在不同的容器中,这样您就可以单独扩展每个服务.

    如果您的应用程序将具有大量部署并且必须扩展,那么您将需要多个容器,并确保您也正确使用链接:-)

    Dockerfile:每个映像需要一个Dockerfile.所以,如果你创建一个"一体化"容器,它就是一个Dockerfile; 如果您将应用程序拆分为具有不同角色的多个容器(Redis,DB,Web ...),那就是多个不同的Dockerfiles.

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

    有时候,你可以在你的本地机器上工作,并且不时地构建容器(并测试它们)(有点像你要"测试推送到升级",除了它更快).如果构建新容器需要一段时间(例如,如果使用ADD后跟昂贵的构建/依赖步骤),这是一种很好的方法.

    如果容器构建很快,您可以在每次更改内容时不断重建和重新部署新容器.

    您还可以使用两个略有不同的Dockerfiles.假设您的来源将在/myapp.在开发Dockerfile中,您将声明/myapp为a VOLUME,并且期望开发人员将其源的本地副本绑定到/myapp.在生产Dockerfile中,您将使用ADD将源复制到/myapp.构建过程中也会有细微差别.

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

    2023-02-03 12:24 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有