Podman 基礎入門

第一章:認識 Podman 與容器概念

為什麼需要容器?

以前要部署一個應用程式,常常會遇到「我電腦上跑得好好的,怎麼到伺服器就壞了?」的問題,原因往往是兩邊的作業系統版本、套件版本不一致。容器(Container) 技術就是把應用程式連同它需要的所有套件、設定打包成一個獨立的單位,不管搬到哪台機器上,行為都一致。

容器 vs 虛擬機

  • 虛擬機(VM):每台 VM 都包含完整的作業系統核心,啟動慢、佔用資源多
  • 容器:直接共用主機的 Linux 核心,只打包應用程式與函式庫,啟動快(秒級)、佔用資源少

容器之所以能互相隔離,靠的是 Linux 核心提供的兩個機制:

  • Namespace:讓每個容器看到自己獨立的程序、網路、檔案系統視角
  • cgroups:限制每個容器能使用的 CPU、記憶體等資源

Podman 是什麼?

Podman 是一個與 Docker 指令相容的容器引擎,主要特色:

  • 無常駐 Daemon:Docker 需要一個背景常駐的 dockerd 服務,Podman 不需要,每個容器都是獨立的程序
  • 預設 Rootless:一般使用者就能執行容器,不需要 root 權限,安全性更高
  • 與 systemd 整合良好:可以把容器轉換成系統服務,開機自動啟動

Podman 與 Docker 的關係

兩者的指令幾乎一模一樣(podman rundocker run),熟悉其中一個,另一個幾乎可以無痛切換。本系列會以 Podman 為主,之後也會有專門介紹 Docker 的系列。

接下來,我們就從安裝開始,動手跑出第一個容器。