podman+systemd实现容器生命周期管理 I


podman没有docker的dockerd那样的守护进程可以在系统重启后自动拉起容器。但我们可以使用Podman Quadlet,通过systemd实现容器生命周期管理。

准备工作

安装好podman即可。

生成.container配置

.container配置文件类似于docker compose的compose文件,用来告诉podman如何创建容器。

本文我们将通过podlet官方的ghcr.io/containers/podlet容器来生成配置。

使用compose.yaml作为模板生成

在存放compose.yaml的路径运行下面的命令,将在当前路径下生成 ${服务名}.container 文件。

podman run --rm -v .:/root ghcr.io/containers/podlet \
    --file /root  --overwrite --install --description test -a $PWD \
    compose /root/compose.yaml

参数解析:

  • --rm 在我们用完这个podlet容器后销毁对应的实例
  • -v .:/root 将当前目录挂载到/root
  • --file /root 存放podlet生成的配置的路径
  • --overwrite 若本就存在对应的配置则覆写
  • --install 设置为开机自启动
  • --description test 配置简介
  • -a $PWD 使用当前目录为工作目录转换compose文件中的相对路径
  • compose 配置通过compose进行生成
  • /root/compose.yaml 我们的compose文件

示例:

# /opt/frpc/compose.yaml
services:
  frpc:
    image: snowdreamtech/frpc
    restart: unless-stopped
    volumes:
      - ./frpc.toml:/etc/frp/frpc.toml
    network_mode: "host"

生成的配置:

# /opt/frpc/frpc.container
[Unit]
Description=test

[Container]
Image=snowdreamtech/frpc
Network=host
Volume=/opt/frpc/frpc.toml:/etc/frp/frpc.toml

[Service]
Restart=always

[Install]
WantedBy=default.target

当然也可以只生成配置,不写入文件。

podman run --rm -v .:/root ghcr.io/containers/podlet \
    --install --description test -a $PWD \
    compose /root/compose.yaml

应用配置

作为root用户

可以直接软链接配置或者复制配置到/etc/containers/systemd/目录。

# 这里frpc.container改成你自己的文件
ln -s $(realpath frpc.container) /etc/containers/systemd/
# 重载配置
systemd daemon-reload

这里其实已经配置好了开机自启,但是现在还没运行,可以通过systemd启动:

# 这里的frpc也要改成你的service名
systemd start frpc

作为rootless用户

首先需要设置当前用户在没有登录时仍然运行:

sudo loginctl enable-linger $USER

然后软链接配置或者复制配置到~/.config/containers/systemd/目录。

# 这里frpc.container改成你自己的文件
ln -s $(realpath frpc.container) ~/.config/containers/systemd/
# 重载配置
systemd --user daemon-reload

启动:

# 这里的frpc也要改成你的service名
systemd --user start frpc

管理容器

注意如果是rootless用户,在systemctl/journalctl后面要加上参数--user

查看状态:

# 这里的frpc也要改成你的service名
systemctl status frpc

启动:

# 这里的frpc也要改成你的service名
systemctl start frpc

停止:

# 这里的frpc也要改成你的service名
systemctl stop frpc

重启:

# 这里的frpc也要改成你的service名
systemctl restart frpc

日志:

# 这里的frpc也要改成你的service名
journalctl -u frpc -f
# -f 持续监控日志

若要取消开机自启动,可以在生成的配置中删除下面字段:

[Install]
WantedBy=default.target

或者不带--install参数重新生成配置。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注