跳轉到主要內容
Image Python 不是每次都自己從零寫,多數時候是站在別人建好的映像上(FROM)。挑映像看兩件事:可信度版本變體

可信度:三個層級

類別識別維護者
Docker Official Images路徑無使用者前綴(pythonubuntu)、有官方徽章Docker 親自策展
Verified Publisher有「Verified Publisher」徽章,路徑帶廠商名經審核的商業廠商
社群映像格式 username/image、無徽章個別使用者,靠下載數與聲譽判斷
判斷可信的可信來源見 Docker Hub

Python 映像變體

以 Python 官方映像為例,撥下面幾個看差異:

Alpine 的雷

Alpine 用 musl libc 而非 glibc,造成:
  • PyPI 上預編譯的 binary wheel(manylinux,以 glibc 為目標)在 Alpine 上會退回原始碼編譯,要在映像內裝 gcc / musl-dev 與各套件的 C headers,build 時間大增、最終 image 未必更小。
  • numpy、scipy、pandas、PyTorch、TensorFlow 這類科學運算 / ML 套件,在 Alpine 上需自行編譯或用非官方包,不建議
  • Alpine 適合純 Python(無 C extension 相依)、對映像大小有強制要求、且願意接受 multi-stage 裡的編譯成本。

選版本的通則

需要科學運算套件(numpy / pandas / scipy / torch)?
  → 是 → python:3.X(完整)或 python:3.X-slim + 手動裝 build-essential
  → 否 → python:3.X-slim(預設優先)
          └→ 對映像大小有嚴格限制 + 確認無 C extension?
                → 是 → python:3.X-alpine(接受自行編譯)
  • 固定 major.minor tagpython:3.12-slim),別用 latestpython:3
  • 預設用 slim,要編譯原生套件時自己補 build 工具。
  • bookworm = Debian 12、bullseye = Debian 11,需要鎖定 Debian 版本時用帶代號的 tag(python:3.12-slim-bookworm)。

接下來

官方參考:hub.docker.com/_/pythonDocker Official Images