官方说明:runC是一个根据OCI(Open Container Initiative)标准创建并运行容器的CLI tool
解释说明:简单理解,runc其实就是Docker最核心的部分,runc可以不通过Docker引擎,直接创建,运行,销毁容器。
系统:CentOS Linux release 7.5.1804 (Core)
runc:runc version 1.0.0-rc5
runc的组成分为三部分:
1.文件系统
2.config.json配置文件
3.entrypoint.sh入口
使用docker可以很容易的生成runc容器的文件系统,ps:runc就是docker贡献给社区的。
# docker pull centos
# mkdir -p /home/runc_test/rootfs
# cd /home/runc_test/
# docker export $(docker create centos) | tar -C rootfs -xvf -
现在rootfs目录下就是centos镜像的文件系统。然后我们生成config.json配置文件
# runc spec
此时同级目录下会创建出config.json
现在我们编写entrypoint.sh放在rootfs目录下并给权限rwxr-xr-x(0755)
entrypoint.sh的作用就是在启动容器之前做一些初始化配置,比如启动一些服务之类的。
entrypoint.sh:
#!/usr/sbin/init
trap "exit 0" SIGTERM
crond &
/etc/rc.local &
while true; do
sleep 1s
done
我们写了一个最简单的入口脚本,具体编写方式自行搜索,因为每个人创建的环境需要不同,本文只做简单使用演示。
本人比较懒,写了启动,关闭,和进入容器的脚本。
start.sh:
confpath="./ct.conf"
source "$confpath"
echo "starting .. $ctname"
runc run -d $ctname &
stop.sh:
confpath="./ct.conf"
source "$confpath"
echo "stopping .. $ctname"
runc kill $ctname KILL
runc delete $ctname
enter.sh:
confpath="./ct.conf"
source "$confpath"
echo "starting .. $ctname"
runc exec -t $ctname /bin/bash
ct.conf:
ctname=自定义命名
creating:使用 create 命令创建容器,这个过程称为创建中
created:容器已经创建出来,但是还没有运行,表示镜像文件和配置没有错误,容器能够在当前平台上运行
running:容器里面的进程处于运行状态,正在执行用户设定的任务
stopped:容器运行完成,或者运行出错,容器还有很多信息保存在平台中,并没有完全被删除
paused:暂停容器中的所有进程,可以使用 resume 命令恢复这些进程的执行
查看容器内进程:runc ps $ctname
容器中执行命令:runc exec $ctname ls
删除容器 :runc delete $ctname 一般我们用来删除stooped状态的容器
停止容器中任务:runc kill $ctname 默认会和谐的结束容器中的进程,特殊情况可以加参数9
暂停容器中进程:runc pause $ctname 状态会由running 变成了paused,可以通过 resume 命令恢复容器
资源使用状况 :runc events $ctname
网上一些runc start -b 。。报错是因为1.0.0版本不支持,之前用的0.4.0可以使用。具体支持的参数和使用方法,详见runc --help