Docker – 使用Redis,Postgres,ElasticSearch,NGINX,Workers和多个ruby应用程序设置Web应用程序的build议
我真的正在进入Docker。 我想将现有的应用程序基础架构放入容器中,以提供一致且隔离的环境,并且更容易部署。
我的设置
我正在运行一些服务/守护进程(Redis,ES,PG,NGINX)以及一些工作人员(需要与PG和Redis交谈)。 我有3个rubyWeb应用程序服务和一个所有需要与Redis,PG和ES交谈的Faye服务。 NGINX将需要将代理转换为应用程序。
集装箱战略
首先我想知道的是,你将使用docker和这些服务的策略。
- 你会为每个服务创build一个(例如ubuntu)容器,然后用相应的隧道(-link)启动它们到容器?
- 你会把一个容器上的服务和另一个上的应用程序捆绑起来?
- 或者,你会创造一个巨大的容器?
Dockerfile
你会/可以为所有容器制作一个Dockerfile,还是将它们分开? 即Redis-Dockerfile,Web01-Dockerfile等
发展与生产
在开发中,我希望立即更新容器上的文件更改(即从主机FS安装在容器中的path)。 不同的开发者可能会有不同的挂载点。 你将如何设置?
在生产环境中,我可以克隆主机上的应用程序仓库,并挂载到虚拟机中,也可以将应用程序代码克隆到容器内部。
我知道挂载卷的-v标志,所以我想你可以设置一些环境variables来使主机挂载点可configuration。
容器战略:这是一个经常被问到的问题。 这真的取决于你想要用你的应用程序做什么。
- 如果您的应用程序将具有大量的部署(例如,如果您的应用程序是SAAS,并且您将为每个客户部署一个新实例),但这些部署预计会相当小,那么您可能希望将所有内容放在一个容器中,因为部署会容易得多。
- 如果您的应用程序可能显着缩放(例如,如果您希望需要多个前端,工作人员等),则可能需要将每个服务放在不同的容器中,以便可以分别缩放每个服务。
- 如果您的应用程序需要大量部署并且需要扩展,那么您将需要多个容器,并确保您正确使用链接:-)
Dockerfile:每个镜像需要一个Dockerfile。 所以,如果你制作一个“全合一”的容器,它是一个Dockerfile; 如果您将应用程序分成多个具有不同angular色(Redis,DB,Web …)的容器,那就是多个不同的Docker文件。
开发与生产:它确实取决于语言/框架/等。 你使用的。
- 有时候,你可以在你的本地机器上工作,并且每隔一段时间build立一个容器(并testing它们)(有点像“testing推送到分段”,除了它更快)。 如果构build新的容器需要一段时间(例如,如果您使用
ADD
然后是昂贵的构build/依赖性步骤),这是一个很好的方法。 - 如果容器构build速度很快,那么每次更改内容时都可以不断重新构build和重新部署新的容器。
- 你也可以使用两个稍微不同的Docker文件。 假设你的源代码将在
/myapp
。 在Dockerfile的开发中,你将声明/myapp
是一个VOLUME
,开发者将会把它的本地拷贝绑定到/myapp
。 在生产Dockerfile中,您将使用ADD
将源复制到/myapp
。 在构build过程中也会有细微的差别。
最后一种方法并不理想(因为dev和prod环境越接近越好),但是在某些情况下(当构build一个新的容器非常长时)它会有很大的帮助。
容器策略容器用于拆分服务,在容器中运行服务,所以取决于服务以及如何组织服务
Dockerfile
Dockerfile用于构build用于运行容器的映像,因此请为每个容器创build一个Dockerfile
- 使用Docker Swarm定义共享主机卷
- 我如何构build一个Docker镜像,并使用CIRCLE 2.0将其推送到ECR?
- 命令'/ bin / sh -c sudo pip3 install -r requirements.txt'返回一个非零的代码:1
- 将日志元数据写入rsyslog
- 如何在单个主机上运行Docker容器池,在重新启动时保留其IP地址?
- 如何在Mac OS X上添加Docker的bash命令完成?
- 如何调查Docker Swarm模式closures容器?
- 用EBS部署多容器docker环境(flask&nginx)
- Docker – “127.0.0.1”不是有效的端口 – Django