runc命令行工具基本使用

runc是linux上一个用来运行容器的管理工具,遵循OCI规范。

首先,我们通过一些简单的例子来演示一下runc创建和启动容器的例子:

mkdir /tmp/mycontainer
cd /tmp/mycontainer
# 创建容器文件系统
mkdir rootfs
# 导出busybox系统目录到rootfs
docker export $(docker create busybox) | tar -C rootfs -xvf -

下面来生成一个spec文件:config.json。runc提供一个一个spec命令帮助我们生成一个基础的模板,后续我们可以基于这个模板作出自定义的修改。

ruc spec

启动容器:

root@workstation:/tmp/testrunc# runc run mycontainer
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
/ # hostname
runc
/ #

这个run命令会帮助我们自动的删除容器,创建和启动容器。我们也可以通过单独的命令去做这些事情,下面进行演示。首先需要修改config.json,将其中的terminal改为false,并修改args为sleep 60。

        "process": {
                "terminal": false,
                "user": {
                        "uid": 0,
                        "gid": 0
                },
                "args": [
                        "sleep", "60"
                ],

下面通过create命令启动容器:

root@workstation:/tmp/testrunc# runc create mycontainer
root@workstation:/tmp/testrunc# ps aux | grep runc
root     2557581  0.0  0.0 1081824 9736 ?        Ssl  15:54   0:00 runc init
root     2557591  0.0  0.0  12320  2396 pts/0    S+   15:54   0:00 grep --color=auto runc

可以看到runc帮助我们创建了容器,现在这个进程正在阻塞在写exec.fifo(默认在/var/run/runc/mycontainer/exec.fifo)这个文件,当我们执行runc start mycontainer时,这个进程会通过exec调用执行我们的用户命令sh。

root@workstation:/tmp/testrunc# runc start mycontainer
root@workstation:/tmp/testrunc# ps -axopid,ppid,cmd | grep 2558206
2558206       1 sleep 60
2558347 2556804 grep --color=auto 2558206

通过cat /var/run/runc/mycontainer/exec.fifo同样可以实现容器的启动动作。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注