RHCSA 第六天学习笔记内容简介逻辑卷LVMPV、VG、LV、PEVDO 虚拟数据优化器容器podman 镜像管理、容器运行、网络、systemd 自启。本人个人博客地址Egg-blog一、磁盘管理前置准备先做两个分区大小自定义。添加两个新的分区不要做格式化也不要做挂载——留给后面逻辑卷实验使用。二、逻辑卷LVM逻辑卷的 2 个特点整合多个分区/磁盘可以将多个分区或磁盘整合成一个更大的逻辑磁盘然后从逻辑磁盘上划分出分区逻辑磁盘的大小 整合的物理磁盘大小之和。在线扩容当分区的存储空间不够时不需要移动数据可以直接添加硬盘或分区在原有分区的基础上直接扩容。LVM 核心概念流程PV分区或磁盘→ VG由 PV 整合含 PE→ LV由 VG 转化→ 格式化 → 挂载组件说明PV物理卷由分区或磁盘转化而来分区必须先转化成物理卷才能整合成更大的逻辑磁盘VG卷组由物理卷整合而成VG 大小约等于整合的物理卷大小之和误差大致在一个 PE 内PE物理块卷组上的最小存储单位默认 4MiB。VG 大小 单个 PE 大小 × PE 的数量LV逻辑卷从卷组上划分出来的类似前面讲的分区。有了逻辑卷之后就可以对它格式化、挂载。LV 大小由 VG 分配的 PE 数量决定实操1将未格式化的分区转化成物理卷PVpvcreate 分区路径1 分区路径2查看物理卷信息pvs pvscan pvdisplay2将 PV 整合成卷组VGvgcreate 卷组名自定义 物理卷路径1 物理卷路径2指定 PE 大小通过-s选项vgcreate-sPE大小 卷组名 物理卷路径1 物理卷路径2注意无需加单位默认 MiBPE 的大小必须是2 的倍数如果 VG 已创建好想重新修改 PE 大小只能使用vgremove 卷组名数据会删除后重新创建并指定 PE 大小查看卷组信息vgs vgscan vgdisplay3从卷组上划分逻辑卷LV两种指定 LV 大小的方式# 方式一直接指定逻辑卷的大小大写的 -Llvcreate-L逻辑卷的大小-n逻辑卷名字 卷组名# 方式二通过 PE 的数量来决定逻辑卷大小小写的 -llvcreate-lPE的数量-n逻辑卷名字 卷组名查看逻辑卷的信息lvs lvscan lvdisplay逻辑卷路径的两种写法# 第一种写法 /dev/卷组名/逻辑卷名 # 例/dev/vg123/lv123 # 第二种写法 /dev/mapper/卷组名-逻辑卷名 # 例/dev/mapper/vg123-lv123移除逻辑卷lvremove 逻辑卷的路径# 如 /dev/vg31/lv31lvscan或lvdisplay都可以显示逻辑卷的路径。4格式化与挂载格式化步骤和之前分区步骤一样# 两种方式mkfs.文件系统类型 逻辑卷路径mkfs-t文件系统类型 逻辑卷路径挂载创建挂载点/mnt/lv1然后将逻辑卷lv10永久挂载到/mnt/lv1上文件系统为 xfs 类型没有则自行创建。格式化挂载后——不要删除后续实验还要继续使用。5综合练习创建两个分区设置卷组名为vgredhatPE 大小为 16MiB逻辑卷大小为 56 个扩展块逻辑卷名为lvredhat然后进行格式化xfs并挂载到/mnt/redhat。# 参考流程pvcreate /dev/nvme0n2p1 /dev/nvme0n2p2 vgcreate-s16vgredhat /dev/nvme0n2p1 /dev/nvme0n2p2 lvcreate-l56-nlvredhat vgredhat mkfs.xfs /dev/vgredhat/lvredhatmkdir-p/mnt/redhatmount/dev/vgredhat/lvredhat /mnt/redhat逻辑卷扩容因为逻辑卷是从卷组上划分出来的所以在给逻辑卷扩容时要首先考虑卷组空间够不够。1给卷组扩容步骤创建新的物理卷 → 添加到卷组内# 1. 创建分区并把分区转化成物理卷pvcreate 分区路径# 2. 给卷组扩容vgextend 卷组名 物理卷路径12给逻辑卷存储空间扩容# lvextend指定扩容后的总大小lvextend-L扩容后逻辑卷的大小 要扩容的逻辑卷路径# lvresize在原来的基础上加指定大小lvresize-L100M 逻辑卷路径写法含义-L 100M在原来的基础上加 100M-L 1G直接扩容到 1G3给文件系统进行扩容文件系统类型扩容命令ext 系列resize2fs 逻辑卷的路径xfs 系列xfs_growfs 逻辑卷的路径重点在扩容逻辑卷存储空间时同时扩容文件系统使用-r选项可以一步完成逻辑卷和文件系统的扩容# 在原来的基础上加 10Glvextend-r-L10G 要扩容的逻辑卷路径# 直接扩容到 10Glvextend-r-L10G 要扩容的逻辑卷路径-r给逻辑卷扩容的同时也给文件系统扩容。练习将lvredhat逻辑卷格式化为 ext4永久挂载到/mnt/lv2自行创建挂载点然后对lvredhat进行扩容扩容至 5G。mkfs.ext4 /dev/vgredhat/lvredhatmkdir-p/mnt/lv2# 编辑 /etc/fstab 实现永久挂载lvextend-r-L5G /dev/vgredhat/lvredhat三、VDO虚拟数据优化器—了解内容VDOVirtual Data Optimizer是一种提供内嵌块级别的重复数据删除、压缩等功能的技术非常适合作为一个可能存在大量重复数据的使用场景例如虚拟机磁盘、用户上传的数据等。LVM VDO 的组成LVM VDO通过两个逻辑卷构成组件说明VDO POOL LV用于 LV 存储、重复数据删除和压缩的后端物理设备。设置 VDO 卷的物理大小即可保存到磁盘中的数据量实际对应消耗的卷组空间。每个 VDO POOL LV 只能有一个 VDO LVVDO LVVDO POOL LV 上的虚拟置备设备。设定 VDO 卷的置备和逻辑大小即应用在重复数据删除和压缩发生前可写入卷的数据量操作命令# 安装 vdo 相关软件dnfinstallvdo kmod-kvdo# 流程未格式化的分区 → 物理卷 → 卷组 → VDO 卷 → 格式化 → 挂载# 创建 VDO 卷lvcreate--typevdo--namevdo卷名称--size5G 卷组名称# 格式化mkfs.格式化类型 vdo路径mkfs-t格式化类型 vdo路径# 挂载同普通逻辑卷三种磁盘管理方式对比方式流程磁盘管理新加磁盘 → 分区 → 格式化文件系统→ 挂载提供入口逻辑卷未格式化分区 → PV → VG → LV → 格式化 → 挂载VDO 卷未格式化分区 → PV → VG → VDO 卷 → 格式化 → 挂载四、容器podman兼容 docker容器简介容器是一个虚拟化技术可以将软件运行所需的环境一起打包运行从而减少运维由于环境不兼容等带来的麻烦。容器和传统虚拟化的区别容器是针对内核级别的虚拟化传统虚拟化是针对操作系统级别的虚拟化所以容器的响应速度更快容器所处的系统环境是专门定制的所以容器可以更加小巧注意不要把容器想的太复杂——把容器类比成一个软件本节主要讲的就是如何下载软件、安装软件、运行软件、软件的开机自启。核心流程镜像仓库→ 拉取镜像 → 创建容器 → 运行实操准备工作请确保相关的一些文件传输到 RHEL 环境中存放在redhat用户的~/images目录下。1. 搭建容器仓库1安装容器工具首先需要确保系统环境中安装了podman程序。可以直接安装podman软件也可以安装container-tools软件包来提供完整的容器管理相关的所有工具。注意需要确保redhat用户是正常通过 SSH 登录的整个操作过程中不允许出现su -切换。2导入容器镜像可以使用podman load命令导入别人准备好的容器镜像文件。3登录镜像仓库对容器镜像注册站点进行特定身份的登录使用红帽订阅账号登录红帽官方的镜像仓库。4通过网络下载容器镜像podmanpull registry.redhat.io/ubi9/ubi:9.0.0-1703容器镜像命名规则每个容器镜像有着标准的命名规则容器注册站点/站点用户/容器镜像名:标签部分说明是否必须容器注册站点容器镜像所在的注册站点域名可省略站点用户容器镜像属于注册站点上的哪一个用户可省略容器镜像名具体描述容器镜像通常和镜像作用有关必须标签描述容器镜像版本可通过skopeo inspect的RepoTags查看默认为latest可省略红帽推荐任何时候都使用完整的容器镜像名称确保每次操作指定的容器镜像唯一。构建自定义容器镜像可以通过Containerfile或Dockerfile文件使用podman build命令构建一个自定义的容器镜像。[redhatworkstation ~]$mkdirmyimage# 准备专门的一个目录[redhatworkstation ~]$cdmyimage/# 切换工作目录[redhatworkstation myimage]$vimContainerfile# 创建 Containerfile也可以是 Dockerfile基于红帽官方 UBI9 基础镜像制作一个预装 vim 编辑器、启动后永久后台运行的容器镜像[redhatworkstation myimage]$ cat Containerfile FROM registry.redhat.io/ubi9/ubi:9.0.0-1703 RUN dnf install -y vim CMD [/bin/bash, -c, sleep infinity]各行含义行说明FROM指定构建的基础镜像红帽官方 UBI9 标准版固定版本 9.0.0-1703RUN构建时执行的操作dnf install -y vimdnf是 RHEL9/UBI9 的包管理器替代 yum-y自动确认安装CMD容器启动后执行的默认命令启动 bash 并执行sleep infinity永久休眠让容器持续运行sleep infinity会启动一个「永久休眠的进程」作为 PID1不占用 CPU 资源、不输出日志、不会异常退出。大多数容器镜像都可以依照类似文件来创建通常由开发人员编写。构建镜像[redhatworkstation myimage]$podmanbuild-tmyimage.# 在当前目录下搜索 Containerfile 或 Dockerfile读取内容构建镜像并命名为 myimage查看已有的容器镜像podmanimagespodmanimagerm镜像名# 删除镜像2. 运行容器有了容器镜像之后就可以使用podman run命令来基于一个容器镜像启动一个容器。podman run常用参数参数说明-d让容器在后台运行--name给容器指定一个名称-p将容器的某个端口和宿主机上的某个端口建立连接通过宿主机端口访问容器服务。格式-p 本地端口:容器端口-v将宿主机上的某个目录挂载到容器内的某个目录让容器和宿主机共享文件。格式-v 本地路径:容器内路径:zz保证 SELinux 上下文一致-e向容器内传递环境变量通常和容器启动脚本或方式有直接关联-p、-v、-e三个选项可以重复调用多次。示例podmanrun--nameweb-d-p8888:80 httpd# 通过本地 IP:8888 即可访问容器 IP:80 的内容# 使用 httpd 镜像创建容器 web01通过访问主机的 8080 端口访问容器内的 8080 端口挂载目录-v详解# 容器内的存储路径只是作为一个入口真正的数据保存在本地主机的存储路径上# z 的作用保证 SELinux 上下文一致[redhatlocalhost ~]$mkdir-pwww[redhatlocalhost ~]$echohello./www/index.html[redhatlocalhost ~]$podmanrun-d--nameweb03-p8081:8080\-v/home/redhat/www/:/var/www/html/:z\registry.redhat.io/ubi9/httpd-24:1-2623. 容器管理命令查看容器podmanps-a# 查看所有的容器在容器内执行命令# 执行简单命令非交互式操作的命令podmanexecweb01ls-l/root# 执行复杂命令包含管道符、重定向等使用 sh -c 或 bash -c 封装podmanexecpycontainer1sh-cls -l /root此命令模式只支持非交互式的命令vim等不可使用。容器的启动、停止、重启、删除podmanstart 容器名称# 启动容器可使用容器名称或 IDpodmanstop 容器名称# 停止容器podmanrestart 容器名称# 重启容器podmanrm容器名称# 删除容器注意如果没有在容器运行时添加-v选项删除容器时容器内的数据将全部丢失容器创建只有一次机会若想修改podman run中定义的内容需要先删除错误创建的容器再重新创建4. 容器网络创建容器网络podmannetwork create--gateway10.99.0.1--subnet10.99.0.0/16 test_net# 创建一个网关为 10.99.0.1子网为 10.99.0.0/16 的容器网络查看网络详细信息podmannetwork inspect test_net指定容器运行在某个网络中在同一个容器网络中的容器相互之间可以直接使用容器名作为互相访问的地址。podmanrun-d--nametest1--networktest_net localhost/myimage:latestpodmanrun-d--nametest2--networktest_net localhost/myimage:latest# 给容器 test1 和 test2 安装 ping 命令所需的基础软件包podmanexectest1pingtest2podmanexectest2pingtest15. 基于 systemd 的自启动容器对于 podman 创建的容器若想实现开机自启需要通过 systemd 进行管理主要针对 rootless 级别的容器——容器不推荐使用 root 用户去执行存在严重的安全问题。1允许用户进程驻留在系统中[redhatlocalhost ~]$ loginctl enable-linger2创建容器服务所需目录记住对应路径[redhatlocalhost ~]$mkdir-p~/.config/systemd/user[redhatlocalhost ~]$cd~/.config/systemd/user[redhatlocalhost user]$pwd/home/redhat/.config/systemd/user3将容器注册成用户级别的服务[redhatlocalhost user]$podmangenerate systemd--nameweb01--files/home/redhat/.config/systemd/user/container-web01.service4刷新用户级别的 systemd 单元文件[redhatlocalhost user]$ systemctl--userdaemon-reload5停止基于 podman 直接对容器的启动改用 systemd 接管[redhatlocalhost user]$podmanstop web01[redhatlocalhost user]$ systemctl--userstart container-web01.service[redhatlocalhost user]$ systemctl--userenablecontainer-web01.service
RHCSA 第六天学习笔记
RHCSA 第六天学习笔记内容简介逻辑卷LVMPV、VG、LV、PEVDO 虚拟数据优化器容器podman 镜像管理、容器运行、网络、systemd 自启。本人个人博客地址Egg-blog一、磁盘管理前置准备先做两个分区大小自定义。添加两个新的分区不要做格式化也不要做挂载——留给后面逻辑卷实验使用。二、逻辑卷LVM逻辑卷的 2 个特点整合多个分区/磁盘可以将多个分区或磁盘整合成一个更大的逻辑磁盘然后从逻辑磁盘上划分出分区逻辑磁盘的大小 整合的物理磁盘大小之和。在线扩容当分区的存储空间不够时不需要移动数据可以直接添加硬盘或分区在原有分区的基础上直接扩容。LVM 核心概念流程PV分区或磁盘→ VG由 PV 整合含 PE→ LV由 VG 转化→ 格式化 → 挂载组件说明PV物理卷由分区或磁盘转化而来分区必须先转化成物理卷才能整合成更大的逻辑磁盘VG卷组由物理卷整合而成VG 大小约等于整合的物理卷大小之和误差大致在一个 PE 内PE物理块卷组上的最小存储单位默认 4MiB。VG 大小 单个 PE 大小 × PE 的数量LV逻辑卷从卷组上划分出来的类似前面讲的分区。有了逻辑卷之后就可以对它格式化、挂载。LV 大小由 VG 分配的 PE 数量决定实操1将未格式化的分区转化成物理卷PVpvcreate 分区路径1 分区路径2查看物理卷信息pvs pvscan pvdisplay2将 PV 整合成卷组VGvgcreate 卷组名自定义 物理卷路径1 物理卷路径2指定 PE 大小通过-s选项vgcreate-sPE大小 卷组名 物理卷路径1 物理卷路径2注意无需加单位默认 MiBPE 的大小必须是2 的倍数如果 VG 已创建好想重新修改 PE 大小只能使用vgremove 卷组名数据会删除后重新创建并指定 PE 大小查看卷组信息vgs vgscan vgdisplay3从卷组上划分逻辑卷LV两种指定 LV 大小的方式# 方式一直接指定逻辑卷的大小大写的 -Llvcreate-L逻辑卷的大小-n逻辑卷名字 卷组名# 方式二通过 PE 的数量来决定逻辑卷大小小写的 -llvcreate-lPE的数量-n逻辑卷名字 卷组名查看逻辑卷的信息lvs lvscan lvdisplay逻辑卷路径的两种写法# 第一种写法 /dev/卷组名/逻辑卷名 # 例/dev/vg123/lv123 # 第二种写法 /dev/mapper/卷组名-逻辑卷名 # 例/dev/mapper/vg123-lv123移除逻辑卷lvremove 逻辑卷的路径# 如 /dev/vg31/lv31lvscan或lvdisplay都可以显示逻辑卷的路径。4格式化与挂载格式化步骤和之前分区步骤一样# 两种方式mkfs.文件系统类型 逻辑卷路径mkfs-t文件系统类型 逻辑卷路径挂载创建挂载点/mnt/lv1然后将逻辑卷lv10永久挂载到/mnt/lv1上文件系统为 xfs 类型没有则自行创建。格式化挂载后——不要删除后续实验还要继续使用。5综合练习创建两个分区设置卷组名为vgredhatPE 大小为 16MiB逻辑卷大小为 56 个扩展块逻辑卷名为lvredhat然后进行格式化xfs并挂载到/mnt/redhat。# 参考流程pvcreate /dev/nvme0n2p1 /dev/nvme0n2p2 vgcreate-s16vgredhat /dev/nvme0n2p1 /dev/nvme0n2p2 lvcreate-l56-nlvredhat vgredhat mkfs.xfs /dev/vgredhat/lvredhatmkdir-p/mnt/redhatmount/dev/vgredhat/lvredhat /mnt/redhat逻辑卷扩容因为逻辑卷是从卷组上划分出来的所以在给逻辑卷扩容时要首先考虑卷组空间够不够。1给卷组扩容步骤创建新的物理卷 → 添加到卷组内# 1. 创建分区并把分区转化成物理卷pvcreate 分区路径# 2. 给卷组扩容vgextend 卷组名 物理卷路径12给逻辑卷存储空间扩容# lvextend指定扩容后的总大小lvextend-L扩容后逻辑卷的大小 要扩容的逻辑卷路径# lvresize在原来的基础上加指定大小lvresize-L100M 逻辑卷路径写法含义-L 100M在原来的基础上加 100M-L 1G直接扩容到 1G3给文件系统进行扩容文件系统类型扩容命令ext 系列resize2fs 逻辑卷的路径xfs 系列xfs_growfs 逻辑卷的路径重点在扩容逻辑卷存储空间时同时扩容文件系统使用-r选项可以一步完成逻辑卷和文件系统的扩容# 在原来的基础上加 10Glvextend-r-L10G 要扩容的逻辑卷路径# 直接扩容到 10Glvextend-r-L10G 要扩容的逻辑卷路径-r给逻辑卷扩容的同时也给文件系统扩容。练习将lvredhat逻辑卷格式化为 ext4永久挂载到/mnt/lv2自行创建挂载点然后对lvredhat进行扩容扩容至 5G。mkfs.ext4 /dev/vgredhat/lvredhatmkdir-p/mnt/lv2# 编辑 /etc/fstab 实现永久挂载lvextend-r-L5G /dev/vgredhat/lvredhat三、VDO虚拟数据优化器—了解内容VDOVirtual Data Optimizer是一种提供内嵌块级别的重复数据删除、压缩等功能的技术非常适合作为一个可能存在大量重复数据的使用场景例如虚拟机磁盘、用户上传的数据等。LVM VDO 的组成LVM VDO通过两个逻辑卷构成组件说明VDO POOL LV用于 LV 存储、重复数据删除和压缩的后端物理设备。设置 VDO 卷的物理大小即可保存到磁盘中的数据量实际对应消耗的卷组空间。每个 VDO POOL LV 只能有一个 VDO LVVDO LVVDO POOL LV 上的虚拟置备设备。设定 VDO 卷的置备和逻辑大小即应用在重复数据删除和压缩发生前可写入卷的数据量操作命令# 安装 vdo 相关软件dnfinstallvdo kmod-kvdo# 流程未格式化的分区 → 物理卷 → 卷组 → VDO 卷 → 格式化 → 挂载# 创建 VDO 卷lvcreate--typevdo--namevdo卷名称--size5G 卷组名称# 格式化mkfs.格式化类型 vdo路径mkfs-t格式化类型 vdo路径# 挂载同普通逻辑卷三种磁盘管理方式对比方式流程磁盘管理新加磁盘 → 分区 → 格式化文件系统→ 挂载提供入口逻辑卷未格式化分区 → PV → VG → LV → 格式化 → 挂载VDO 卷未格式化分区 → PV → VG → VDO 卷 → 格式化 → 挂载四、容器podman兼容 docker容器简介容器是一个虚拟化技术可以将软件运行所需的环境一起打包运行从而减少运维由于环境不兼容等带来的麻烦。容器和传统虚拟化的区别容器是针对内核级别的虚拟化传统虚拟化是针对操作系统级别的虚拟化所以容器的响应速度更快容器所处的系统环境是专门定制的所以容器可以更加小巧注意不要把容器想的太复杂——把容器类比成一个软件本节主要讲的就是如何下载软件、安装软件、运行软件、软件的开机自启。核心流程镜像仓库→ 拉取镜像 → 创建容器 → 运行实操准备工作请确保相关的一些文件传输到 RHEL 环境中存放在redhat用户的~/images目录下。1. 搭建容器仓库1安装容器工具首先需要确保系统环境中安装了podman程序。可以直接安装podman软件也可以安装container-tools软件包来提供完整的容器管理相关的所有工具。注意需要确保redhat用户是正常通过 SSH 登录的整个操作过程中不允许出现su -切换。2导入容器镜像可以使用podman load命令导入别人准备好的容器镜像文件。3登录镜像仓库对容器镜像注册站点进行特定身份的登录使用红帽订阅账号登录红帽官方的镜像仓库。4通过网络下载容器镜像podmanpull registry.redhat.io/ubi9/ubi:9.0.0-1703容器镜像命名规则每个容器镜像有着标准的命名规则容器注册站点/站点用户/容器镜像名:标签部分说明是否必须容器注册站点容器镜像所在的注册站点域名可省略站点用户容器镜像属于注册站点上的哪一个用户可省略容器镜像名具体描述容器镜像通常和镜像作用有关必须标签描述容器镜像版本可通过skopeo inspect的RepoTags查看默认为latest可省略红帽推荐任何时候都使用完整的容器镜像名称确保每次操作指定的容器镜像唯一。构建自定义容器镜像可以通过Containerfile或Dockerfile文件使用podman build命令构建一个自定义的容器镜像。[redhatworkstation ~]$mkdirmyimage# 准备专门的一个目录[redhatworkstation ~]$cdmyimage/# 切换工作目录[redhatworkstation myimage]$vimContainerfile# 创建 Containerfile也可以是 Dockerfile基于红帽官方 UBI9 基础镜像制作一个预装 vim 编辑器、启动后永久后台运行的容器镜像[redhatworkstation myimage]$ cat Containerfile FROM registry.redhat.io/ubi9/ubi:9.0.0-1703 RUN dnf install -y vim CMD [/bin/bash, -c, sleep infinity]各行含义行说明FROM指定构建的基础镜像红帽官方 UBI9 标准版固定版本 9.0.0-1703RUN构建时执行的操作dnf install -y vimdnf是 RHEL9/UBI9 的包管理器替代 yum-y自动确认安装CMD容器启动后执行的默认命令启动 bash 并执行sleep infinity永久休眠让容器持续运行sleep infinity会启动一个「永久休眠的进程」作为 PID1不占用 CPU 资源、不输出日志、不会异常退出。大多数容器镜像都可以依照类似文件来创建通常由开发人员编写。构建镜像[redhatworkstation myimage]$podmanbuild-tmyimage.# 在当前目录下搜索 Containerfile 或 Dockerfile读取内容构建镜像并命名为 myimage查看已有的容器镜像podmanimagespodmanimagerm镜像名# 删除镜像2. 运行容器有了容器镜像之后就可以使用podman run命令来基于一个容器镜像启动一个容器。podman run常用参数参数说明-d让容器在后台运行--name给容器指定一个名称-p将容器的某个端口和宿主机上的某个端口建立连接通过宿主机端口访问容器服务。格式-p 本地端口:容器端口-v将宿主机上的某个目录挂载到容器内的某个目录让容器和宿主机共享文件。格式-v 本地路径:容器内路径:zz保证 SELinux 上下文一致-e向容器内传递环境变量通常和容器启动脚本或方式有直接关联-p、-v、-e三个选项可以重复调用多次。示例podmanrun--nameweb-d-p8888:80 httpd# 通过本地 IP:8888 即可访问容器 IP:80 的内容# 使用 httpd 镜像创建容器 web01通过访问主机的 8080 端口访问容器内的 8080 端口挂载目录-v详解# 容器内的存储路径只是作为一个入口真正的数据保存在本地主机的存储路径上# z 的作用保证 SELinux 上下文一致[redhatlocalhost ~]$mkdir-pwww[redhatlocalhost ~]$echohello./www/index.html[redhatlocalhost ~]$podmanrun-d--nameweb03-p8081:8080\-v/home/redhat/www/:/var/www/html/:z\registry.redhat.io/ubi9/httpd-24:1-2623. 容器管理命令查看容器podmanps-a# 查看所有的容器在容器内执行命令# 执行简单命令非交互式操作的命令podmanexecweb01ls-l/root# 执行复杂命令包含管道符、重定向等使用 sh -c 或 bash -c 封装podmanexecpycontainer1sh-cls -l /root此命令模式只支持非交互式的命令vim等不可使用。容器的启动、停止、重启、删除podmanstart 容器名称# 启动容器可使用容器名称或 IDpodmanstop 容器名称# 停止容器podmanrestart 容器名称# 重启容器podmanrm容器名称# 删除容器注意如果没有在容器运行时添加-v选项删除容器时容器内的数据将全部丢失容器创建只有一次机会若想修改podman run中定义的内容需要先删除错误创建的容器再重新创建4. 容器网络创建容器网络podmannetwork create--gateway10.99.0.1--subnet10.99.0.0/16 test_net# 创建一个网关为 10.99.0.1子网为 10.99.0.0/16 的容器网络查看网络详细信息podmannetwork inspect test_net指定容器运行在某个网络中在同一个容器网络中的容器相互之间可以直接使用容器名作为互相访问的地址。podmanrun-d--nametest1--networktest_net localhost/myimage:latestpodmanrun-d--nametest2--networktest_net localhost/myimage:latest# 给容器 test1 和 test2 安装 ping 命令所需的基础软件包podmanexectest1pingtest2podmanexectest2pingtest15. 基于 systemd 的自启动容器对于 podman 创建的容器若想实现开机自启需要通过 systemd 进行管理主要针对 rootless 级别的容器——容器不推荐使用 root 用户去执行存在严重的安全问题。1允许用户进程驻留在系统中[redhatlocalhost ~]$ loginctl enable-linger2创建容器服务所需目录记住对应路径[redhatlocalhost ~]$mkdir-p~/.config/systemd/user[redhatlocalhost ~]$cd~/.config/systemd/user[redhatlocalhost user]$pwd/home/redhat/.config/systemd/user3将容器注册成用户级别的服务[redhatlocalhost user]$podmangenerate systemd--nameweb01--files/home/redhat/.config/systemd/user/container-web01.service4刷新用户级别的 systemd 单元文件[redhatlocalhost user]$ systemctl--userdaemon-reload5停止基于 podman 直接对容器的启动改用 systemd 接管[redhatlocalhost user]$podmanstop web01[redhatlocalhost user]$ systemctl--userstart container-web01.service[redhatlocalhost user]$ systemctl--userenablecontainer-web01.service