发布于 2026-01-06 0 阅读
0

如何将 Flask 应用 Docker 化 🐳🚀

如何将 Flask 应用 Docker 化 🐳🚀

介绍:

在瞬息万变的软件开发领域,高效部署和可扩展性是成功的关键因素。Docker 作为容器化平台,已成为简化部署流程的强大解决方案。本博客将指导您完成 Flask 应用的 Docker 化步骤,揭开 Dockerfile 中每一行代码背后的奥秘。🎩✨


了解 Docker:

Docker 是一个开源平台,旨在自动化部署应用程序到轻量级、可移植的容器中。容器封装了应用程序及其依赖项,确保在不同环境中的一致性。这消除了臭名昭著的“在我机器上运行正常”的问题,简化了部署流程,使其成为现代开发中不可或缺的工具。🌐📦

了解 Docker


为什么要将应用程序容器化?

容器化具有诸多优势,例如:

  1. 隔离性:容器封装应用程序及其依赖项,避免与宿主系统或其他应用程序发生冲突。🛡️📦

  2. 一致性:容器确保应用程序在从开发到生产的各种环境中以相同的方式运行。🔄🌍

  3. 效率:容器轻量级且共享宿主机操作系统内核,从而实现更快的启动速度和更高效的资源利用率。⚙️💨


如何设置项目

基本目录结构

完成以下步骤后,我们的应用程序目录结构将如下所示:



Flask-app/
├── docker-compose.yml
├── Dockerfile
├── README.md
├── requirements.txt
└── src/
    ├── app.py
    └── templates/
        ├── error.html
        └── index.html


Enter fullscreen mode Exit fullscreen mode

