14.5. Podman を使用した systemd ユニットファイルの生成

Podman により、systemd はコンテナープロセスを制御および管理できます。podman generate systemd コマンドを使用して、既存のコンテナーと Pod の systemd ユニットファイルを生成できます。生成されたユニットファイルは頻繁に変更され (Podman に対する更新)、podman generate systemd で最新のユニットファイルの取得を確認できるので、podman generate systemd の使用を推奨します。

注記

Podman v4.6 以降では、Quadlet を使用できるようになりました。Quadlet を使用すると、通常の systemd ユニットファイルと同様の形式でコンテナーを実行する方法を記述でき、systemd でコンテナーを実行する際の複雑さを意識せずに済みます。

前提条件

  • container-tools メタパッケージがインストールされている。

手順

  1. コンテナー (例: myubi) を作成します。

    $ podman create --name myubi registry.access.redhat.com/ubi9:latest sleep infinity
    0280afe98bb75a5c5e713b28de4b7c5cb49f156f1cce4a208f13fee2f75cb453
  2. コンテナー名または ID を使用して systemd ユニットファイルを生成し、それを ~/.config/systemd/user/container-myubi.service ファイルに送ります。

    $ podman generate systemd --name myubi > ~/.config/systemd/user/container-myubi.service

検証手順

  • 生成された systemd ユニットファイルの内容を表示します。

    $ cat ~/.config/systemd/user/container-myubi.service
    # container-myubi.service
    # autogenerated by Podman 3.3.1
    # Wed Sep  8 20:34:46 CEST 2021
    
    [Unit]
    Description=Podman container-myubi.service
    Documentation=man:podman-generate-systemd(1)
    Wants=network-online.target
    After=network-online.target
    RequiresMountsFor=/run/user/1000/containers
    
    [Service]
    Environment=PODMAN_SYSTEMD_UNIT=%n
    Restart=on-failure
    TimeoutStopSec=70
    ExecStart=/usr/bin/podman start myubi
    ExecStop=/usr/bin/podman stop -t 10 myubi
    ExecStopPost=/usr/bin/podman stop -t 10 myubi
    PIDFile=/run/user/1000/containers/overlay-containers/9683103f58a32192c84801f0be93446cb33c1ee7d9cdda225b78049d7c5deea4/userdata/conmon.pid
    Type=forking
    
    [Install]
    WantedBy=multi-user.target default.target
    • Restart=on-failure 行は再起動ポリシーを設定し、サービスを正常に開始または停止できない場合、またはプロセスがゼロ以外で終了した場合に再起動するように systemd に指示します。
    • ExecStart 行は、コンテナーの開始方法を示しています。
    • ExecStop 行は、コンテナーを停止して削除する方法を示しています。