Contents

如何建立高效的 Python Docker 映像

Docker 是用於在容器中打包和部署應用程式的業界標準軟體。 Docker 映像像是您建置和執行應用程式的基石。

為了利用 Docker 的完整功能,必須對容器映像進行微調,重點是優化其資源利用率、增強安全措施並提高整體效能。透過這樣做,您可以促進應用程式在 Docker 環境中的無縫操作。

透過查看演示在容器化環境中部署 Python 計算器應用程式的實際插圖,以了解該過程。

從最小的基礎鏡像開始

基礎映像的選擇會顯著影響 Docker 容器的效能,建議從僅包含執行所需應用程式所需的基本元素的最小映像開始。

選擇具有可靠追蹤記錄的映像,可及時提供安全更新、補丁,並透過全面的文件維持活躍的用戶群。這些功能對於解決專案開發過程中的任何技術困難或尋求指導非常寶貴。

選擇“python:3.11-slim-bookworm”作為計算器應用程式的程式語言可以得到需要更少資源的最佳化圖像。因此,這會減少部署期間的資源消耗並加快應用程式的下載速度。

 # Starting With a Minimal Base Image
FROM python:3.11-slim-bookworm AS builder 

您可以透過選擇「python:3.11-alpine」來使用更緊湊的 Alpine Linux 發行版。然而,值得注意的是,這個特定的映像省略了 Python 解釋器、套件管理器和基本的 Python 程式庫。

以非 root 使用者身分執行應用程式

如果未經授權的一方取得容器的存取權限,則以管理權限(例如 root 使用者擁有的權限)執行 Docker 容器可能會導致嚴重的安全隱患。在這種情況下,攻擊者可能會利用容器化應用程式或其相依性中的任何現有漏洞來提升其權限等級。一旦實現,這將允許他們在底層主機系統上執行任意命令,從而損害其完整性和機密性。對於組織來說,在部署和管理 Docker 容器以減輕這些潛在威脅時實施強大的安全措施和最佳實踐至關重要。

以較低的權限運行應用程式(例如在非根用戶帳戶下)可以是一種有效的安全措施,可以減輕與授予關鍵系統資源的完全存取權相關的潛在風險。透過實施這種做法,應用程式的進程與作業系統的敏感區域隔離,從而限制了應用程式上下文中可能發生的任何惡意活動的範圍。此方法還可以透過更精細地追蹤應用程式執行的操作來促進更好的審核功能。此外,它還可以防止未經授權的修改或篡改基本設置,從而幫助維護底層系統的完整性。

 # Set non-root user for security
RUN adduser calculator --system

# Add the user to the calculator group
RUN addgroup calculator && adduser calculator calculator

透過專門為您的軟體實施具有受限權限的指定使用者帳戶,您可以透過限制潛在入侵者可能嘗試利用系統漏洞的存取範圍來有效降低安全風險。

複製必要的檔案並建立虛擬環境

利用封裝在 Docker 容器中的虛擬化環境,可以消除與全域軟體包和其他程式的潛在衝突,從而有助於管理依賴關係。此外,它還保證了套件版本的一致性,因為可以安裝所需依賴項的精確版本,同時保持整個系統的完整性。

當然!以下是我嘗試以更複雜的方式解釋說明:要在 Docker 容器中設定計算器應用程序,請仔細遵循以下步驟:1。首先,將所有必要檔案從本機電腦傳輸到 Docker 映像所在伺服器上的指定資料夾。這個過程涉及複製所需的數據,以方便軟體的順利運作。2.接下來,利用Python預先安裝的高效能venv模組在容器內建立一個隔離的虛擬環境。透過這樣做,我們可以確保應用程式無縫運行,不會與其他已安裝的軟體包產生任何干擾或衝突。此步驟的目的是為計算器程式提供一個獨立且安全的環境,以實現最佳運作。

 # Set working directory and copy necessary files
WORKDIR /app
COPY app.py .
COPY requirements.txt .
COPY config.json ./
# Copy config.json from the local directory

# Create a virtual environment and install dependencies
RUN python -m venv /venv
ENV PATH="/venv/bin:$PATH"
RUN /venv/bin/pip install --upgrade pip --no-cache-dir --requirement requirements.txt 

利用虛擬環境可以避免系統範圍元件的重複,從而為 Docker 容器內的套件管理提供了一種簡化的方法。這會導致影像尺寸更加緊湊,並減少運行時的資源使用量。

最小化層數以提高效率

Docker 在建置映像檔時採用寫入時複製策略,Dockerfile 中的每個指令都會產生一個附加層。為了優化鏡像尺寸和建置速度,謹慎的做法是盡量減少 Docker 映像中的層數。實現這一目標的實用方法是將多個指令組合成一個單獨的「RUN」語句。

 # Minimizing Layers for Efficiency
