在 macOS 上的 Docker 容器中开发 Flask 应用程序

当您刚开始使用容器时,将 Docker 添加到您的 Python 和 Flask 开发环境中可能会感到困惑。让我们快速安装和配置 Docker,以便在您的本地系统上开发 Flask 网络应用程序。

我们的工具

本教程是为 Python 3 编写的。它适用于 Python 2,但我尚未使用即将弃用的 2.7 版本对其进行测试。

Mac 版 Docker 是必需的。我推荐稳定版本,除非您对边缘通道有明确的用途。

在 Docker 容器中,我们将使用:

  • Python 3,特别是来自 Docker Hub 的 slim-3.6.5 版本
  • Flask 版本 1.0.2

Dockerfile 和 Flask 应用程序的所有代码都可以在 GitHub 上的 blog-code-examples 存储库的 docker-flask-mac 目录下的 MIT 许可下开源获得。将代码尽可能多地用于您自己的目的。

在 macOS 上安装 Docker

我们需要先安装 Docker,然后才能启动我们的 Docker 容器。如果您已经安装并运行了 Docker for Mac,请随时跳至下一节。

在您的 Mac 上,下载适用于 Mac 安装程序的 Docker 社区版 (CE)。

下载适用于 Mac 的 Docker 社区版。

在 Finder 中找到新下载的安装文件,然后双击该文件。按照安装过程进行操作,其中包括向安装程序授予管理权限。

安装完成后打开终端。使用--version 标志测试您的 Docker 安装:

docker --version

如果 Docker 安装正确,您应该会看到以下输出:

Docker version 18.03.1-ce, build 9ee9f40

请注意,Docker 通过您可以在菜单栏中找到的系统代理运行。

菜单栏中的 Docker 代理。

我发现 Docker 代理占用了我 Macbook Pro 上一些宝贵的电池寿命。如果我不在开发并且需要最大电池时间,我将关闭代理并在我准备好编码时重新启动它。

现在 Docker 已安装,让我们开始运行容器并编写我们的 Flask 应用程序。

Docker文件

Docker 需要知道我们在容器中需要什么,这就是 Dockerfile 的用武之地。

# this is an official Python runtime, used as the parent image
FROM python:3.6.5-slim

# set the working directory in the container to /app
WORKDIR /app

# add the current directory to the container as /app
ADD . /app

# execute everyone's favorite pip command, pip install -r
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# unblock port 80 for the Flask app to run on
EXPOSE 80

# execute the Flask app
CMD ["python", "app.py"]

保存 Dockerfile,以便我们可以使用文件的完整内容运行下一个命令。在命令行运行:

docker build -t flaskdock .

上面的docker build文件使用了-t标志来标记名称为flaskdock的图像。

如果构建成功,我们可以使用docker image ls 命令看到图像。现在试试看:

docker image ls

然后我们应该在图像列表中看到我们的标签名称:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
flaskdock           latest              24045e0464af        2 minutes ago       165MB

我们的图像已准备好作为容器加载,因此我们可以编写一个快速的 Flask 应用程序,我们将通过在容器中运行它来测试我们的环境。

编写一个简单的 Flask 应用程序

是时候组合一个超级简单的“Hello, World!”了Flask 网络应用程序,用于在我们的 Docker 容器中测试运行 Python 代码。在当前项目目录中,创建一个名为 app.py 的文件,内容如下:

from flask import Flask, Response


app = Flask(__name__)


@app.route("/")
def hello():
    return Response("Hi from your Flask app running in your Docker container!")


if __name__ == "__main__":
    app.run("0.0.0.0", port=80, debug=True)

app.py 中的上述 7 行代码(不包括空白的 PEP8 兼容行)允许我们的应用程序在使用 Flask 开发服务器运行时返回一条简单消息。

我们只需要一个文件来指定我们的 Flask 依赖项。在与 requirements.txt 相同的目录中创建一个 app.py 文件:

flask==1.0.2

确保 app.pyrequirements.txt 文件都已保存,然后我们可以尝试编写代码。

运行容器

现在我们已经有了图像以及文件中的 Python 代码,我们可以使用 docker run 命令将图像作为容器运行。执行以下命令,确保将卷的绝对路径替换为您自己的目录。

docker run -p 5000:80 --volume=/Users/matt/devel/py/flaskdocker:/app flaskdock

如果您收到错误python: can't open file 'app.py': [Errno 2] No such file or directory,那么您可能忘记了将/Users/matt/devel/py/flaskdocker 放入项目文件所在的目录,尤其是app.py,位于。

Flask 应用程序响应来自 Docker 容器内的请求。

当您看到一个简单的基于文本的 HTTP 响应时,一切正常,就像上面我的 Chrome 浏览器屏幕截图中显示的那样。

下一步是什么?

我们刚刚安装了 Docker 并配置了一个 Flask 应用程序以在容器内运行。这只是如何将 Docker 集成到您的工作流中的开始。我强烈建议阅读 Django with PostgreSQL quickstart,它将向您介绍 Docker Swarm 以及核心 Docker 容器服务。

接下来查看 Docker 和部署页面以获取更多相关教程。

有问题吗?在 Twitter@fullstackpython 或@mattmakai 上通过 Full Stack Python 存储库上的 GitHub 问题票让我知道。

您是否在这篇博文中发现了拼写错误、语法问题或其他令人困惑的地方?在 GitHub 上分叉此页面的源代码并提交带有修复的拉取请求或在 GitHub 上提交问题单。

赞(0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