一、 在CTyunOS-2.0.1上进行podman-3.0的移植
在CTyunOS上自带了podman软件,但是podman软件的版本比较低,版本为0.10版本,一些podman的功能并没有提供,在直接使用的时候,可能还需要配置一下环境变量的配置文件,如果对容器或者podman不熟悉的人直接上手可能还存在一些问题,因此我们移植一个比较成熟的podman3到CTyunOS系统中(手动编译)。
移植的主要步骤如下:
- 下载源码包
- 编译源码包
- 解决依赖
- 依赖全部解决进入下一步,有不满足的依赖包则回到步骤1
- 安装编译好的podman
本次移植podman需要的软件包及其依赖包含如下:
- fuse-overlayfs
- golang-1.15.7-1
- podman-3.0.1-13
- runc-1.0.3-3
- slirp4netns-0.4.2-3
以上依赖的软件包中包含了golang,虽然podman-3.0.1的编译依赖中对golang的要求的版本是1.12.12,但是在编译过程中会报错,导致无法编译成功,因此选择自行升级golang版本,对podman进行编译。在使用0329版本CTyunOS的everything版本的ISO做本地源编译fuse-overlayfs的时候,需要手动安装下fuse3这个编译依赖,在fuse-overlayfs的包中未写全依赖。
移植编译完成之后有两种方式进行podman安装:
1. 通过yum install xx.rpm进行安装 – 需要自己去手动解决未选中的依赖包
2. 做一个临时yum源然后通过yum来安装
二、使用pod
容器是使用podman管理的最小单元。Podman pod是一个或多个容器的组。Pod的概念是由Kubernetes引入的。
在podman创建pod的时候可能存在pod由于无法下载pause镜像而导致pod创建失败的问题。可以通过镜像站点下载然后重新打tag来完成。
创建空pod及查看pod的命令如下:
在现有的pod中运行一个httpd容器:
还可以通过命令查看当前pod中容器运行的进程占用的资源情况(如果pod中只有pause一个容器,则podman pod top podname则不会有输出,pause容器不会占用资源):
使用curl来验证当前httpd容器是否可以正常运行:
查看pod中容器的资源使用情况:
三、修改podman的容器运行时
podman支持runc和crun两种容器运行时。crun是runc的c语言实现版本,目前高版本的podman默认使用的是crun这个容器运行时。crun具有体积小,运行速度快的优势。以下为crun和runc的可执行文件大小的对比:
1. 临时修改容器运行时
podman中临时修改容器运行时通过在创建容器的时候添加—runtime=runc/crun。
2. 修改默认容器运行时
修改默认的容器运行时需要根据不同用户进行修改,普通用户的修改不会影响root用户的容器运行时,也不会影响其他用户的容器运行时。
Format格式的在帮助手册中没有,需要我们自己去代码中查找相关字段进行测试。
参考连接:
podman官网文档: What is Podman? — Podman documentation
红帽官方文档: Building, running, and managing containers Red Hat Enterprise Linux 8 | Red Hat Customer Portal