根據官方的定義:runC是一個根據OCI標準建立並運行容器的CLI tool。git
Docker就是基於runC建立的,簡單地說,runC就是docker中最爲核心的部分,容器的建立,運行,銷燬等等操做最終都將經過調用runc完成。而runC也有本身的客戶端,下面咱們將演示如何用runC,以最精簡的方式建立並運行一個容器。github
下載並編譯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 容器的建立編譯