*Systemd 啟動容器

  1. podman 使用 image dywrsyslog,建立一個名 mylog 且背景執行的容器。
    [deyu5@kvm8 ~]$ podman create --name mylog dywrsyslog
    839bc31c9b83361328c7c0cd71283552d45a6e275d7b83bf09b37c1de4c7ccc1
    
  2. 查詢容器 mylog 已建立,狀態為 Created,不是執行中。
    [deyu5@kvm8 ~]$ podman ps -a --format "{{.ID}} {{.Image}} {{.Status}} {{.Names}}"
    85b5a03a3f13 docker.io/eboraas/apache-php:latest Up 5 hours ago web
    384ce2ad0d31 docker.io/library/mariadb:latest Up 5 hours ago mdb
    839bc31c9b83 registry.csie.cyut.edu.tw/dywrsyslog:latest Created mylog
    
  3. 建立服務設定檔儲存目錄 .config/systemd/user/,並切換工作目錄到該目錄。
    [deyu5@kvm8 ~]$ mkdir -p .config/systemd/user/
    [deyu5@kvm8 ~]$ cd .config/systemd/user/
    
  4. podman 為容器 mylog 產生服務的設定檔,--files 選項自動儲存成 container-mylog.service。
    [deyu5@kvm8 user]$ podman generate systemd --name mylog --files
    
  5. 查看產生的 container-mylog.service。
    [deyu5@kvm8 user]$ cat container-mylog.service
    # container-mylog.service
    # autogenerated by Podman 3.2.3
    # Fri Nov 12 15:31:40 CST 2021
    
    [Unit]
    Description=Podman container-mylog.service
    Documentation=man:podman-generate-systemd(1)
    Wants=network.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 mylog
    ExecStop=/usr/bin/podman stop -t 10 mylog
    ExecStopPost=/usr/bin/podman stop -t 10 mylog
    PIDFile=/run/user/1000/containers/overlay-containers/..../userdata/conmon.pid
    Type=forking
    
    [Install]
    WantedBy=multi-user.target default.target
    
  6. 重新載入服務。
    [deyu5@kvm8 ~]$ systemctl --user daemon-reload
    
  7. 設定開機啟動 container-mylog 服務,且現在啟動。
    [deyu5@kvm8 ~]$ systemctl --user enable --now container-mylog.service
    Created symlink /home/deyu5/.config/systemd/user/multi-user.target.wants/container-mylog.service
    → /home/deyu5/.config/systemd/user/container-mylog.service.
    Created symlink /home/deyu5/.config/systemd/user/default.target.wants/container-mylog.service
    → /home/deyu5/.config/systemd/user/container-mylog.service.
    
  8. 查詢 container-mylog 服務狀態,成功啟動。
    [deyu5@kvm8 user]$ systemctl --user status container-mylog.service
    ● container-mylog.service - Podman container-mylog.service
       Loaded: loaded (/home/deyu5/.config/systemd/user/container-mylog.service; en>
       Active: active (running) since Fri 2021-11-12 15:33:31 CST; 38s ago
         Docs: man:podman-generate-systemd(1)
      Process: 15102 ExecStart=/usr/bin/podman start mylog (code=exited, status=0/S>
     Main PID: 15119 (conmon)
       CGroup: /user.slice/user-1000.slice/user@1000.service/container-mylog.service
               ├─15113 /usr/bin/fuse-overlayfs -o ,lowerdir=/home/deyu5/.local/shar>
               ├─15115 /usr/bin/slirp4netns --disable-host-loopback --mtu=65520 --e>
               ├─15119 /usr/bin/conmon --api-version 1 -c 839bc31c9b83361328c7c0cd7>
               └─839bc31c9b83361328c7c0cd71283552d45a6e275d7b83bf09b37c1de4c7ccc1
                 └─15129 rsyslogd -n
    
  9. podman 查詢容器狀態,mylog 成功啟動。
    [deyu5@kvm8 user]$ podman ps --format "{{.Names}} {{.Image}} {{.Status}}"
    web docker.io/eboraas/apache-php:latest Up 5 hours ago
    mdb docker.io/library/mariadb:latest Up 5 hours ago
    mylog registry.csie.cyut.edu.tw/dywrsyslog:latest Up About a minute ago
    
  10. 再確認 container-mylog 服務是否設定開機啟動。
    [deyu5@kvm8 ~]$ systemctl --user is-enabled container-mylog.service 
    enabled
    
  11. 以上的 systemd 設定是在登入 deyu5 後,才會啟動 container-mylog 服務,若要重開機後不管有沒有登入 deyu5,都啟動 container-mylog,則必須使用控制 systemd 登入管理命令 loginctl,啟用「用戶保留登入狀態」,系統會在啟動後自動為用戶生出用戶管理器,並且在用戶登出後保持運作,deyu5 啟用保持登入狀態。
    [deyu5@kvm8 user]$ loginctl enable-linger deyu5
    
  12. deyu5 啟用保持登入狀態後,會建立 /var/lib/systemd/linger/deyu5 檔。
    [deyu5@kvm8 user]$ ll /var/lib/systemd/linger
    total 0
    -rw-r--r--. 1 root root 0 Nov 12 15:36 deyu5