AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

单容器 Docker 环境

AWS Elastic Beanstalk 可通过生成 Dockerfile 中描述的映像或拉取远程 Docker 映像来启动单容器 Docker 环境。如果您要部署远程 Docker 映像,则无需包含 Dockerfile。而是使用 Dockerrun.aws.json 文件,该文件会指定要使用的映像和其他配置选项。

先决条件

本教程假设您对基本 Elastic Beanstalk 操作、Elastic Beanstalk 命令行界面 (EB CLI) 和 Docker 有一定了解。要完成本教程,您需要在本地安装的有效 Docker。有关安装 Docker 的更多信息,请参阅 Docker 安装指南

如果尚不了解,请按照开始使用 Elastic Beanstalk 中的说明启动您的第一个 Elastic Beanstalk 环境。本教程使用 EB CLI,但您也可以使用 Elastic Beanstalk 控制台创建环境并上传应用程序。要了解有关配置单容器 Docker 环境的更多信息,请参阅单容器 Docker 配置

容器化 Elastic Beanstalk 应用程序

对于本示例,我们从向 AWS Elastic Beanstalk 部署 Flask 应用程序 中创建了示例 Flask 应用程序的 Docker 映像。该应用程序包含一个主文件 application.py。我们还需要一个 Dockerfile。将这两个文件都放在根目录中。

~/eb-docker-flask/ |-- Dockerfile |-- application.py

~/eb-docker-flask/application.py

from flask import Flask # Print a nice greeting def say_hello(username = "World"): return '<p>Hello %s!</p>\n' % username # Some bits of text for the page header_text = ''' <html>\n<head> <title>EB Flask Test</title> </head>\n<body>''' instructions = ''' <p><em>Hint</em>: This is a RESTful web service! Append a username to the URL (for example: <code>/Thelonious</code>) to say hello to someone specific.</p>\n''' home_link = '<p><a href="/">Back</a></p>\n' footer_text = '</body>\n</html>' # Elastic Beanstalk looks for an 'application' that is callable by default application = Flask(__name__) # Add a rule for the index page application.add_url_rule('/', 'index', (lambda: header_text + say_hello() + instructions + footer_text)) # Add a rule when the page is accessed with a name appended to the site # URL application.add_url_rule('/<username>', 'hello', (lambda username: header_text + say_hello(username) + home_link + footer_text)) # Run the application if __name__ == "__main__": # Setting debug to True enables debug output. This line should be # removed before deploying a production application. application.debug = True application.run(host="0.0.0.0")

~/eb-docker-flask/Dockerfile

FROM python:3.6 COPY . /app WORKDIR /app RUN pip install Flask==1.0.2 EXPOSE 5000 CMD ["python", "application.py"]

在本地测试容器

使用 Elastic Beanstalk CLI (EB CLI) 为到 Elastic Beanstalk 的部署配置本地存储库。在根目录处设置应用程序的 Dockerfile

~/eb-docker-flask$ eb init -p docker application-name

(可选)使用 eb local run 在本地生成并运行您的容器。要了解有关 eb local 命令的更多信息,请参阅 eb local。Windows 中不支持 eb local 命令。或者,您也可以使用 docker builddocker run 命令生成并运行您的容器。有关更多信息,请参阅 Docker 文档

~/eb-docker-flask$ eb local run --port 5000

(可选)当您的容器正在运行时,可使用 eb local open 命令在 Web 浏览器中查看您的应用程序。也可以在 Web 浏览器中打开 http://localhost:5000/

~/eb-docker-flask$ eb local open

使用 Dockerfile 部署容器

在本地测试过应用程序后,将其部署到 Elastic Beanstalk 环境。Elastic Beanstalk 使用 Dockerfile 中的说明来生成并运行映像。

使用 EB CLI 创建环境并部署应用程序。

~/eb-docker-flask$ eb create environment-name

启动环境后,可使用 eb open 在 Web 浏览器中查看该环境。

~/eb-docker-flask$ eb open

测试远程 Docker 映像

接下来,我们将生成上一节中的 Flask 应用程序的 Docker 映像并将其推送至 Docker Hub。

注意

以下步骤将创建一个公开可用的 Docker 映像。

在生成并推送映像后,便可使用 Dockerrun.aws.json 文件将其部署到 Elastic Beanstalk。要生成 Flask 应用程序的 Docker 映像并将其推送至 Docker Hub,请运行以下命令。我们将使用与上一示例相同的目录,但您可在您的应用程序代码中使用任何目录。

~/eb-docker-flask$ docker build -t docker-username/beanstalk-flask:latest . ~/eb-docker-flask$ docker push docker-username/beanstalk-flask:latest

注意

在推送映像之前,您可能需要运行 docker login

现在,您只需使用 Dockerrun.aws.json 文件就可以部署您的应用程序了。要了解有关 Dockerrun.aws.json 文件的更多信息,请参阅单容器 Docker 配置

创建一个新目录,并创建一个 Dockerrun.aws.json 文件。

~/remote-docker/Dockerrun.aws.json

{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "username/beanstalk-flask", "Update": "true" }, "Ports": [ { "ContainerPort": "5000" } ] }

使用 EB CLI 为到 Elastic Beanstalk 的部署配置本地存储库。

~/remote-docker$ eb init -p docker application-name

(可选)使用 eb local run 在本地生成并运行您的容器。要了解有关 eb local 命令的更多信息,请参阅 eb local

~/remote-docker$ eb local run --port 5000

(可选)当您的容器正在运行时,可使用 eb local open 命令在 Web 浏览器中查看您的应用程序。也可以在 Web 浏览器中打开 http://localhost:5000/

~/remote-docker$ eb local open

将远程 Docker 映像部署到 Elastic Beanstalk

在本地测试过容器后,将其部署到 Elastic Beanstalk 环境。Elastic Beanstalk 使用 Dockerrun.aws.json 文件来拉取和运行映像。

使用 EB CLI 创建环境并部署映像。

~/remote-docker$ eb create environment-name

启动环境后,可使用 eb open 在 Web 浏览器中查看该环境。

~/remote-docker$ eb open

清除

Elastic Beanstalk 使用完毕时,您可以终止您的环境。Elastic Beanstalk 会终止与环境关联的所有 AWS 资源,例如 Amazon EC2 实例数据库实例负载均衡器、安全组和警报

终止 Elastic Beanstalk 环境

  1. 打开 Elastic Beanstalk 控制台

  2. 导航到您的环境的管理页

  3. 选择操作,然后选择终止环境

  4. Confirm Termination (确认终止) 对话框中,键入环境名称,然后选择 Terminate (终止)

利用 Elastic Beanstalk,可以随时为您的应用程序轻松创建新环境。

或者,使用 EB CLI:

~/remote-docker$ eb terminate environment-name