Overview
本教程向你展示如何对使用MongoDB Atlas 的Flask应用程序进行容器化并将其部署到Azure容器应用程序。 Azure容器应用是一个无服务器平台,可简化容器化应用程序的部署和管理,而无需管理基础架构。
Tutorial
本教程介绍如何完成以下任务:
验证先决条件
设置 Flask应用程序
创建 Dockerfile
创建Azure容器注册表
构建并推送Docker映像
创建和部署Azure容器应用
设置 Flask应用程序
通过运行以下命令来克隆 Flask应用程序存储库:
git clone https://github.com/mongodb-developer/atlas-flask-azure-demo
使用Atlas用户界面,在名为 bookshelf 的数据库中创建 books集合。使用以下示例文档作为指南,在集合中创建一些文档:
{ "book": "The Great Gatsby", "pages": 180, }, { "book": "Slaughterhouse-Five", "pages": 215, }, { "book": "If Beale Street Could Talk", "pages": 197, }
要启动应用程序,请导航到工作目录并运行以下命令:
flask run
使用浏览器或API测试工具访问权限/books 端点以检索您创建的文档。
创建 Dockerfile
Dockerfile 包含构建Docker映像的命令。在工作目录中创建一个名为Dockerfile 的文件,然后向其中添加以下内容:
FROM python:3.9-slim-buster WORKDIR /azurecontainerappsdemo COPY ./config/requirements.txt /azurecontainerappsdemo/ RUN pip install -r requirements.txt COPY . /azurecontainerappsdemo/ ENV FLASK_APP=app.py EXPOSE 5000 CMD ["flask", "run", "--host=0.0.0.0"]
将 requirements.txt文件移至名为 config 的新文件夹中,确保Docker可以在构建进程中找到并复制该文件。
此 Dockerfile 执行以下任务:
使用
python:3.9-slim-buster作为基础映像设置工作目录
复制并安装Python依赖项
复制应用程序文件
公开端口 5000
配置 Flask 以接受来自任何网络接口的连接
将以下代码添加到 app.py文件的底部,以确保 Flask 在所有网络接口上运行:
if __name__ == '__main__': app.run(host='0.0.0.0', debug=True)
在部署到Azure之前,您可以验证Docker映像是否可以在本地运行。通过运行以下命令来构建映像:
docker build --tag azurecontainerappsdemo .
然后,通过运行以下命令运行带有MongoDB连接字符串的容器:
docker run -d -p 5000:5000 -e "CONNECTION_STRING=<MONGODB_ATLAS_URI_STRING_HERE>" azurecontainerappsdemo
容器运行后,请在浏览器中通过 http://localhost:5000访问权限应用程序。
创建Azure容器注册表
登录Azure门户并导航到“容器注册表”服务。单击 Create 并指定注册表的以下设置:
资源组:资源群组的名称
注册表名称:作为您的登录URL
位置:注册表的位置
注意
创建容器应用时,必须使用相同的资源组和位置值。
单击 Review and Create(连接)。
部署完成后,打开 Visual Studio Code。确保安装Docker扩展。
导航到 Registries,登录您的Azure帐户,然后连接您的注册表。
运行以下命令,登录Azure容器注册表:
docker login <azure registry url>
提示
您可以在容器注册表的 Access Keys 部分找到用户名和密码。启用 Admin Access 以查看凭证。
重要
如果您使用Windows,请右键单击以将凭证粘贴到终端中,以避免错误。
构建并推送Docker映像
完成以下步骤,构建Docker映像并将其推送到Azure容器注册表。选择与您的操作系统和架构相对应的标签页:
通过运行以下命令来安装 Buildx:
docker buildx install
通过运行以下命令启用 Buildx:
docker buildx create --use
通过运行以下命令来构建 linux/amd64 平台的映像:
docker buildx build --platform linux/amd64 --t <azure registry url>/<image name>:<image tag> --output type=docker .
运行以下命令,将映像推送到Azure容器注册表:
docker push <azure registry url>/<image name>:<image tag>
通过运行以下命令来构建映像:
docker build --t <azure registry url>/<image name>:<image tag> --output type=docker .
通过运行以下命令来推送映像:
docker push <azure registry url>/<image name>:<image tag>
通过运行以下命令来构建映像:
docker build --t <azure registry url>/<image name>:<image tag> .
通过运行以下命令来推送映像:
docker push <image name>:<image tag>
要验证推送是否成功,请导航到Azure门户中的“容器注册表”,然后单击 Repositories 以查看映像。
创建和部署Azure容器应用
导航到Azure门户中的容器应用服务,然后单击 Create。
在 Basics 部分中,为您的容器应用配置以下设置:
订阅:您的Azure订阅
资源组:与您用于容器注册表的资源群组相同
容器应用名称
地区:与您用于容器注册表的地区相同
在 App Settings 部分配置以下设置:
取消选中 Use quickstart image
选择 Azure Container Registry 作为图像源
输入注册表、映像和标签信息
将MongoDB Atlas连接字符串添加为名为 CONNECTION_STRING的环境变量。
启用入口并配置以下入口设置:
入口流量:接受来自任何地方的流量
入口类型: HTTP
交通:汽车
不安全连接:允许
目标端口:5000
单击 Review and Create。部署完成后,单击 Go to Resource,然后单击 Application URL 以访问权限已部署的应用程序。
将 /books 附加到URL以查看之前从MongoDB Atlas数据库添加的图书。
其他资源
若要查看本教程的完整代码,请参阅 GitHub 上的 azurecontainerappdemo存储库。