許多人在從
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 的代號。開發中的代號是 Bullseye
跟 Bookworm
。端看使用環境來選擇相對的版本。
-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