当您刚开始使用容器时,将 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)。
在 Finder 中找到新下载的安装文件,然后双击该文件。按照安装过程进行操作,其中包括向安装程序授予管理权限。
安装完成后打开终端。使用--version
标志测试您的 Docker 安装:
docker --version
如果 Docker 安装正确,您应该会看到以下输出:
Docker version 18.03.1-ce, build 9ee9f40
请注意,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.py
和 requirements.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
,位于。
当您看到一个简单的基于文本的 HTTP 响应时,一切正常,就像上面我的 Chrome 浏览器屏幕截图中显示的那样。
下一步是什么?
我们刚刚安装了 Docker 并配置了一个 Flask 应用程序以在容器内运行。这只是如何将 Docker 集成到您的工作流中的开始。我强烈建议阅读 Django with PostgreSQL quickstart,它将向您介绍 Docker Swarm 以及核心 Docker 容器服务。
接下来查看 Docker 和部署页面以获取更多相关教程。
有问题吗?在 Twitter@fullstackpython 或@mattmakai 上通过 Full Stack Python 存储库上的 GitHub 问题票让我知道。
您是否在这篇博文中发现了拼写错误、语法问题或其他令人困惑的地方?在 GitHub 上分叉此页面的源代码并提交带有修复的拉取请求或在 GitHub 上提交问题单。