1 简介

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

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

1.1 利用runc运行busybox容器

下载并编译runC

# 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

  

创建容器的根文件系统

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

runc spec

  

利用runc运行busybox容器

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

  

可以看到,容器成功运行,此时我们打开另一个终端观察容器的运行状态

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),从演示的角度看它是最为直观的。但是对于源码分析来说,将创建,启动,销毁三个过程分开,显然会让整个过程更为简单和易于接受。

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

2  容器的创建

深入理解Docker容器执行引擎runC的更多相关文章

  1. 【原创】深入理解Docker容器和镜像 -- 分析了docker的命令含义

    10张图带你深入理解Docker容器和镜像 镜像(Image)就是一堆只读层(read-only layer)的统一视角 要点:容器 = 镜像 + 读写层.并且容器的定义并没有提及是否要运行容器. 一 ...

  2. docker挂载volume的用户权限问题,理解docker容器的uid

    docker挂载volume的用户权限问题,理解docker容器的uid 在刚开始使用docker volume挂载数据卷的时候,经常出现没有权限的问题. 这里通过遇到的问题来理解docker容器用户 ...

  3. 【转】理解Docker容器网络之Linux Network Namespace

    原文:理解Docker容器网络之Linux Network Namespace 由于2016年年中调换工作的原因,对容器网络的研究中断过一段时间.随着当前项目对Kubernetes应用的深入,我感觉之 ...

  4. 理解docker容器和镜像(layer,ufs)和docker命令解释

    博客好文1:http://blog.csdn.net/x931100537/article/details/49633107(理解docker容器和镜像,理解简单,从原理入手,什么是layer,什么是 ...

  5. 理解Docker容器的进程管理

    摘要: Docker在进程管理上有一些特殊之处,如果不注意这些细节中的魔鬼就会带来一些隐患.另外Docker鼓励"一个容器一个进程(one process per container)&qu ...

  6. 理解 docker 容器中的 uid 和 gid

    默认情况下,容器中的进程以 root 用户权限运行,并且这个 root 用户和宿主机中的 root 是同一个用户.听起来是不是很可怕,因为这就意味着一旦容器中的进程有了适当的机会,它就可以控制宿主机上 ...

  7. 10张图带你深入理解Docker容器和镜像

    http://dockone.io/article/783 [编者的话]本文用图文并茂的方式介绍了容器.镜像的区别和Docker每个命令后面的技术细节,能够很好的帮助读者深入理解Docker. Doc ...

  8. 10 张图带你深入理解 Docker 容器和镜像

    这篇文章希望能够帮助读者深入理解 Docker 的命令,还有容器(container)和镜像(image)之间的区别,并深入探讨容器和运行中的容器之间的区别. 当我对 Docker 技术还是一知半解的 ...

  9. 10张图带你深入理解Docker容器和镜像-转

    转载:http://dockone.io/article/783 这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(container)和镜像(image)之间的区别,并深入探讨容器和运行 ...

随机推荐

  1. PHP大量数据循环时内存耗尽问题的解决方案

    最近在开发一个PHP程序时遇到了下面的错误:PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted错误信息显...分析: ...

  2. Unity获取指定资源目录下的所有文件

    使用前需要引入System.IO;这个命名空间 public void GetFiles() { //路径 //string path = string.Format("{0}", ...

  3. cesium入门1

    本教程将获得所有技能水平的开发人员和他们的第一个铯应用程序运行. 验证Cesium在您的Web浏览器中工作的最简单的方法是单击此处运行Hello World示例 (打开一个新窗口).如果你看到像下面的 ...

  4. Maven配置默认使用的JDK版本

    问题: 创建maven项目的时候,jdk版本是1.7版本,而自己安装的是1.8版本,从而导致无法使用lambda等Java8新特性. 每次右键项目名-maven->update project ...

  5. Windows7 64bits下安装TensorFlow CPU版本(图文详解)

    不多说,直接上干货! Installing TensorFlow on Windows的官网 https://www.tensorflow.org/install/install_windows 首先 ...

  6. python2.0_s12_day14_jQuery详解

    jquery的中文介绍文档:http://www.php100.com/manual/jquery/jQuery之基本选择器jQuery中提供的用于获取标签的方法都有哪些? jQuery提供的 &qu ...

  7. @property装饰器的用法【python】

    转自:http://www.jb51.net/article/65052.htm python官方介绍:https://docs.python.org/release/2.6/library/func ...

  8. Redis(三)-- 主从同步

    一.主从同步的工作原理 redis主从复制过程: 当配置好slave后,slave与master建立连接,然后发送sync命令.无论是第一次连接还是重新连接,master都会启动一个后台进程,将 数据 ...

  9. IIS7以上版本去掉伪静态去掉index.php方法

    1,由于从iis7以上的版本httpd.ini文件已不会被解析,将以下的xml文件复制到web.config 的文件中,然后放到网站的根目录即可. <?xml version="1.0 ...

  10. JavaScript基础细讲

    JavaScript基础细讲   JavaScript语言的前身叫作Livescript.自从Sun公司推出著名的Java语言之后,Netscape公司引进了Sun公司有关Java的程序概念,将自己原 ...