專一於大數據及容器雲核心技術解密,可提供全棧的大數據+雲原平生臺諮詢方案,請持續關注本套博客。若有任何學術交流,可隨時聯繫。更多內容請關注《數據雲技術社區》公衆號。 node
yum install libseccomp-devel for CentOS
apt-get install libseccomp-dev for Ubuntu
複製代碼
# 在GOPATH/src目錄建立github.com目錄
> go get github.com/opencontainers/runc
> cd $GOPATH/src/github.com/opencontainers/runc
> make
> sudo make install
複製代碼
# create the top most bundle directory
> mkdir /mycontainer
> cd /mycontainer
# create the rootfs directory
> mkdir rootfs
# export busybox via Docker into the rootfs directory
> docker export $(docker create busybox) | tar -C rootfs -xvf -
> ls rootfs
bin dev etc home proc root sys tmp usr var
複製代碼
> runc spec
> ls
config.json rootfs
複製代碼
{
"ociVersion": "1.0.1-dev",
"process": {
"terminal": fasle,
"user": {
"uid": 0,
"gid": 0
},
"args": [
"sleep","30"
],
"env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"TERM=xterm"
],
"cwd": "/",
"capabilities": {
"bounding": [
"CAP_AUDIT_WRITE",
"CAP_KILL",
"CAP_NET_BIND_SERVICE"
],
"effective": [
"CAP_AUDIT_WRITE",
"CAP_KILL",
"CAP_NET_BIND_SERVICE"
],
"inheritable": [
"CAP_AUDIT_WRITE",
"CAP_KILL",
"CAP_NET_BIND_SERVICE"
],
"permitted": [
"CAP_AUDIT_WRITE",
"CAP_KILL",
"CAP_NET_BIND_SERVICE"
],
"ambient": [
"CAP_AUDIT_WRITE",
"CAP_KILL",
"CAP_NET_BIND_SERVICE"
]
},
"rlimits": [
{
"type": "RLIMIT_NOFILE",
"hard": 1024,
"soft": 1024
}
],
"noNewPrivileges": true
},
"root": {
"path": "rootfs",
"readonly": true
},
"hostname": "runc",
"mounts": [
{
"destination": "/proc",
"type": "proc",
"source": "proc"
},
{
"destination": "/dev",
"type": "tmpfs",
"source": "tmpfs",
"options": [
"nosuid",
"strictatime",
"mode=755",
"size=65536k"
]
},
{
"destination": "/dev/pts",
"type": "devpts",
"source": "devpts",
"options": [
"nosuid",
"noexec",
"newinstance",
"ptmxmode=0666",
"mode=0620",
"gid=5"
]
},
{
"destination": "/dev/shm",
"type": "tmpfs",
"source": "shm",
"options": [
"nosuid",
"noexec",
"nodev",
"mode=1777",
"size=65536k"
]
},
{
"destination": "/dev/mqueue",
"type": "mqueue",
"source": "mqueue",
"options": [
"nosuid",
"noexec",
"nodev"
]
},
{
"destination": "/sys",
"type": "sysfs",
"source": "sysfs",
"options": [
"nosuid",
"noexec",
"nodev",
"ro"
]
},
{
"destination": "/sys/fs/cgroup",
"type": "cgroup",
"source": "cgroup",
"options": [
"nosuid",
"noexec",
"nodev",
"relatime",
"ro"
]
}
],
"linux": {
"resources": {
"devices": [
{
"allow": false,
"access": "rwm"
}
]
},
"namespaces": [
{
"type": "pid"
},
{
"type": "network"
},
{
"type": "ipc"
},
{
"type": "uts"
},
{
"type": "mount"
}
],
"maskedPaths": [
"/proc/kcore",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/sys/firmware",
"/proc/scsi"
],
"readonlyPaths": [
"/proc/asound",
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
}
}
複製代碼
$ runc -h
使用 create 命令建立容器
sudo runc create mybusybox
使用 list 命令查看當前存在的容器
sudo runc list
ID PID STATUS BUNDLE CREATED OWNER
mycontainerid 12068 running /mycontainer 2018-12-25T19:45:37.346925609Z
使用 ps 命令看看容器內運行的進程
sudo runc ps mybusybox
複製代碼
使用 state 命令查看容器的狀態
sudo runc state mybusybox
使用 ps 命令看看容器內運行的進程
sudo runc ps mybusybox
使用 start 命令執行容器中定義的任務,使用 start 命令啓動容器後,
讓咱們再用 ps 命令看看容器內運行了什麼進程
sudo runc start
使用 exec 命令在容器中執行命令
sudo runc exec mybusybox ls
使用 delete 命令刪除容器
sudo runc delete mybusybox
使用 kill 命令中止容器中的任務
sudo runc kill mybusybox
使用 pause 命令暫停容器中的全部進程
sudo runc pause mybusybox
執行 pause 命令後,容器的狀態由 running 變成了 paused。而後咱們再經過 resume 命令恢復容器中進程的執行
sudo runc resume mybusybox
使用 events 命令獲取容器的資源使用狀況
sudo runc events mybusybox
複製代碼
前面咱們運行的全部命令都是以 root 權限執行的。能不能以普通用戶的權限運行容器呢?
答案是能夠的,並被稱爲 rootless。
要想以 rootless 的方式運行容器,須要咱們在生成容器的配置文件時就爲 spec 命令指定 rootless 參數:
runc spec --rootless
而且在運行容器時經過 --root 參數指定一個存放容器狀態的路徑:
runc --root /tmp/runc run mybusybox
複製代碼
runC 做爲標準化容器運行時的一個實現目前已經被 docker 內置爲默認的容器運行時,暫時總結於此。linux
專一於大數據及容器雲核心技術解密,可提供全棧的大數據+雲原平生臺諮詢方案,請持續關注本套博客。若有任何學術交流,可隨時聯繫。更多內容請關注《數據雲技術社區》公衆號。 git