Quadlet指令整理

Quadlet簡介

Podman Quadlet 是 Podman 5.0 之後推薦的技術,用於將容器管理深度整合進systemd。它讓你能以「聲明式(Declarative)」的方式定義容器,並由 systemd 自動管理其生命週期。

核心特點

  1. 聲明式配置:你不需要編寫複雜的 systemd unit 文件,只需編寫簡單的 .container 或 .network 文件(類似於簡化版的 Docker Compose 或 INI 格式)。
  2. 自動轉換:當 systemd 重新加載時,Quadlet 會自動將這些文件轉換為標準的 systemd 服務單元。
  3. 原生整合:容器會像原生服務一樣啟動、停止、並在崩潰時由 systemd 自動重啟。
  4. 解決依賴:利用 systemd 的依賴機制,可以輕鬆管理容器之間或容器與主機服務之間的啟動順序。

檔案位置

  • 個人使用者 $HOME/.config/containers/systemd/
  • 系統使用者 /etc/containers/systemd/

.container 範本 (對應 docker run)

內容視需求替換

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[Unit]
Description=MariaDB Database Server
After=network-online.target

[Container]
# 對應 --image
Image=docker.io/library/mariadb:latest

# 對應 --env 或 -e
Environment=MARIADB_ROOT_PASSWORD=my-secret-pw
Environment=MARIADB_DATABASE=app_db

# 對應 --publish 或 -p
PublishPort=3306:3306

# 對應 --volume 或 -v (這裡指向下面定義的 .volume)
Volume=mariadb_data.volume:/var/lib/mysql

# 對應 --network
Network=backend.network

# 對應 --label
Label=app=backend

[Service]
# 這是 systemd 的設定,建議加上,確保容器崩潰時自動重啟
Restart=always

[Install]
# 讓 systemctl enable 指令生效
WantedBy=multi-user.target default.target

## .volume 範本 (對應 docker volume create)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[Unit]
Description=Volume for MariaDB data

[Volume]
# 對應 docker volume create mariadb_data
# 如果需要特定驅動,可以在此設定,通常預設即可
User=1000
Group=1000

[Install]
WantedBy=multi-user.target default.target

常用語法

  • 檢查.container等與語法是否正確
1
/usr/libexec/podman/quadlet -dryrun -user
  • 每次.container有異動時,必須執行更新,讓quadlet重新產生.service
1
systemctl --user daemon-reload

rootless模式時,使用<1024的port

若要加入port 222

1
2
sudo vim /etc/sysctl.d/99-rootless-ports.conf
sudo net.ipv4.ip_unprivileged_port_start=222

編輯完成後,輸入sudo sysctl -p /etc/sysctl.d/99-rootless-ports.conf 使設定值立即生效

使用者登出終端後 container保持運行

1
loginctl enable-linger $USER

確認linger是否成功

1
loginctl show-user $USER --property=Linger

參考網站

Built with Hugo
Theme Stack designed by Jimmy