首页 > 后端开发 > Python教程 > 优化 Flask Dockerfile:DevOps 和开发人员的最佳实践

优化 Flask Dockerfile:DevOps 和开发人员的最佳实践

DDD
发布: 2025-01-05 16:10:42
原创
547 人浏览过

?介绍

欢迎来到 DevOps 的世界! ?今天,我们将深入探讨任何 DevOps 工程师的一项基本技能:针对 Flask 应用程序优化 Dockerfile。虽然初学者 DevOps 工程师通常专注于掌握基本的 Dockerfile 语法,但经验丰富的工程师知道真正的专业知识在于优化 - 制作高效、安全且可用于生产的 Dockerfile。

在本博客中,我们将逐步介绍构建简单 Flask 应用程序的过程。首先,我们将创建一个基本的 Dockerfile,然后将其细化为优化版本,比较两者以了解差异。无论您是初学者还是希望提高 Dockerfile 技能,本指南都适合每个人。

让我们开始吧! ?️


?先决条件

在我们深入为 Flask 应用程序编写和优化 Dockerfile 之前,请确保您具备以下先决条件:

  1. Flask 的基本了解

    熟悉创建简单的 Flask 应用程序将帮助您无缝地跟进。

  2. Docker 已安装

    确保 Docker 已安装并在您的系统上运行。您可以从 Docker 网站下载。

  3. Python 环境设置

    您的系统上安装了 Python 3.x,以及用于管理 Python 包的 pip。

  4. 代码编辑器

    使用您选择的任何代码编辑器,例如 Visual Studio Code、PyCharm 或 Sublime Text。

  5. 烧瓶已安装

    使用以下命令在 Python 环境中安装 Flask:

   pip install flask
登录后复制
登录后复制
  1. 烧瓶应用示例 准备好一个简单的 Flask 应用程序,或者准备好在我们继续本教程时创建一个应用程序。

?创建 Flask 应用程序

首先,我们将创建一个简单的 Flask 应用程序并为容器化做好准备。请按照以下步骤操作:

  1. 创建项目目录

    创建一个名为 basic-flask 的目录并导航到其中。

  2. 创建 Flask 应用程序

    在 basic-flask 目录中,创建一个名为 app.py 的文件,其中包含以下内容:

   from flask import Flask

   app = Flask(__name__)

   @app.route("/")
   def HelloWorld():
       return "Hello World"

   if __name__ == "__main__":
       app.run()
登录后复制
登录后复制

您可以使用以下命令运行此应用程序:

   python3 app.py
登录后复制
登录后复制

打开浏览器并访问 http://localhost:5000。您应该会看到网页上显示 Hello World

Optimising Flask Dockerfiles: Best Practices for DevOps and Developers

  1. 列出依赖项 为了容器化应用程序,我们首先需要指定所需的 Python 模块。通过运行以下命令创建一个requirements.txt 文件:
   pip install flask
登录后复制
登录后复制

?创建 Dockerfile

现在,让我们创建两个版本的 Dockerfile:基本 版本和优化 版本。

基本 Dockerfile

基本的 Dockerfile 很简单,但缺乏效率和安全性优化:

   from flask import Flask

   app = Flask(__name__)

   @app.route("/")
   def HelloWorld():
       return "Hello World"

   if __name__ == "__main__":
       app.run()
登录后复制
登录后复制

这个 Dockerfile 很实用,但在缓存、大小优化和安全实践方面还有改进的空间。

优化的 Dockerfile

优化后的 Dockerfile 遵循多阶段构建,并结合了效率、安全性和模块化的最佳实践:

   python3 app.py
登录后复制
登录后复制

?构建 Dockerfile

现在我们已经创建了两个 Dockerfile,是时候构建 Docker 镜像并观察它们大小的差异了。请按照以下步骤操作:

从基本 Dockerfile 构建镜像

  1. 确保基本 Dockerfile 的内容保存在名为 Dockerfile 的文件中。
  2. 使用以下命令构建镜像:
   pip3 freeze > requirements.txt
登录后复制

Optimising Flask Dockerfiles: Best Practices for DevOps and Developers

从优化的 Dockerfile 构建镜像

  1. 将优化后的 Dockerfile 的内容保存在名为 Dockerfile 的单独文件中。
  2. 使用以下命令构建图像:
FROM python:3.9-slim

WORKDIR /app

COPY . /app

RUN pip install -r requirements.txt

CMD ["python3", "app.py"]
登录后复制

Optimising Flask Dockerfiles: Best Practices for DevOps and Developers

比较构建的图像

构建镜像后,使用以下命令列出所有 Docker 镜像:

# syntax=docker/dockerfile:1.4

# Stage 1: Build dependencies
FROM --platform=$BUILDPLATFORM python:3.10-alpine AS builder

WORKDIR /code

# Install build dependencies and cache pip files for efficiency
COPY requirements.txt /code
RUN --mount=type=cache,target=/root/.cache/pip \
    pip3 install --prefix=/install -r requirements.txt

COPY . /code

# Stage 2: Development environment setup
FROM python:3.10-alpine AS dev-envs

WORKDIR /code

# Copy application files and installed dependencies
COPY --from=builder /install /usr/local
COPY . /code

# Install additional tools for development (e.g., Git, Bash)
RUN apk update && apk add --no-cache git bash

# Create a non-root user for better security
RUN addgroup -S docker && \
    adduser -S --shell /bin/bash --ingroup docker vscode

# Set entrypoint and command for development purposes
ENTRYPOINT ["python3"]
CMD ["app.py"]

# Stage 3: Production-ready image
FROM python:3.10-alpine AS final

WORKDIR /app

# Copy only necessary application files and dependencies
COPY --from=builder /install /usr/local
COPY app.py /app

ENTRYPOINT ["python3"]
CMD ["app.py"]
登录后复制

Optimising Flask Dockerfiles: Best Practices for DevOps and Developers

您应该注意到图像尺寸的显着差异:

  • 基本 Dockerfile 映像: 大约 177MB
  • 优化的 Dockerfile 映像: 大约 59.2MB

为什么优化后的图片变小了

  • 轻量级基础镜像:优化后的Dockerfile使用python:3.10-alpine,明显小于python:3.9-slim。
  • 多阶段构建:从最终映像中排除不必要的构建依赖项,使其保持最小。
  • 高效缓存: pip 安装使用缓存可以避免冗余下载并减少图像层数。

?结论

优化 Dockerfile 是 DevOps 工程师的一项关键技能,旨在创建高效、安全且可用于生产的容器。在这篇博客中,我们探索了如何构建一个简单的 Flask 应用程序,使用基本的 Dockerfile 将其容器化,然后使用优化的 Dockerfile 对其进行改进。

图像大小和结构的差异证明了最佳实践的影响,例如使用多阶段构建、轻量级基础图像和缓存机制。虽然基本的 Dockerfile 达到了其目的,但优化后的版本提供了更精简、更安全且高性能的容器,凸显了容器化中周到设计的重要性。

当您继续您的 DevOps 之旅时,请始终努力通过整合优化、考虑安全性和最小化开销来增强您的 Dockerfile。优化良好的 Dockerfile 不仅可以节省时间和资源,还可以确保生产中更顺畅的部署和可扩展性。

现在轮到你了 - 尝试将这些技术应用到你自己的项目中,看看优化带来的差异! ?

?如需了解更多信息博客,请在 Hashnode、X(Twitter) 和 LinkedIn 上关注我。

快乐编码和自动化! ?

以上是优化 Flask Dockerfile:DevOps 和开发人员的最佳实践的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板