2017-07-16 55 views
4

我一直在学习如何使用Docker来设置开发环境,但是,我很好奇这些想法是如何转化为生产堆栈的。举个例子,我有一个使用MySQL,Redis和Nginx的Laravel(Php)应用程序。了解生产中的Docker

因此,在生产中,比方说,我通常会在AWS上的负载均衡器后面有两个应用程序ec2实例。当使用Docker设置类似的生产环境时...

1)因为我会使用RDS和Elasticache,所以不需要容器。所以基本上,id只需要PHP-Fpm和Nginx的容器? 2)为了获得高可用性,ELB后面仍然会有2个(或至少多于1个)ec2实例。所以我想每个实例都会运行上述容器(PHP和Nginx)。但是,这听起来和我以前的VM设置没有什么不同,每个服务器都运行它为服务应用程序提供的服务。这是否准确? 3)使用虚拟机时,我通常会将代码烘焙到AMI中,然后将这些AMI添加到启动配置和Auto Scaling组中,并且该组将根据需要启动实例。因此,为了部署,我会拆除旧的ec2实例并启动新的实例。使用Docker,由于这些容器将在ec2实例上运行,我是否还需要启动/拆卸虚拟机,还是只更换容器并保持虚拟机运行?

回答

4

它合理地保持码头环境以外的RDS,Elasticache和其他完全托管的服务。是的,对于高可用性,您需要运行docker守护进程的多个EC2实例。

真正的优势不在于有两个EC2实例在它们中的每一个上运行两个Web服务器泊坞窗容器。当您将应用程序分解为微服务时,真正的优势来自于多个容器组合在一起构建提供benefits of microservices的Web应用程序。

除此之外,DevOps流量与EC2中的传统Web应用程序部署相比具有自动缩放和负载平衡,并且具有许多benefits。例如,您的源代码也将包含容器代码,这将保证环境在您的舞台和制作过程中均匀工作。你也将有图像指向你的源代码控制中的分支/标签,它允许为新版本获得新的更新(增量下载)。

如果您要在AWS中设置docker,建议您使用AWS ECS来降低管理开销。

+0

感谢您的信息。因此,潜在的情况是,因为我的应用程序仅仅是一个基本的API,并且可能没有地方可以提供微服务,但是我可能没有从Docker中受益。 – djt

+0

是的,如果它是一个简单的API,你可以暂时保留它。当它变得越来越复杂时,你可以开始dockerizing应用程序,然后通过chuck设备缓慢地chunk到微服务。 – Ashan

2
  1. 你是对的,你只需要在一个容器中运行你的代码,它只会访问远程服务。唯一需要考虑的是确保与他们的连接。

  2. 你说得很对,你需要拥有你以前在Docker容器中的虚拟机中拥有的所有东西,这样你的代码才能像以前一样工作。无论如何,通过Docker容器,可以在同一个EC2实例上运行多个应用程序实例。当然,你的应用会尝试在同一个端口上运行,因此需要一些额外的网络层来管理端口,但这是可能的。所有EC2实例都需要安装docker。

  3. 您不必创建AMI并关闭和旋转EC2实例,而只需拖动新的Docker映像并使用新映像重新启动容器。与EC2实例流程中的分钟相比,这意味着只需几秒钟。这意味着您可以非常快速地恢复部署,并为可以达到0%停机时间的设置打开大门。

+0

感谢您的信息。因此,现在看来,因为我的应用程序不需要很多容器的方式,所以我可能只能从快速部署中受益 - 至少在我需要通过容器的方式更多 – djt

+0

IMO的最大优势是快速部署。这很大程度上取决于您部署到生产的频率以及您接近100%的正常运行时间的重要性。如果你有罕见的部署,你可能不会从迁移到Docker中获益。 – bogdanciobanu

+0

Docker中的“快速部署”实际上取决于其他因素以及您认为的“部署”。实际上,Docker实际上增加了一些步骤,人们通常应该在端到端的部署时间中包含这些步骤。有构建Docker镜像(这通常是对当前构建过程的补充,并会增加一些时间),将镜像推送到注册表(镜像需要可用于服务器拉取),然后将镜像拉到所有服务器。在一天结束时,Docker可能不会比目前的方法更快。食物的思想。 –