?介紹
歡迎來到 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 應用程序,或者準備好在我們繼續本教程時創建一個應用程式。
?創建 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。
- 列出依賴項 為了容器化應用程序,我們首先需要指定所需的 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 建立映像
- 確保基本 Dockerfile 的內容保存在名為 Dockerfile 的檔案中。
- 使用以下指令建立鏡像:
pip3 freeze > requirements.txt
從最佳化的 Dockerfile 建置映像
- 將最佳化後的 Dockerfile 的內容保存在名為 Dockerfile 的單獨檔案中。
- 使用以下命令建立映像:
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 映像: 約 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中文網其他相關文章!

Python是解釋型語言,但也包含編譯過程。 1)Python代碼先編譯成字節碼。 2)字節碼由Python虛擬機解釋執行。 3)這種混合機制使Python既靈活又高效,但執行速度不如完全編譯型語言。

UseeAforloopWheniteratingOveraseQuenceOrforAspecificnumberoftimes; useAwhiLeLoopWhenconTinuingUntilAcIntiment.forloopsareIdealForkNownsences,而WhileLeleLeleLeleLeleLoopSituationSituationsItuationsItuationSuationSituationswithUndEtermentersitations。

pythonloopscanleadtoerrorslikeinfiniteloops,modifyingListsDuringteritation,逐個偏置,零indexingissues,andnestedloopineflinefficiencies

forloopsareadvantageousforknowniterations and sequests,供應模擬性和可讀性;而LileLoopSareIdealFordyNamicConcitionSandunknowniterations,提供ControloperRoverTermination.1)forloopsareperfectForeTectForeTerToratingOrtratingRiteratingOrtratingRitterlistlistslists,callings conspass,calplace,cal,ofstrings ofstrings,orstrings,orstrings,orstrings ofcces

pythonisehybridmodeLofCompilation和interpretation:1)thepythoninterpretercompilesourcecececodeintoplatform- interpententbybytecode.2)thepythonvirtualmachine(pvm)thenexecutecutestestestestestesthisbytecode,ballancingEaseofuseEfuseWithPerformance。

pythonisbothinterpretedAndCompiled.1)它的compiledTobyTecodeForportabilityAcrosplatforms.2)bytecodeisthenInterpreted,允許fordingfordforderynamictynamictymictymictymictyandrapiddefupment,儘管Ititmaybeslowerthananeflowerthanancompiledcompiledlanguages。

在您的知識之際,而foroopsareideal insinAdvance中,而WhileLoopSareBetterForsituations則youneedtoloopuntilaconditionismet

ForboopSareSusedwhenthentheneMberofiterationsiskNownInAdvance,而WhileLoopSareSareDestrationsDepportonAcondition.1)ForloopSareIdealForiteratingOverSequencesLikelistSorarrays.2)whileLeleLooleSuitableApeableableableableableableforscenarioscenarioswhereTheLeTheLeTheLeTeLoopContinusunuesuntilaspecificiccificcificCondond


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版
視覺化網頁開發工具

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3漢化版
中文版,非常好用