使用 AWS ECS 和 Docker 部署容器化 Flask 应用程序
- 一个AWS 账户。
- 已安装并配置AWS CLI (具有足够的权限来采取我们需要采取的所有操作)。
- Docker(Docker 命令可能需要 sudo,或者您可以将当前用户添加到 docker 组)。
- 该项目的代码。您可以运行
git clone https://github.com/linuxacademy/cda-2018-flask-app.git && cd cda-2018-flask-app && git checkout ecs-master
- (确保切换到另一个分支,因为它包含特定于 ECS 的代码)
sudo docker image ls
检查当前的 Docker 设置。如果这是一个新的 Docker 设置,此命令可能不会显示太多信息。但是,如果 Docker 已安装一段时间,可能已经有一些镜像挂起。接下来,让我们使用 查看存储库中的 Dockerfile cat Dockerfile
。我们的 Dockerfile 非常简单。让我们逐行检查一下:
FROM python:3.5-slim
- 我们以 Python 3.5 镜像作为 Docker 镜像的基础。这意味着在进行任何自定义之前,我们可以免费获得 Python3.5 及其包管理器 pip。MAINTAINER
fernando@linuxacademy.com - 此行声明了图像的作者是谁。您可以将其更改为您的电子邮件。此格式不再使用,因此您可能还想将其更改为非弃用的 LABEL 指令,如下所示:LABEL maintainer="fernando@linuxacademy.com"
USER root
- 这告诉我们哪个用户应该运行映像和任何命令,例如 Dockerfile 后面的 CMD 或 RUN 部分中的命令。WORKDIR /app
- 这将为其他一些命令设置工作目录,例如 CMD 或 RUN 部分中的命令,这些命令稍后将在 Dockerfile 中运行。ADD . /app
- 这会将当前目录(用 . 指定)中的所有文件和目录复制到该/app
目录。RUN pip install --trusted-host pypi.python.org -r requirements.txt
- 这将使用 pip 和提供的 requirements.txt 文件安装我们应用程序的要求。EXPOSE 80
- 这告诉 Docker 在运行时要监听哪些端口。ENV NAME World
- 这会将名为 NAME 的环境变量设置为 World 的值。CMD ["python", "app.py"]
- 这将设置运行图像时要执行的命令python app.py
(运行我们的 Flask 应用程序所需的命令)
sudo docker build -t cda-flask-app .
然后让我们测试我们的映像。首先,运行curl localhost:80
以确保您没有在本地提供任何东西。你什么也没得到?太棒了,这就是我们想要的。接下来,运行此命令以在本地运行您的 Docker 映像sudo docker run -p 80:80 cda-flask-app
。现在再次运行此命令:curl localhost:80
或者打开 Web 浏览器并输入 localhost
到 Web 浏览器的 URL 栏中。您现在应该看到类似以下内容:
aws ecr create-repository --repository-name cda-penguin-app1123
aws ecr get-login --region us-east-1 --no-include-email
- 通过运行确保我们的图像在本地
docker image ls
- 通过运行标记图像
docker tag cda-flask-app:latest ACCT_ID.dkr.ecr.us-east-1.amazonaws.com/
(其中 ACCT_ID 是您自己的 AWS 账户 ID) - 将图像推送到 AWS ECR
docker push ACCT_ID.dkr.ecr.us-east-1.amazonaws.com/hello-world
(再次使用您自己的 AWS 账户 ID 代替 ACCT_ID)
















- 自定义 Flask 应用程序,使其除了显示可爱的企鹅网站之外还能做其他事情
- 根据您自己的应用程序的需求,配置使用 ECS 时可用的许多其他设置
- 部署大量具有不同要求、其他编程语言等的酷容器
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~