了解生产中的 Docker

djt*_*djt 6 docker

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

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

1) 因为我将使用 RDS 和 Elasticache,所以不需要这些容器。那么基本上,我只需要 PHP-Fpm 和 Nginx 的容器?

2) 为了获得高可用性,我在 ELB 后面仍然有 2 个(或至少超过 1 个)ec2 实例。所以我想每个实例都会运行上述容器(PHP 和 Nginx)。但这听起来与我之前的虚拟机设置没有什么不同,其中每个服务器都运行为应用程序提供服务所需的内容。准确吗?

3) 对于虚拟机,我传统上会将代码烘焙到 AMI 中,并将这些 AMI 添加到启动配置和 Auto Scaling 组,该组将根据需要启动实例。因此,对于部署,我将拆除旧的 ec2 实例并启动新的实例。使用 Docker,由于这些容器将在 ec2 实例上运行,我是否仍然需要启动/拆除虚拟机,或者我只需更换容器并保持虚拟机运行?

Ash*_*han 5

将 RDS、Elasticache 和其他完全托管的服务保留在 docker 环境之外是合理的。是的,为了实现高可用性,您需要多个运行 docker 守护进程的 EC2 实例。

真正的优势并不是拥有两个 EC2 实例,每个实例上运行两个 Web 服务器 Docker 容器。当您将应用程序分解为微服务时,真正的优势就会显现出来,其中多个容器组合起来构建您的 Web 应用程序,从而提供微服务的优势

除此之外,DevOps 流程与 EC2 中的传统 Web 应用程序部署不同,具有自动扩展和负载平衡功能,并且具有许多优点。例如,您的源代码也将包含容器代码,这将保证环境在您的登台和生产中统一工作。此外,您还将拥有指向源代码管理中的分支/标签的图像,这允许获取新版本的新更新(增量下载)。

如果您要在AWS中设置docker,建议使用AWS ECS以减少管理开销。