注意:

在 Oracle Linux 上配置使用 Podman 的用户逗留

简介

Systemd 提供用户留存功能,允许用户服务(例如使用 systemd 用户单元启动的容器)在用户注销后保持活动状态。否则,用户服务管理器(及其容器)将在注销时停止。

目标

在本教程中,您将学习:

先决条件

部署 Oracle Linux

注:如果在您自己的租户中运行,请在部署实验环境之前阅读 linux-virt-labs GitHub 项目 README.md 并完成先决条件。

  1. 在 Luna Desktop 上打开一个终端。

  2. 克隆 linux-virt-labs GitHub 项目。

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. 转到工作目录。

    cd linux-virt-labs/ol
    
  4. 安装所需集合。

    ansible-galaxy collection install -r requirements.yml
    
  5. 部署实验室环境。

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e use_podman=true -e update_all=true -e os_version="9"
    

    免费的实验环境需要额外的变量 local_python_interpreter,该变量为在 localhost 上运行的播放设置 ansible_python_interpreter。此变量是必需的,因为环境安装了适用于 Python 的 Oracle Cloud Infrastructure SDK 的 RPM 程序包,该程序包位于 python3.6 模块下。

    默认部署配置使用 AMD CPU 和 Oracle Linux 8。要使用 Intel CPU 或 Oracle Linux 9,请将 -e instance_shape="VM.Standard3.Flex"-e os_version="9" 添加到部署命令。

    重要提示:等待手册成功运行并到达暂停任务。在手册的这一阶段,Oracle Linux 安装已完成,实例已准备就绪。记下之前的剧集,其中输出其部署的节点的公共和专用 IP 地址,以及运行实验时所需的任何其他部署信息。

确认 Podman 工作

