Docker image 到底要 pull 哪一個?

許多人在從 DockerHub pull image 下來時,可能都會有疑問到底要拉哪個鏡像下來?光是 python 就有 Alpine, Slim, Stretch, Buster, Jessie, Bullseye 等等的版本,甚至還帶上 -slim, -windowsservicecore 的子標籤,如果你也有跟我一樣的疑問的話,希望這篇可以幫助你去了解這些鏡像得不同之處,這篇舉 python 的鏡像為例來做個說明。

Version and latest

通常就是冒號之後帶上版本,如 python:3.10.1,這也是官方推的正式版本,檔案通常比較大,如果不確定要使用哪個安裝這個就對了,最安全支援度也是最廣。盡量不要使用 latest 的 image,因為每次 build 都會拉最新版的下來,可能會遇到很多不可預期的問題,最好是指定一個版本。

Stretch/Buster/Jessie

這些名字其實是代表 Debian Release 的版本代號,Buster 是 Debian version 10 與衍伸的代號,Stretch 是版本 9,Jessie 則是版本 8 的代號。開發中的代號是 BullseyeBookworm。端看使用環境來選擇相對的版本。

-slim

slim 通常指是安裝最低所需相依套件的版本,如果你有空間上的考量則可以使用,但開發時可能需要多注意所使用的軟體是否提供支援。

-alpine

alpine 是一套開源的 Linux 專案,為了在 container 開發而生,檔案 size 超小,但開發時一樣要注意所使用的軟體是否提供支援,由於支援的更少,更容易遇到相容性的問題。可以透過定義 external package 寫在 Dockerfile 並安裝來支援

Alpine 是使用 apk 指令來安裝套件,而非常用的 apt-get 指令。

-windowsservercore

顧名思義就是 windows 環境下安裝的版本

結論:有選擇障礙怎麼辦?

  • 懶人並求快、安全,安裝完整鏡像版
  • 有空間上的考量,選擇 slim 版
  • 時間滿出來,可以完整測試並追求極致空間使用,選擇 alpine

查看各個 image 的 size

可以把每個各種不同的版本 pull 下來看看 size

docker pull --quiet python:3.10.1
docker pull --quiet python:3.10.1-buster
docker pull --quiet python:3.10.1-slim
docker pull --quiet python:3.10.1-alpine
docker images
comments powered by Disqus