歡迎來到 DevOps 的世界! ?今天,我們將深入探討任何 DevOps 工程師的一項基本技能:針對 Flask 應用程式最佳化 Dockerfile。雖然初學者 DevOps 工程師通常專注於掌握基本的 Dockerfile 語法,但經驗豐富的工程師知道真正的專業知識在於優化 - 製作高效、安全且可用於生產的 Dockerfile。
在本部落格中,我們將逐步介紹建立簡單 Flask 應用程式的過程。首先,我們將建立一個基本的 Dockerfile,然後將其細化為最佳化版本,比較兩者以了解差異。無論您是初學者還是希望提高 Dockerfile 技能,本指南都適合每個人。
讓我們開始吧! ?️
在我們深入為 Flask 應用程式編寫和最佳化 Dockerfile 之前,請確保您具備以下先決條件:
Flask 的基本了解
熟悉創建簡單的 Flask 應用程式將幫助您無縫地跟進。
Docker 已安裝
確保 Docker 已安裝並在您的系統上運行。您可以從 Docker 網站下載。
Python 環境設定
您的系統上安裝了 Python 3.x,以及用於管理 Python 套件的 pip。
程式碼編輯器
使用您選擇的任何程式碼編輯器,例如 Visual Studio Code、PyCharm 或 Sublime Text。
燒瓶已安裝
使用以下命令在 Python 環境中安裝 Flask:
pip install flask
首先,我們將建立一個簡單的 Flask 應用程式並為容器化做好準備。請依照以下步驟操作:
建立專案目錄
建立一個名為 basic-flask 的目錄並導航到其中。
建立 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。
pip install flask
現在,讓我們建立兩個版本的 Dockerfile:基本上 版本和最佳化 版本。
基本的 Dockerfile 很簡單,但缺乏效率和安全性最佳化:
from flask import Flask app = Flask(__name__) @app.route("/") def HelloWorld(): return "Hello World" if __name__ == "__main__": app.run()
這個 Dockerfile 很實用,但在快取、大小優化和安全實踐方面還有改進的空間。
優化後的 Dockerfile 遵循多階段構建,並結合了效率、安全性和模組化的最佳實踐:
python3 app.py
現在我們已經建立了兩個 Dockerfile,是時候建立 Docker 映像並觀察它們大小的差異了。請依照以下步驟操作:
pip3 freeze > requirements.txt
FROM python:3.9-slim WORKDIR /app COPY . /app RUN pip install -r requirements.txt CMD ["python3", "app.py"]
建置映像檔後,使用下列指令列出所有 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"]
您應該注意到影像尺寸的顯著差異:
最佳化 Dockerfile 是 DevOps 工程師的關鍵技能,旨在建立高效、安全且可用於生產的容器。在這篇部落格中,我們探索如何建立一個簡單的 Flask 應用程序,使用基本的 Dockerfile 將其容器化,然後使用優化的 Dockerfile 對其進行改進。
影像大小和結構的差異證明了最佳實踐的影響,例如使用多階段建置、輕量級基礎映像和快取機制。雖然基本的 Dockerfile 達到了其目的,但優化後的版本提供了更精簡、更安全且高效能的容器,凸顯了容器化中周到設計的重要性。
當您繼續您的 DevOps 之旅時,請務必透過整合最佳化、考慮安全性和最小化開銷來增強您的 Dockerfile。優化良好的 Dockerfile 不僅可以節省時間和資源,還可以確保生產中更順暢的部署和可擴充性。
現在輪到你了 - 嘗試將這些技術應用到你自己的專案中,看看優化帶來的差異! ?
?如需了解更多資訊博客,請在 Hashnode、X(Twitter) 和 LinkedIn 上關注我。
快樂編碼和自動化! ?
以上是優化 Flask Dockerfile:DevOps 和開發人員的最佳實踐的詳細內容。更多資訊請關注PHP中文網其他相關文章!