Crun:功能齐全的OCI运行时和用于运行容器的C库

2021-01-31 17:22:23

尽管Linux容器生态系统中使用的大多数工具都是用Go编写的,但我相信C更适合于容器运行时等较低级别的工具。 runc是用Go编写的OCI运行时规范的最常用的实现,它会重新执行自身,并使用C编写的模块在容器进程开始之前设置环境。

crun的目标是也可以用作可轻松包含在程序中的库,而无需外部流程来管理OCI容器。

这是我的机器上连续运行100个容器所经过的时间,容器运行/ bin / true:

crun需要较少的资源,因此也可以对内存和容器中允许的PID数量设置更严格的限制:

#podman --runtime / usr / bin / runc run --rm --pids-limit 1 fedora可以正常工作错误:container_linux.go:346:启动容器进程导致" process_linux.go:319:获取最终版本管道的子pid导致\\#34; EOF \"&#34 ;: OCI运行时错误#podman --runtime / usr / bin / crun run --rm --pids-limit 1 fedora echo可以正常工作#podman --runtime / usr / bin / runc run --rm --memory 4M fedora可以正常工作错误:container_linux.go:346:启动容器进程导致" process_linux.go:327:为pid 13859获取管道fds导致\" readlink / proc / 13859 / fd / 0:找不到此类文件或目录\"&#34 ;:找不到OCI运行时命令错误#podman --runtime / usr / bin / crun run --rm --memory 4M fedora可以正常工作

碎屑可以比这低得多,并且需要< 1M。使用的4MB是在调用OCI运行时之前直接在Podman中设置的硬限制。

$ sudo dnf install -y make python git gcc automake autoconf libcap-devel \ systemd-devel yajl-devel libseccomp-devel \ go-md2man glibc-static python3-libmount libtool

$ sudo yum --enablerepo =' *'安装-y make automake autoconf gettext \ libtool gcc libcap-devel systemd-devel yajl-devel \ libseccomp-devel python36 libtool

go-md2man在RHEL / CentOS 8上不可用,因此,如果要构建手册页,还需要手动安装go-md2man。可以安装:

$ sudo apt-get install -y make git gcc build-essential pkgconf libtool \ libsystemd-dev libcap-dev libseccomp-dev libyajl-dev \ go-md2man libtool autoconf python3 automake

#apk添加gcc automake autoconf libtool gettext pkgconf git make musl-dev \ python3 libcap-dev libseccomp-dev yajl-dev argp-standalone go-md2man

#zypper install make automake autoconf getconf libtool gcc libcap-devel \ systemd-devel yajl-devel libseccomp-devel python3 libtool go-md2man;

除非您也正在构建Python绑定,否则libocispec仅需要Python才能在构建时生成C解析器,此后将不使用它。

先前的构建说明未启用共享库,因此您将无法使用libcrun。如果要构建共享库,可以将之前的./configure.sh语句更改为./configure --enable-shared。

通过使用官方提供的nixpackage及其在此存储库中的派生,可以构建crun的静态链接二进制文件。 构建完全可复制,并将为glibc创建一个x86_64 / amd64stripped ELF二进制文件。 Ansible Role也可用于在其受支持的OS上自动安装上述静态链接的二进制文件: $ sudo su-#mkdir -p〜/ .ansible / roles#cd〜/ .ansible / roles#git clone https://github.com/alvistack/ansible-role-crun.git crun#cd〜/ .ansible / 角色/运行#pip3 install --upgrade --ignore-installed --requirement requirements.txt#分子聚合#分子验证