如何在 Docker 容器中运行 Flask 应用

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本教程中,我们将探索在 Docker 容器中运行 Flask 应用程序的过程。我们将介绍 Docker 的基础知识,构建一个 Flask 应用程序,然后将 Flask 应用程序容器化,以利用 Docker 提供的优势。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/run -.-> lab-415825{{"如何在 Docker 容器中运行 Flask 应用"}} docker/ls -.-> lab-415825{{"如何在 Docker 容器中运行 Flask 应用"}} docker/ps -.-> lab-415825{{"如何在 Docker 容器中运行 Flask 应用"}} docker/start -.-> lab-415825{{"如何在 Docker 容器中运行 Flask 应用"}} docker/stop -.-> lab-415825{{"如何在 Docker 容器中运行 Flask 应用"}} docker/create -.-> lab-415825{{"如何在 Docker 容器中运行 Flask 应用"}} docker/pull -.-> lab-415825{{"如何在 Docker 容器中运行 Flask 应用"}} docker/build -.-> lab-415825{{"如何在 Docker 容器中运行 Flask 应用"}} end

了解 Docker

Docker 是一个广受欢迎的开源平台,它允许开发者在容器化环境中构建、部署和运行应用程序。容器是轻量级、独立且可执行的软件包,其中包含运行应用程序所需的一切,包括代码、运行时环境、系统工具和库。

什么是 Docker?

Docker 是一个旨在通过使用容器来简化应用程序创建、部署和运行的工具。容器使开发者能够将应用程序及其所需的所有部件(如库和其他依赖项)打包在一起,并作为一个包进行交付。

Docker 架构

Docker 架构由以下组件组成:

graph TD A[Docker 客户端] --> B[Docker 守护进程] B --> C[Docker 镜像] B --> D[Docker 容器] B --> E[Docker 注册表]
  • Docker 客户端:用于与 Docker 系统进行交互的用户界面。
  • Docker 守护进程:管理 Docker 对象(如图像、容器、网络和卷)的后台进程。
  • Docker 镜像:用于创建 Docker 容器的蓝图。
  • Docker 容器:Docker 镜像的可运行实例。
  • Docker 注册表:用于存储和分发 Docker 镜像的仓库。

使用 Docker 的好处

  1. 一致的环境:无论底层基础设施如何,Docker 都能确保应用程序以相同的方式运行。
  2. 可扩展性:Docker 容器可以轻松地扩展或缩小以满足不断变化的需求。
  3. 可移植性:Docker 容器可以在任何安装了 Docker 的系统上运行,便于在不同环境之间迁移应用程序。
  4. 高效性:Docker 容器轻量级,比传统虚拟机使用的资源更少。
  5. 隔离性:Docker 容器提供高度隔离,确保应用程序在安全且一致的环境中运行。

开始使用 Docker

要开始使用 Docker,你需要在系统上安装 Docker 引擎。你可以从官方网站(https://www.docker.com/get-started)下载 Docker,并按照针对你操作系统的安装说明进行操作。

安装好 Docker 后,你就可以开始构建和运行 Docker 容器了。以下是一个使用 Ubuntu 镜像运行 Docker 容器的简单示例:

docker run -it ubuntu

此命令将从 Docker 注册表中拉取 Ubuntu 镜像,创建一个新容器,并在容器内启动一个交互式 shell 会话。

构建一个 Flask 应用程序

Flask 是一个广受欢迎的 Python 网络框架,它轻量级、灵活且易于使用。在本节中,我们将逐步介绍构建一个简单 Flask 应用程序的过程。

设置开发环境

首先,让我们设置开发环境。在这个示例中,我们将使用 Python 3.9 和 Flask 2.0.2。

## 安装 Python 3.9
sudo apt-get update
sudo apt-get install -y python3.9

## 安装 Flask
pip3 install flask==2.0.2

创建一个 Flask 应用程序

现在,让我们创建一个简单的 Flask 应用程序。创建一个名为 app.py 的新文件,并添加以下代码:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, LabEx!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

在这个示例中,我们从 flask 模块导入 Flask 类,创建一个新的 Flask 实例,并为根 URL(/)定义一个路由,该路由返回字符串“Hello, LabEx!”。最后,我们使用 app.run() 方法运行应用程序。

运行 Flask 应用程序

要运行 Flask 应用程序,请在终端中执行以下命令:

python3 app.py

这将启动 Flask 开发服务器,并使你的应用程序在 http://localhost:5000/ 上可用。

添加功能

你可以通过定义额外的路由并添加业务逻辑,轻松地为你的 Flask 应用程序添加更多功能。例如,你可以创建一个接受用户输入、执行一些处理并返回响应的路由。

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, LabEx!'

@app.route('/greet', methods=['POST'])
def greet():
    name = request.form['name']
    return f'Hello, {name}!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

在这个示例中,我们添加了一个新的路由 /greet,它接受一个带有 name 参数的 POST 请求。然后,应用程序返回一个包含提供的名字的问候消息。

将 Flask 应用程序容器化

既然我们已经有了一个基本的 Flask 应用程序,现在让我们使用 Docker 将其容器化。将应用程序容器化可以让我们将它及其依赖项打包成一个自包含的单元,便于部署和扩展。

创建一个 Dockerfile

为了将我们的 Flask 应用程序容器化,我们需要创建一个 Dockerfile。Dockerfile 是一个文本文件,其中包含用户在命令行上可以调用的所有命令,用于组装镜像。

创建一个名为 Dockerfile 的新文件,并添加以下内容:

## 使用官方 Python 镜像作为基础镜像
FROM python:3.9-slim

## 将工作目录设置为 /app
WORKDIR /app

## 将需求文件复制到容器中
COPY requirements.txt.

## 安装 Python 依赖项
RUN pip install --no-cache-dir -r requirements.txt

## 将 Flask 应用程序代码复制到容器中
COPY app.py.

## 暴露 Flask 应用程序将运行的端口
EXPOSE 5000

## 设置运行 Flask 应用程序的命令
CMD ["python", "app.py"]

在这个 Dockerfile 中,我们:

  1. 使用官方的 Python 3.9 slim 镜像作为基础镜像。
  2. 将工作目录设置为 /app
  3. requirements.txt 文件复制到容器中。
  4. 安装 Python 依赖项。
  5. app.py 文件复制到容器中。
  6. 为 Flask 应用程序暴露端口 5000。
  7. 设置运行 Flask 应用程序的命令。

构建 Docker 镜像

现在,让我们为我们的 Flask 应用程序构建 Docker 镜像。在终端中,运行以下命令:

docker build -t labex-flask-app.

此命令将使用当前目录中的 Dockerfile 构建一个标签为 labex-flask-app 的 Docker 镜像。

运行 Docker 容器

镜像构建完成后,我们可以在 Docker 容器中运行 Flask 应用程序:

docker run -p 5000:5000 labex-flask-app

此命令将基于 labex-flask-app 镜像启动一个新容器,并将主机上的端口 5000 映射到容器中的端口 5000。

现在你可以在 http://localhost:5000/ 访问 Flask 应用程序。

部署 Docker 镜像

一旦你的 Flask 应用程序被容器化,你可以将 Docker 镜像部署到容器注册表(如 Docker Hub 或私有注册表),然后将应用程序部署到生产环境中。

总结

在本教程结束时,你将对如何使用 Docker 将 Flask 应用程序容器化有扎实的理解。你将能够为你的 Flask 应用程序构建一个 Docker 镜像,在 Docker 容器中运行它,并利用 Docker 的优势进行 Flask 开发和部署。