# Combine commands to reduce the number of layers
RUN echo "Build process goes here" && \
   /venv/bin/python -m compileall . && \
   rm -rf __pycache__ 

透過利用上述建議,我們可以有效地減少整個影像建構過程中中間層的生成。

保護配置處理

使用 Docker 映像處理敏感資料存在潛在的安全威脅。為了減輕這種風險,建議使用環境變數和外部設定檔。例如,對於計算器應用程序,可以建立一個名為“/config”的目錄來存放設定檔並確保分配適當的所有權權限。

 # Securing Configuration Handling
RUN mkdir /config && chown calculator:calculator /config

將「config.json」檔案的副本放入此資料夾中,同時保持其與應用程式原始碼的分離。

 # Copy the config.json file into the container
RUN cp config.json /config/config.json
ENV CONFIG_PATH=/config/config.json 

將設定資訊與程式碼庫隔離並實施適當的權限是增強 Docker 容器的全面安全狀況的關鍵方面。這種方法限制未經授權的實體(例如惡意進程或個人)存取敏感的設定詳細資訊。

使用多階段構建

透過實施多階段建置流程,可以將建置環境與最終的圖形表示隔離。因此,這種方法產生更緊湊和專業的最終產品。此外,它透過禁止最終描述中的開發資源和資料來增強安全性。這樣做可以減少攻擊面,並最大限度地減少因不當夾雜物可能產生的任何附帶危險。

 # Leveraging Multi-Stage Builds
FROM python:3.11-slim-bookworm

COPY --from=builder /etc/passwd /etc/passwd
COPY --from=builder /etc/group /etc/group
COPY --from=builder /venv /venv
COPY --from=builder /config /config
COPY --from=builder /app /app
# Copy the application code

上述程式碼選擇性地將基本元件從建置階段(稱為建構器)轉移到最終影像中。透過消除不需要的與構建相關的資源和數據,它簡化了圖像的尺寸,確保計算器軟體應用程式的最佳性能。

透過影像掃描增強安全性

為了增強 Docker 映像的安全性,請使用 Trivy 或 Clair 等映像掃描工具。這些工具專為偵測映像層和可靠元素中的漏洞而設計,為確保容器化應用程式的完整性提供了強大的解決方案。例如,您可以使用 Trivy 對計算器應用程式執行漏洞掃描。

 # Install Trivy for Debian/Ubuntu
RUN apt-get update && \
   apt-get install -y wget apt-transport-https gnupg lsb-release && \
   wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | apt-key add - && \
   echo "deb https://aquasecurity.github.io/trivy-repo/deb bookworm main" \
   | tee -a /etc/apt/sources.list.d/trivy.list && \
   apt-get update && \
   apt-get install -y trivy 

將 Trivy 的漏洞掃描功能整合到 Docker 映像中至關重要,因為它依賴廣泛認可的常見漏洞和暴露 (CVE) 資料庫。 CVE 資料庫提供有關已識別漏洞的及時更新,允許透過實施最新修補程式來持續維護映像的安全性。因此,這可以減輕與已知漏洞相關的潛在風險,並防止未經授權的存取或資料外洩。

要獲得影像的安全評估,您可以使用以下說明。透過執行此命令,您將收到一份全面的報告,詳細說明映像軟體元件中存在的任何潛在弱點或敏感度。

 docker run --rm `
 -v /var/run/docker.sock:/var/run/docker.sock `
 -v $HOME/Library/Caches:/root/.cache/ `
 aquasec/trivy:0.18.3 `
 <your image name> 

前述指令可能需要延長執行持續時間。因此,完成後,它將產生一個類似於以下範例的文件。

/bc/images/how-to-create-efficient-python-docker-images-trivy-output.jpg

必須根據安全漏洞的嚴重程度及時解決,問題越嚴重,解決的速度就越快。

以非 root 使用者身分執行應用程式

為了增強此應用程式的安全性,建議您在系統管理員帳戶的支援下操作它,這有助於最大限度地減少可能存在的潛在敏感性。

 # Running Applications as Non-Root Users
WORKDIR /app
USER calculator

# Activate the virtual environment and run the application
CMD ["/bin/bash", "-c", "source /venv/bin/activate && python app.py"]

轉換為非管理用戶可以限制存取權限並縮小潛在漏洞的範圍,從而顯著減少潛在漏洞。

容器化非 Python 應用程式

使用 JavaScript 以外的語言對應用程式進行容器化的過程可能會略有不同,因此需要了解各種容器化技術。透過理解這些細微差別,人們可以確定部署特定應用程式的最佳方法,同時考慮其程式語言。