runC运行容器
一、RunC是什么
RunC 是一个轻量级的工具,它是用来运行容器的,只用来做这一件事,是一种运行容器的运行时,它负责利用符合标准的文件等资源运行容器,但是它不包含 docker 那样的镜像管理功能。所以要用 runC 运行容器,我们先得准备好容器的文件系统。所谓的 OCI bundle 就是 rootfs文件系统 + config.json 文件。有了容器的文件系统后我们可以通过 runc spec 命令来生成 config.json 文件。
几张图理解下runc的位置
K8S运行生态

kubelet和container管理关系

各种level的容器运行时

二、RunC安装
# yum -y install libseccomp libseccomp-dev gcc gcc-c++
# git clone https://github.com/opencontainers/runc.git
# make
# make install
三、RunC运行容器
创建OCI bundle
创建一个runc的目录包含一个标准文件夹rootfs
# mkdir -p snakecontainer/rootfs
# cd snakecontainer/
提前pull好一个busybox镜像,然后基于镜像制作bootfs
# cd rootfs && docker export $(docker create busybox) | tar -C rootfs -xvf -
声明config.json
# runc spec
经过以上步骤一个标准的runc运行目录就建好了,rootfs+config.json
修改config.json文件
terminal": true 修改为 terminal": false
执行tree -L 2 .命令,查看一下目录结构:
.
├── config.json
└── rootfs
├── bin
├── dev
├── etc
├── home
├── lib
├── lib64 -> lib
├── linuxrc -> bin/busybox
├── media
├── mnt
├── opt
├── proc
├── root
├── run -> tmp
├── sbin
├── sys
├── tmp
├── usr
└── var
18 directories, 2 files
运行创建好的容器
runc create snakebusybox
查看运行状态
执行runc list得到:
ID PID STATUS BUNDLE CREATED OWNER
snakebusybox 112633 created /root/snakechen/snakecontainer 2022-09-25T03:56:00.023094895Z root
执行runc state snakebusybox得到:
{
"ociVersion": "1.0.2-dev",
"id": "snakebusybox",
"pid": 112633,
"status": "created",
"bundle": "/root/snakechen/snakecontainer",
"rootfs": "/root/snakechen/snakecontainer/rootfs",
"created": "2022-09-25T03:56:00.023094895Z",
"owner": ""
}
其他命令,可以用help
runc ps snakebusybox
runc events snakebusybox
runc delete snakebusybox