深刻理解Docker容器执行引擎runC

1 简介

根据官方的定义:runC是一个根据OCI标准建立并运行容器的CLI tool。git

Docker就是基于runC建立的,简单地说,runC就是docker中最为核心的部分,容器的建立,运行,销毁等等操做最终都将经过调用runc完成。而runC也有本身的客户端,下面咱们将演示如何用runC,以最精简的方式建立并运行一个容器。github

 

1.1 利用runc运行busybox容器

下载并编译runCdocker

# create a 'github.com/opencontainers' in your GOPATH/src
cd github.com/opencontainers
git clone https://github.com/opencontainers/runc
cd runc

make
sudo make install

  

建立容器的根文件系统json

# 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 -

  

利用runc的spec命令建立默认的配置文件config.jsonbash

runc spec

  

利用runc运行busybox容器源码分析

# run as root
cd /mycontainer
runc run mycontainerid
/ # ls
bin  dev  etc  home  proc  root  sys  tmp  usr  var

  

能够看到,容器成功运行,此时咱们打开另外一个终端观察容器的运行状态blog

runc list
ID              PID         STATUS      BUNDLE         CREATED                          OWNER
mycontainerid   1070        running     /mycontainer   2017-12-20T12:26:30.159978871Z   root

  

事实上,"runc run"是一个复合命令,它包含了容器的建立(runc create),启动(runc start)以及在退出以后对容器进行的销毁(runc delete),从演示的角度看它是最为直观的。可是对于源码分析来讲,将建立,启动,销毁三个过程分开,显然会让整个过程更为简单和易于接受。源码

下面咱们就将结合源码,对整个容器技术最为核心的部分进行探究—— 容器是建立、启动以及销毁的。it

 

2  容器的建立编译

相关文章
相关标签/搜索