searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

使用systemd管理podman容器

2023-01-13 08:20:25
64
0

podman提供了和docker基本兼容的命令行操作,因此我们可以向使用docker那样使用podman(alias docker=podman)。和其他的容器引擎一样,podman也依赖于OCI兼容的容器运行时(runc、crun、runv等)用来创建容器。podman还支持普通用户权限创建容器、在创建容器的时候指定要使用的runtime。

systemd是成熟的初始化系统,由podman构建的OCI和docker格式的容器可以使用systemd像管理其他服务那样来管理。可以通过podman generate systemd命令为podman创建的容器或者pod来生成systemd的服务文件。

通过使用systemd来管理的容器,我们就可以管理其启动顺序,让容器中的服务像物理机上的服务一样按顺序启动。

前置知识

systemd启动服务由如下方式:

  1. 在系统启动的时候启动服务

    # systemctl enable

    Service文件需要放在/etc/system/system/目录下

  2. 在用户登录的时候启动服务,用户注销时关闭服务

    $systemctl –user enable

    Service文件需要放在$HOME/.config/systemd/user目录中

systemd管理podman容器步骤

下面说明如何通过podman生成systemd服务文件

  1. 创建要使用systemd管理的容器(httpd)

    $ podman run -dt -p 8080:80 --name httpd docker.io/library/httpd:latest

  2. 使用容器名称或者id来生成一个服务文件

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

    如果~/.config/systemd/user/目录不存在请执行创建目录的命令来创建目录

    $ mkdir -p ~/.config/systemd/user

  3. 查看生成的服务文件

    cat ~/.config/systemd/user/container-httpd.service

    # container-httpd.service
    
    # autogenerated by Podman 4.2.1
    
    # Fri Oct 14 15:28:07 CST 2022
    
    
    [Unit]
    
    Description=Podman container-httpd.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 httpd
    
    ExecStop=/usr/bin/podman stop -t 10 httpd
    
    ExecStopPost=/usr/bin/podman stop -t 10 httpd
    
    PIDFile=/run/user/1000/containers/overlay-containers/05bda68bfd0e543d6fb5eda449c8890b8496e0ab77d5acbfe0123b98dd282a25/userdata/conmon .pid
    
    Type=forking
    
    
    [Install]
    
    WantedBy=default.target
  4. 此时可以通过systemd来进行管理podman的容器 在使用systemd管理之前,需要先停止该容器

    $ podman stop httpd

    $ systemctl –user start container-httpd

  5. 查看当前容器的状态

    $ systemctl –user status container-httpd

  6. 验证下容器的功能

  7. 我们将此服务设置为自动启动

    $systemctl --user enable container-httpd.service

  8. 重启机器进行服务验证

    在重启机器之后,我们第一次登录系统的时候这个服务(容器)会被自动拉起。

此时我们的容器已经是通过systemd进行的管理,可以通过修改服务的依赖来设置容器的启动顺序、修改服务的重启策略来修改容器崩溃之后是否自动拉起等。

0条评论
0 / 1000
西红柿牛腩泡饼
4文章数
0粉丝数
西红柿牛腩泡饼
4 文章 | 0 粉丝
西红柿牛腩泡饼
4文章数
0粉丝数
西红柿牛腩泡饼
4 文章 | 0 粉丝
原创

使用systemd管理podman容器

2023-01-13 08:20:25
64
0

podman提供了和docker基本兼容的命令行操作,因此我们可以向使用docker那样使用podman(alias docker=podman)。和其他的容器引擎一样,podman也依赖于OCI兼容的容器运行时(runc、crun、runv等)用来创建容器。podman还支持普通用户权限创建容器、在创建容器的时候指定要使用的runtime。

systemd是成熟的初始化系统,由podman构建的OCI和docker格式的容器可以使用systemd像管理其他服务那样来管理。可以通过podman generate systemd命令为podman创建的容器或者pod来生成systemd的服务文件。

通过使用systemd来管理的容器,我们就可以管理其启动顺序,让容器中的服务像物理机上的服务一样按顺序启动。

前置知识

systemd启动服务由如下方式:

  1. 在系统启动的时候启动服务

    # systemctl enable

    Service文件需要放在/etc/system/system/目录下

  2. 在用户登录的时候启动服务,用户注销时关闭服务

    $systemctl –user enable

    Service文件需要放在$HOME/.config/systemd/user目录中

systemd管理podman容器步骤

下面说明如何通过podman生成systemd服务文件

  1. 创建要使用systemd管理的容器(httpd)

    $ podman run -dt -p 8080:80 --name httpd docker.io/library/httpd:latest

  2. 使用容器名称或者id来生成一个服务文件

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

    如果~/.config/systemd/user/目录不存在请执行创建目录的命令来创建目录

    $ mkdir -p ~/.config/systemd/user

  3. 查看生成的服务文件

    cat ~/.config/systemd/user/container-httpd.service

    # container-httpd.service
    
    # autogenerated by Podman 4.2.1
    
    # Fri Oct 14 15:28:07 CST 2022
    
    
    [Unit]
    
    Description=Podman container-httpd.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 httpd
    
    ExecStop=/usr/bin/podman stop -t 10 httpd
    
    ExecStopPost=/usr/bin/podman stop -t 10 httpd
    
    PIDFile=/run/user/1000/containers/overlay-containers/05bda68bfd0e543d6fb5eda449c8890b8496e0ab77d5acbfe0123b98dd282a25/userdata/conmon .pid
    
    Type=forking
    
    
    [Install]
    
    WantedBy=default.target
  4. 此时可以通过systemd来进行管理podman的容器 在使用systemd管理之前,需要先停止该容器

    $ podman stop httpd

    $ systemctl –user start container-httpd

  5. 查看当前容器的状态

    $ systemctl –user status container-httpd

  6. 验证下容器的功能

  7. 我们将此服务设置为自动启动

    $systemctl --user enable container-httpd.service

  8. 重启机器进行服务验证

    在重启机器之后,我们第一次登录系统的时候这个服务(容器)会被自动拉起。

此时我们的容器已经是通过systemd进行的管理,可以通过修改服务的依赖来设置容器的启动顺序、修改服务的重启策略来修改容器崩溃之后是否自动拉起等。

文章来自个人专栏
podman
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0