本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Docker 平台分支
Amazon Elastic Beanstalk 可通过生成 Dockerfile
中描述的映像或拉取远程 Docker 映像来启动 Docker 环境。如果您要部署远程 Docker 映像,则无需包含 Dockerfile
。相反,如果您也使用 Docker Compose,则使用 docker-compose.yml
文件,该文件会指定要使用的映像和其他配置选项。如果您没有将 Docker Compose 与 Docker 环境结合使用,请改为使用 Dockerrun.aws.json
文件。
主题
先决条件
本教程假设您对基本 Elastic Beanstalk 操作、Elastic Beanstalk 命令行界面(EB CLI)和 Docker 有一定了解。如果尚不了解,请按照开始使用 Elastic Beanstalk中的说明操作以启动您的第一个 Elastic Beanstalk 环境。本教程使用 EB CLI,但您也可以使用 Elastic Beanstalk 控制台创建环境并上传应用程序。
要完成本教程,您需要做以下 Docker 组件:
要了解有关在 Elastic Beanstalk 平台上配置 Docker 环境的更多信息,请参阅同一章中的Docker 配置。
容器化 Elastic Beanstalk 应用程序
对于本示例,我们从 中创建了示例 Flask 应用程序的 Docker 映像将 Flask 应用程序部署到 Elastic Beanstalk 该应用程序包含一个主文件 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-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 create 命令创建环境并部署应用程序。
~/eb-docker-flask$
eb create
environment-name
启动环境后,使用 eb open 命令在 Web 浏览器中查看它。
~/eb-docker-flask$
eb open
测试远程 Docker 映像
接下来,我们将生成上一节中的 Flask 应用程序的 Docker 映像并将其推送至 Docker Hub。
注意
以下步骤将创建一个公开可用的 Docker 映像。
您将使用本地安装的 Docker 中的 Docker 命令以及 Docker Hub 凭据。有关更多信息,请参阅上部分中的先决条件。
构建并推送我们的映像后,如果您将 Docker Compose 与 Docker 环境结合使用,我们就可以使用 docker-compose.yml
文件将映像部署到 Elastic Beanstalk。如果您没有将 Docker Compose 与 Docker 环境结合使用,请改为使用 Dockerrun.aws.json
文件。要生成 Flask 应用程序的 Docker 映像并将其推送至 Docker Hub,请运行以下命令。我们将使用与上一示例相同的目录,但您可在您的应用程序代码中使用任何目录。为 docker-id
输入您的 Docker ID,以登录到 Docker Hub。
~/eb-docker-flask$
docker build -t
~/eb-docker-flask$docker-id
/beanstalk-flask:latest .docker push
docker-id
/beanstalk-flask:latest
注意
在推送映像之前,您可能需要运行 docker login。如果您运行不带参数的命令,系统将提示您输入 Docker Hub 凭据。
如果您正在使用 Docker Compose 工具管理 Docker 环境,现在您只能使用 docker-compose.yml
文件部署您的应用程序。要了解有关 docker-compose.yml
文件的更多信息,请参阅。Docker 配置
如果您没有使用 Docker Compose,请改为使用 Dockerrun.aws.json
文件。有关更多信息,请参阅使用 Dockerrun.aws.json v1 进行部署(无需 Docker Compose)。
创建一个新目录,并创建一个 docker-compose.yml
文件。
例 ~/remote-docker/docker-compose.yml
version: '3.8' services: beanstalk-flask: image: "
username
/beanstalk-flask" ports: - "80:5000"
如果您并未使用 Docker Compose 工具管理 Docker 环境,现在您只能使用 Dockerrun.aws.json
文件部署您的应用程序。要了解有关 Dockerrun.aws.json
文件的更多信息,请参阅。Docker 平台的配置(不含 Docker Compose)
创建一个新目录,并创建一个 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 环境中。如果您使用的是 Docker Compose,Elastic Beanstalk 会使用 docker-compose.yml
文件来提取和运行您的映像。否则,Elastic Beanstalk 会改用 Dockerrun.aws.json
。
使用 EB CLI 创建环境并部署映像。
~/remote-docker$
eb create
environment-name
启动环境后,可使用 eb open 在 Web 浏览器中查看该环境。
~/remote-docker$
eb open
清除
Elastic Beanstalk 使用完毕时,您可以终止您的环境。Elastic Beanstalk 会终止与环境关联的所有 Amazon 资源,例如 Amazon EC2 s实例、数据库实例、负载均衡器、安全组和警报。
终止 Elastic Beanstalk 环境
打开 Elastic Beanstalk 控制台
,然后在 Regions(区域)列表中选择您的 Amazon Web Services 区域。 -
在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。
注意
如果您有多个环境,请使用搜索栏筛选环境列表。
-
选择 Actions(操作),然后选择 Terminate environment(终止环境)。
-
使用屏幕上的对话框确认环境终止。
利用 Elastic Beanstalk,可以随时为您的应用程序轻松创建新环境。
或者,使用 EB CLI:
~/remote-docker$ eb terminate environment-name