Oracle Linux 中的 container-tools 软件包提供最新版本的 Podman、Buildah、Skopeo 和关联的依赖项。

  1. 打开终端并通过 SSH 连接到 ol-node-01 实例。

    ssh oracle@<ip_address_of_instance>
    
  2. 检查 Podman 的版本。

    podman -v
    
  3. 确认 Podman CLI 正在工作。

    podman run quay.io/podman/hello
    

    输出示例:

    [oracle@ol-server ~]$ podman run quay.io/podman/hello
    Trying to pull quay.io/podman/hello:latest...
    Getting image source signatures
    Copying blob f82b04e85914 done
    Copying config dbd85e09a1 done
    Writing manifest to image destination
    Storing signatures
    !... Hello Podman World ...!
    
             .--"--.
           / -     - \
          / (O)   (O) \
       ~~~| -=(,Y,)=- |
        .---. /`  \   |~~
     ~/  o  o \~~~~.----. ~~
      | =(X)= |~  / (O (O) \
       ~~~~~~~  ~| =(Y_)=-  |
      ~~~~    ~~~|   U      |~~
    
    Project:   https://github.com/containers/podman
    Website:   https://podman.io
    Documents: https://docs.podman.io
    Twitter:   @Podman_io
    

为用户启用逗留

用于本教程的用户名为 oracle

  1. oracle 用户启用持久性。

    sudo loginctl enable-linger oracle
    

为 Podman 创建 Systemd 单元文件

  1. 为 systemd 单元文件创建一个目录。

    mkdir -p ~/.config/systemd/user
    
  2. 创建 Systemd 单元文件。

    cat << EOF | tee ~/.config/systemd/user/mycontainer.service > /dev/null
    [Unit]
    Description=My Podman Container
    
    [Service]
    Restart=always
    ExecStart=/usr/bin/podman run --rm --name mycontainer ghcr.io/oracle/oraclelinux9-nginx:1.20
    ExecStop=/usr/bin/podman stop -t 10 mycontainer
    
    [Install]
    WantedBy=default.target
    EOF
    
  3. 启动并启用 Systemd 服务。

    systemctl --user daemon-reload
    systemctl --user enable --now mycontainer.service
    

确认 Systemd 已启动 Podman

  1. 确认服务已启动 Podman。

    podman ps
    

    输出示例:

    [oracle@ol-node-01 ~]$ podman ps
    CONTAINER ID  IMAGE                                   COMMAND               CREATED        STATUS        PORTS            NAMES
    9ada6b5a635f  ghcr.io/oracle/oraclelinux9-nginx:1.20  nginx -g daemon o...  4 minutes ago  Up 4 minutes  80/tcp, 443/tcp  mycontainer
    
  2. 检查 systemd 服务的状态。

    systemctl --user status mycontainer.service
    

    输出示例:

    [oracle@ol-node-01 ~]$ systemctl --user status mycontainer.service 
    ● mycontainer.service - My Podman Container
         Loaded: loaded (/home/oracle/.config/systemd/user/mycontainer.service; enabled; preset: disabled)
         Active: active (running) since Wed 2025-09-03 15:18:52 GMT; 1min 4s ago
       Main PID: 42554 (podman)
          Tasks: 22 (limit: 201624)
         Memory: 367.0M
            CPU: 7.432s
         CGroup: /user.slice/user-1001.slice/user@1001.service/app.slice/mycontainer.service
                 ├─42554 /usr/bin/podman run --rm --name mycontainer ghcr.io/oracle/oraclelinux9-nginx:1.20
                 ├─42562 /usr/bin/podman run --rm --name mycontainer ghcr.io/oracle/oraclelinux9-nginx:1.20
                 ├─42567 catatonit -P
                 ├─42631 /usr/bin/pasta --config-net --dns-forward 169.254.1.1 -t none -u none -T none -U none --no-map-gw --quiet --net>
                 └─42634 /usr/bin/conmon --api-version 1 -c 9ada6b5a635f05242af94d921c045355a02ff1c5c6843b9b77d4797e6cc48947 -u 9ada6b5a>
    
    Sep 03 15:18:53 ol-node-01 podman[42562]: Getting image source signatures
    Sep 03 15:18:53 ol-node-01 podman[42562]: Copying blob sha256:dc9d5c72c83dcb74035f5659842a5bbdb9ceaaab724e942d1fafba3d9a66583d
    Sep 03 15:18:53 ol-node-01 podman[42562]: Copying blob sha256:768ce871c381eaff86a716a68d16a5fe365a62f4d44ae38e9e8b1ed8fd5bf4bd
    Sep 03 15:18:57 ol-node-01 podman[42562]: Copying config sha256:86da1899be3dbf9500534c241500247aa0467c76ebbeb2431e42433dcf3e4df2
    Sep 03 15:18:57 ol-node-01 podman[42562]: Writing manifest to image destination
    Sep 03 15:18:58 ol-node-01 podman[42562]: 2025-09-03 15:18:58.037335665 +0000 GMT m=+5.552269770 container create 9ada6b5a635f05242a>
    Sep 03 15:18:58 ol-node-01 podman[42562]: 2025-09-03 15:18:58.025938165 +0000 GMT m=+5.540872270 image pull 86da1899be3dbf9500534c24>
    Sep 03 15:18:58 ol-node-01 podman[42562]: 2025-09-03 15:18:58.150895821 +0000 GMT m=+5.665829926 container init 9ada6b5a635f05242af9>
    Sep 03 15:18:58 ol-node-01 podman[42562]: 2025-09-03 15:18:58.156268852 +0000 GMT m=+5.671202956 container start 9ada6b5a635f05242af>
    
    

    这证实 systemd 在 Podman 中启动了一个 Nginx 容器。但是,如果注销,它是否会保持活动状态?

  3. 键入 Ctrl-C 以退出状态输出。

注销后确认服务保持活动状态

接下来,您将退出当前会话,然后重新连接以确认 Podman 服务保持活动状态。

  1. 输入 exit 以离开当前会话。

  2. 通过 SSH 使用最初用于连接的相同连接字符串重新连接到 ol-node-01 实例。

    ssh oracle@<ip_address_of_instance>
    
  3. 确认 Podman 服务处于活动状态。

    podman ps
    
  4. 检查 systemd 服务的状态。

    systemctl --user status mycontainer.service
    

后续步骤

本教程演示了如何使用 Podman 配置 User Lingering。启用滞留允许 Podman 容器作为用户服务在 Oracle Linux 上持续运行,即使在您注销后也是如此。此方法与无根容器管理的现代优秀实践保持一致。有关其他教程和内容,请查看 Oracle Linux 培训站。

更多学习资源

通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心