AWS ECS 生产 Docker 部署

Posted

技术标签:

【中文标题】AWS ECS 生产 Docker 部署【英文标题】:AWS ECS Production Docker Deployment 【发布时间】:2017-12-30 23:36:57 【问题描述】:

我最近开始将 Docker 用于我自己的个人网站。所以我的网站的设计基本上是

nginx -> Frontend -> Backend -> Database

目前,该数据库使用 AWS RDS 托管。所以我们现在可以把它放在一边。

这是我的问题

    我目前将我的应用程序分成不同的存储库。分别是前端和后端。

    我应该在哪里存储我的“根”docker-compose.yml 文件。我无法决定将其存储在前端/后端存储库中。

    在 docker-compose.yml 文件中,nginx 服务能否在没有任何端口的情况下从我的前端服务挂载一个卷并为该目录提供服务?

    我已经尝试了这么多天,但我似乎无法在 ECS 集群中使用我的 3 层应用程序使用 Docker 部署适当的生产。有没有我可以参考的好例子 nginx.conf ?

    如何自动对我的域进行 SSL?

谢谢你们!

【问题讨论】:

【参考方案1】:

我应该将我的“根”docker-compose.yml 文件存储在哪里。

许多组织使用***存储库,用于存储与基础架构相关的元数据,例如 CloudFormation 模板和 docker-compose.yml 文件。所以它会是这样的。因此,开发人员首先克隆*** repo,理想情况下,该 repo 包含子模块或工具,用于为每个子组件或微服务拉取子 repo。

在 docker-compose.yml 文件中,nginx 服务能否在没有任何端口的情况下从我的前端服务挂载一个卷并提供该目录?

是的,您可以这样做,但这样做很危险,而且磁盘会成为瓶颈。如果您的意图是从前端服务获取内容,并由 Nginx 提供服务,那么您应该通过端口将前端服务链接到 Nginx 服务器,并将 Nginx 设置为应用程序容器前面的反向代理。您还可以配置 Nginx 将内容从前端服务器缓存到磁盘卷(如果内容太多而无法放入内存)。这将是一种更安全的方式,而不是使用磁盘作为通信链接。以下是如何在 AWS ECS 上配置此类反向代理的示例:https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy

我似乎无法在 ECS 集群中使用我的 3 层应用程序使用 Docker 部署适当的生产。有什么好的例子 nginx.conf 可以参考吗?

我上一个答案中的链接包含一个应该有用的示例 nginx.conf,以及一个示例任务定义,用于在 Amazon ECS 上部署相互链接的应用程序容器和 nginx 容器。

如何自动对我的域进行 SSL?

如果您在 AWS 上,获得 SSL 的最佳方式是使用 Application Load Balancer (ALB) 的内置 SSL 终止功能。 AWS ECS 与 ALB 集成,作为获取容器的 Web 流量的一种方式。 ALB 还集成了 Amazon 证书管理器 (https://aws.amazon.com/certificate-manager/) 此服务将为您提供一个自动更新的免费 SSL 证书。这样您就不必担心 SSL 证书会再次过期,因为它会在您的 ALB 中自动更新和更新。

【讨论】:

谢谢。我终于让它工作了!很酷,以前不知道 git submodule 是做什么用的,但我要开始使用它了!

以上是关于AWS ECS 生产 Docker 部署的主要内容,如果未能解决你的问题,请参考以下文章

将多个 docker 容器部署到 AWS ECS

AWS - ECS - 如何在现有 ECS(带有 1 个 EC2)实例上重新部署更新的 Docker 映像?

AWS ECS Docker 容器 Boto3 IAM 权限

Spring Cloud 微服务(五) 部署到AWS ECS

使用 Jenkins 或 Job Scheduler 在 AWS ECS 上自动部署 Docker 容器

通过 Github 操作在 AWS ECS 上使用 Docker Compose 进行部署