供您参考,您可以查看此项目的 GitHub 代码库。
[GitHub 链接:https://github.com/panchanandevops/Building-Dockerfiles/tree/main/Flask-app ]


Flask应用程序的Dockerfile

在这个项目中,我们将使用一个简单的 Dockerfile (单阶段)和一个 docker-compose.yaml 文件。

请注意:此 Dockerfile 仅用于开发学习目的。因此,我们将在 docker-compose.yaml 中使用绑定挂载类型的卷。


以下是我们的 Flask 应用的 Dockerfile:



FROM python:3.11-alpine

# Set up environment variables for Python
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Create and set the working directory
WORKDIR /app

# Copy only the requirements file first to leverage Docker caching
COPY requirements.txt .

# Install dependencies
RUN pip install --no-cache-dir -r requirements.txt

# Copy the entire application code
COPY . .

# Expose the port your application will run on
EXPOSE 8080

# Specify the command to run on container start
CMD ["python", "src/app.py"]


Enter fullscreen mode Exit fullscreen mode

以下是我们的 Flask 应用的 docker-compose.yaml 文件:



version: '3'

services:
  python-app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    volumes:
      - .:/app:ro


Enter fullscreen mode Exit fullscreen mode

Dockerfile 解析:

让我们逐行分析提供的 Dockerfile 文件:



FROM python:3.11-alpine


Enter fullscreen mode Exit fullscreen mode

这行代码将基础镜像设置为基于 Alpine Linux 的 Python 3.11,Alpine Linux 是一个以资源占用小而闻名的轻量级发行版。🏗️🐍



ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1


Enter fullscreen mode Exit fullscreen mode

这些代码行设置了环境变量,以提升 Python在容器内的性能。⚙️📊



WORKDIR /app


Enter fullscreen mode Exit fullscreen mode

容器内的工作目录设置为/app。📂💼



COPY requirements.txt .


Enter fullscreen mode Exit fullscreen mode

将requirements.txt文件复制到工作目录,以便 Docker 缓存依赖项安装,从而提高效率。📦📋



RUN pip install --no-cache-dir -r requirements.txt


Enter fullscreen mode Exit fullscreen mode

安装requirements.txt中列出的 Python 依赖项,但不使用缓存,以确保获取最新版本。🚀🔧



COPY . .


Enter fullscreen mode Exit fullscreen mode

将整个应用程序代码复制到容器的工作目录中。📂📄



EXPOSE 8080


Enter fullscreen mode Exit fullscreen mode

通知 Docker 容器内的应用程序将使用8080 端口。🔌🔢



CMD ["python", "src/app.py"]


Enter fullscreen mode Exit fullscreen mode

指定容器启动时要运行的命令,以启动 Flask 应用程序。🚀🏁


如何构建 Docker 镜像:

构建 Docker 镜像对于容器化 Flask 应用至关重要。它涉及将应用及其依赖项打包到一个单独的、可移植的镜像中。要构建 Docker 镜像,请打开终端并导航到包含 Dockerfile 和应用代码的目录。执行以下命令:



docker build -t panchanandevops/flask-app:v1.0.0 .


Enter fullscreen mode Exit fullscreen mode

以下是该命令各部分的作用:

  • docker build:启动构建过程。🛠️
  • -t panchanandevops/flask-app:v1.0.0:为图片添加名称和版本号。您可以根据个人喜好调整名称和版本号。🏷️
  • .:指定构建上下文,指示Dockerfile和应用程序代码的位置。📂🚀

这条命令会将你的 Flask 应用编译成 Docker 镜像,使其可以部署。🚢🎉


如何将镜像作为容器运行:

成功构建 Docker 镜像后,下一步是将其作为容器运行。这需要创建镜像实例,该实例将作为 Flask 应用的运行环境。在终端中执行以下命令:



docker run --name my-flask-server -p 8080:8080 panchanandevops/flask-app:v1.0.0


Enter fullscreen mode Exit fullscreen mode

命令解析:

  • docker run:启动容器创建过程。🚀🏗️
  • --name my-flask-server:为正在运行的容器指定一个名称,以便于识别。🏷️🤖
  • -p 8080:8080:将主机端口 8080 映射到容器端口 8080,允许外部访问。🔗🔢
  • panchanandevops/flask-app:v1.0.0:指定用于创建容器的镜像。🏗️🖼️

这条命令会在 Docker 容器内启动你的 Flask 应用,使其可以通过主机 8080 端口访问。🌐🚀

在浏览器中访问http://localhost:8080/即可查看 Flask 应用。🌐🚀


如何停止和删除容器:

有时,您可能需要停止并删除正在运行的 Docker 容器。请执行以下命令:



docker stop my-flask-server
docker rm my-flask-server


Enter fullscreen mode Exit fullscreen mode

命令分解:

  • docker stop my-flask-server:停止名为“my-flask-server”的正在运行的容器。🛑🏗️
  • docker rm my-flask-server:删除名为“my-flask-server”的已停止容器。🗑️🏗️

什么是 Docker Compose?

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。借助 Compose,您可以在单个文件中定义多容器环境,从而更轻松地管理、扩展和部署应用。它提供了一种简单直接的方式来配置应用的服务、网络和卷。接下来,我们将深入探讨如何利用 Docker Compose 来管理我们的 Flask 应用。🧩📋


配置 Docker Compose:

1. 创建docker-compose.yml文件:

docker-compose.yml在项目根目录下创建一个名为 `.conf` 的新文件。该文件将定义应用程序所需的服务、网络和卷。以下是一个基本示例:



version: '3'

services:
  flask-app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    volumes:
      - .:/app:ro


Enter fullscreen mode Exit fullscreen mode

2. 理解docker-compose.yml

  • version: '3' : 指定 Docker Compose 文件格式的版本。

  • 服务:定义构成应用程序的服务。

  • flask-app:服务名称。您可以自定义此名称。

  • build:用于构建 Docker 镜像的配置。

  • context:构建上下文,与docker build命令中的上下文相同。

  • dockerfile:用于构建镜像的 Dockerfile。

  • ports:将容器的端口映射到主机。

  • volumes:指定用于绑定挂载的卷,确保代码更改实时反映。

3. 使用 Docker Compose 构建和运行:

打开终端并运行以下命令,使用 Docker Compose 构建并运行您的应用程序:



docker-compose up -d


Enter fullscreen mode Exit fullscreen mode

命令解析:

  • docker-compose up:构建、(重新)创建、启动和连接到服务的容器。
  • -d:在后台运行容器。

4. 访问您的 Flask 应用:

在浏览器中访问http://localhost:8080/,您应该可以看到您的 Flask 应用正在运行。

5. 停止和移除容器:

要停止并删除 Docker Compose 创建的容器,请运行:



docker-compose down


Enter fullscreen mode Exit fullscreen mode

docker-compose.yml此命令将停止并删除您在.中定义的容器、网络和卷。


结论:

在这次 Docker 化 Flask 之旅中,您已经掌握了通过将应用程序封装在 Docker 容器中来实现现代软件部署的方法。通过确保一致性和可移植性,您现在可以应对各种不同的环境。

随着您深入了解容器化技术,探索Docker 的高级功能,优化您的 Dockerfile,并将 Docker 集成到强大的 CI/CD 流水线中。考虑环境配置,实施监控和日志记录,以构建可用于生产环境的设置。

本指南标志着您 Docker 和 Flask 探索之旅的开始。充分利用容器化的多功能性,实现高效、可扩展且轻松的部署。祝您容器化之旅愉快! 🎉😊

文章来源:https://dev.to/sre_panchanan/how-to-dockerize-a-flask-application-4mi