首頁 >後端開發 >Python教學 >優化 Flask Dockerfile:DevOps 和開發人員的最佳實踐

優化 Flask Dockerfile:DevOps 和開發人員的最佳實踐

DDD
DDD原創
2025-01-05 16:10:42501瀏覽

?介紹

歡迎來到 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