Quadlet簡介
Podman Quadlet 是 Podman 5.0 之後推薦的技術,用於將容器管理深度整合進systemd。它讓你能以「聲明式(Declarative)」的方式定義容器,並由 systemd 自動管理其生命週期。
核心特點
- 聲明式配置:你不需要編寫複雜的 systemd unit 文件,只需編寫簡單的 .container 或 .network 文件(類似於簡化版的 Docker Compose 或
INI 格式)。
- 自動轉換:當 systemd 重新加載時,Quadlet 會自動將這些文件轉換為標準的 systemd 服務單元。
- 原生整合:容器會像原生服務一樣啟動、停止、並在崩潰時由 systemd 自動重啟。
- 解決依賴:利用 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
|
常用語法
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
|
參考網站