為什麼需要容器?
以前要部署一個應用程式,常常會遇到「我電腦上跑得好好的,怎麼到伺服器就壞了?」的問題,原因往往是兩邊的作業系統版本、套件版本不一致。容器(Container) 技術就是把應用程式連同它需要的所有套件、設定打包成一個獨立的單位,不管搬到哪台機器上,行為都一致。
容器 vs 虛擬機
- 虛擬機(VM):每台 VM 都包含完整的作業系統核心,啟動慢、佔用資源多
- 容器:直接共用主機的 Linux 核心,只打包應用程式與函式庫,啟動快(秒級)、佔用資源少
容器之所以能互相隔離,靠的是 Linux 核心提供的兩個機制:
- Namespace:讓每個容器看到自己獨立的程序、網路、檔案系統視角
- cgroups:限制每個容器能使用的 CPU、記憶體等資源
Podman 是什麼?
Podman 是一個與 Docker 指令相容的容器引擎,主要特色:
- 無常駐 Daemon:Docker 需要一個背景常駐的
dockerd服務,Podman 不需要,每個容器都是獨立的程序 - 預設 Rootless:一般使用者就能執行容器,不需要 root 權限,安全性更高
- 與 systemd 整合良好:可以把容器轉換成系統服務,開機自動啟動
Podman 與 Docker 的關係
兩者的指令幾乎一模一樣(podman run ≈ docker run),熟悉其中一個,另一個幾乎可以無痛切換。本系列會以 Podman 為主,之後也會有專門介紹 Docker 的系列。
接下來,我們就從安裝開始,動手跑出第一個容器。