

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Elastic Beanstalk 部署容器
<a name="deploy-containers-by-using-elastic-beanstalk"></a>

*Thomas Scott 和 Jean-Baptiste Guillois，Amazon Web Services*

## Summary
<a name="deploy-containers-by-using-elastic-beanstalk-summary"></a>

在 Amazon Web Services（AWS）Cloud 上，AWS Elastic Beanstalk 支持 Docker 作为可用平台，因此容器可以在创建的环境中运行。此模式展示了如何使用 Elastic Beanstalk 服务部署容器。此模式的部署将使用基于 Docker 平台的 Web 服务器环境。

要使用 Elastic Beanstalk 部署和扩展 Web 应用程序和服务，您需要上传代码，部署就会自动处理。还包括容量预调配、负载均衡、自动扩缩和应用程序运行状况监控。当您使用 Elastic Beanstalk 时，您可以完全控制它代表您创建的 AWS 资源。Elastic Beanstalk 不收取额外费用。您只需为用于存储和运行应用程序的 AWS 资源付费。

此模式包括使用 [AWS Elastic Beanstalk 命令行界面（EB CLI）](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html)和 AWS 管理控制台 进行部署的说明。

**使用案例**

Elastic Beanstalk 的使用场景包括： 
+ 部署原型环境来演示前端应用程序。（此模式以 Dockerfile** **为例。）
+ 部署 API 来处理给定域名的 API 请求。
+ 使用 Docker-Compose 部署编排解决方案（在此模式中 `docker-compose.yml` ** **未用作实际示例）。

## 先决条件和限制
<a name="deploy-containers-by-using-elastic-beanstalk-prereqs"></a>

**先决条件**
+ Amazon Web Services account 
+ 本地已安装 AWS EB CLI
+ Docker 已安装在本地机器上

**限制**
+ 在免费套餐中，每个 IP 地址的 Docker 拉取限制为每 6 小时拉取 100 次。

## 架构
<a name="deploy-containers-by-using-elastic-beanstalk-architecture"></a>

**目标技术堆栈**
+ 亚马逊弹性计算云 (Amazon EC2) 实例
+ 安全组
+ 应用程序负载均衡器
+ 自动扩缩组

**目标架构 **

![使用 Elastic Beanstalk 部署容器的架构](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/dfabcdc2-747f-40e2-a603-08ea31ba71d3/images/1d17ff09-1aea-4c72-adb5-eaf741601428.png)


**自动化和扩展**

AWS Elastic Beanstalk 可以根据发出的请求数自动扩缩。为环境创建的 AWS 资源包括一个 Application Load Balancer、一个 Auto Scaling 组和一个或多个 Amazon EC2 实例。 

负载均衡器位于作为 Auto Scaling 组一部分的 Amazon EC2 实例的前面。Amazon A EC2 uto Scaling 会自动启动额外的亚马逊 EC2 实例，以适应应用程序不断增加的负载。如果您的应用程序的负载减少，Amazon A EC2 uto Scaling 会停止实例，但它会使至少一个实例保持运行。

**自动扩缩触发器**

您的 Elastic Beanstalk 环境中的 Auto Scaling 组使用 CloudWatch 两个亚马逊警报来启动扩展操作。当每个实例的平均出站网络流量在 5 分钟时间段内高于 6 MB 或低于 2 MB 时，默认触发器将扩展。要有效地使用 Amazon A EC2 uto Scaling，请配置适合您的应用程序、实例类型和服务要求的触发器。您可以基于若干个统计数据 (包括延迟、磁盘 I/O、CPU 使用率和请求计数) 来进行扩展。有关更多信息，请参阅[自动扩缩触发器](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-autoscaling-triggers.html)。

## 工具
<a name="deploy-containers-by-using-elastic-beanstalk-tools"></a>

**Amazon Web Services**
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)是一种开源工具，它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。
+ [AWS EB 命令行界面 (EB CLI)](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install.html) 是一个可用来创建、配置和管理 Elastic Beanstalk 环境的命令行客户端。
+ [弹性负载均衡](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)将传入的应用程序或网络流量分发到多个目标。例如，您可以跨亚马逊弹性计算云 (Amazon EC2) 实例、容器以及一个或多个可用区中的 IP 地址分配流量。

**其他服务**
+ [Docker](https://www.docker.com/) 将软件打包成称为容器的标准化单元，其中包括库、系统工具、代码和运行时系统。

**代码**

此模式的代码可在 GitHub [集群示例应用程序](https://github.com/aws-samples/cluster-sample-app)存储库中找到。

## 操作说明
<a name="deploy-containers-by-using-elastic-beanstalk-epics"></a>

### 使用 Dockerfile 构建
<a name="build-with-a-dockerfile"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 克隆远程存储库。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | 应用程序开发人员、AWS 管理员、AWS DevOps | 
| 初始化 Elastic Beanstalk Docker 项目。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | 应用程序开发人员、AWS 管理员、AWS DevOps | 
| 在本地测试项目。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | 应用程序开发人员、AWS 管理员、AWS DevOps | 

### 使用 EB CLI 进行部署
<a name="deploy-using-eb-cli"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 运行部署命令 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | 应用程序开发人员、AWS 管理员、AWS DevOps | 
| 访问已部署的版本。 | 部署命令完成后，使用该 `eb open`命令访问项目。 | 应用程序开发人员、AWS 管理员、AWS DevOps | 

### 使用控制台进行部署
<a name="deploy-using-the-console"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用浏览器部署应用程序。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | 应用程序开发人员、AWS 管理员、AWS DevOps | 
| 访问已部署的版本。 | 部署后，访问已部署的应用程序，然后选择提供的 URL。 | 应用程序开发人员、AWS 管理员、AWS DevOps | 

## 相关资源
<a name="deploy-containers-by-using-elastic-beanstalk-resources"></a>
+ [Web 服务器环境](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts-webserver.html)
+ [在 macOS 上安装 EB CLI](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-osx.html)
+ [手动安装 EB CLI](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html)

## 附加信息
<a name="deploy-containers-by-using-elastic-beanstalk-additional"></a>

**使用 Elastic Beanstalk 的好处**
+ 自动预调配基础设施
+ 自动管理底层平台
+ 自动修补和更新以支持应用程序
+ 自动扩缩应用程序
+ 能够自定义节点数
+ 能够在需要时访问基础设施组件
+ 与其他容器部署解决方案相比，易于部署