注意:
- Oracle 提供的免费实验室环境中提供了此教程。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间的示例值。完成实验室时,请将这些值替换为特定于云环境的值。
在 Oracle Linux 上配置使用 Podman 的用户逗留
简介
Systemd 提供用户留存功能,允许用户服务(例如使用 systemd 用户单元启动的容器)在用户注销后保持活动状态。否则,用户服务管理器(及其容器)将在注销时停止。
目标
在本教程中,您将学习:
- 使用 Podman 创建和运行 Pods。
- 使用 Podman 管理 Pod。
- 使用 Podman 删除 Pods。
先决条件
-
最少一个 Oracle Linux 系统
-
每个系统都应安装 Oracle Linux 并进行以下配置:
- 具有 sudo 访问权限的非 root 用户帐户
- 访问 Internet
部署 Oracle Linux
注:如果在您自己的租户中运行,请在部署实验环境之前阅读 linux-virt-labs GitHub 项目 README.md 并完成先决条件。
-
在 Luna Desktop 上打开一个终端。
-
克隆
linux-virt-labsGitHub 项目。git clone https://github.com/oracle-devrel/linux-virt-labs.git -
转到工作目录。
cd linux-virt-labs/ol -
安装所需集合。
ansible-galaxy collection install -r requirements.yml -
部署实验室环境。
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 和关联的依赖项。
-
打开终端并通过 SSH 连接到 ol-node-01 实例。
ssh oracle@<ip_address_of_instance> -
检查 Podman 的版本。
podman -v -
确认 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。
-
为
oracle用户启用持久性。sudo loginctl enable-linger oracle
为 Podman 创建 Systemd 单元文件
-
为 systemd 单元文件创建一个目录。
mkdir -p ~/.config/systemd/user -
创建 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 -
启动并启用 Systemd 服务。
systemctl --user daemon-reload systemctl --user enable --now mycontainer.service
确认 Systemd 已启动 Podman
-
确认服务已启动 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 -
检查 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 容器。但是,如果注销,它是否会保持活动状态?
-
键入
Ctrl-C以退出状态输出。
注销后确认服务保持活动状态
接下来,您将退出当前会话,然后重新连接以确认 Podman 服务保持活动状态。
-
输入
exit以离开当前会话。 -
通过 SSH 使用最初用于连接的相同连接字符串重新连接到 ol-node-01 实例。
ssh oracle@<ip_address_of_instance> -
确认 Podman 服务处于活动状态。
podman ps -
检查 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 帮助中心。