用 podman-kube 來跑 WordPress

上一篇寫了要怎麼用 podman 的 systemd generator 來跑單一的 container,其實 podman 還有另外一個 pod 模式,也就是類似 Kubernetes 的 pod 一樣,可以把多個 container 跑在同一個 namespace 裡面。Podman 的 podman-kube-play(1) 指令可以接受一個 Kubernetes 的 YAML 設定檔然後跑起單一個 container 或是一整個 pod 與多個 container。同樣的,systemd generator 也可以用來管理整個 pod,變成 systemd service unit。

閱讀全文 用 podman-kube 來跑 WordPress

用 systemd 管理 podman containers

Podman 原本有提供指令可以產生 systemd service 的設定檔,但是產生出來的檔案內容感覺有很多改善的空間,例如要怎麼讓 podman 可以乖乖的把 log 送到 journald 就不是產生的範本有提供的。

podman generate systemd wordpress-container

在研究這個問題的時候發現這個指令已經被 Quadlet 取代了。Quadlet 是在 podman 4.4 的時候整合進去的,利用 systemd generator 的方式把類似於 systemd 的設定檔直接轉換為 systemd 可以使用的格式。

# cat /etc/containers/systemd/wordpress.container
[Unit]
Description=Wordpress Container
After=network-online.target
Wants=network-online.target

[Container]
Image=docker.io/library/wordpress:6
Volume=/var/srv/wordpress:/var/www/html:Z

[Service]
Restart=always
TimeoutStartSec=900

[Install]
WantedBy=multi-user.target

如此一來就可以簡單的設定 container 以及讓 container 自動更新了。詳細的設定可以參考 podman-systemd.unit(5) 的內容。

把設定放到 /etc/containers/systemd 目錄下以後,記得要讓 systemd 重新讀取:

# sudo systemctl daemon-reload
# sudo systemctl start wordpress
# systemctl status wordpress
● wordpress.service - WordPress Container
     Loaded: loaded (/etc/containers/systemd/wordpress.container; generated)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Sun 2023-11-05 03:07:06 UTC; 20h ago
   Main PID: 57888 (conmon)
      Tasks: 5 (limit: 2032)
     Memory: 212.2M
        CPU: 4min 34.751s
     CGroup: /system.slice/wordpress.service
             ├─libpod-payload-739aab67986c96c0a76034f2af5203530442e8e492b3a453b7a193b76623f0d5
             │ ├─57890 apache2 -DFOREGROUND
             │ ├─74394 apache2 -DFOREGROUND
             │ ├─74399 apache2 -DFOREGROUND
             │ └─74407 apache2 -DFOREGROUND
             └─runtime
               └─57888 /usr/bin/conmon --api-version 1 -c 739aab67986c96c0a76034f2af5203530442e8e492b3a453b7a193b76623f0d5

這一種設定方式比原本的 systemd 簡單太多了。