深刻理解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  容器的建立編譯

相關文章
相關標籤/搜索