中国领先的IT技术网站
|
|

2.4.3 runC原理

《Docker从入门到实战》第2章Docker简介,第1章已经大致了解了容器技术,在本章节中,我们将进一步认识Docker的架构,以及了解Docker与其他容器技术的区别。本节为大家介绍runC原理。

作者:黄靖钧来源:机械工业出版社|2017-10-17 18:33

CTO训练营 | 12月3-5日,深圳,是时候成为优秀的技术管理者了


2.4.3  runC原理

前面提到,runC就是libcontainer加上cli。(cli的开发包也是托管在Github上面的一个开源项目,地址为github.com/codegangsta/cli)。

libcontainer是Docker中用于容器管理的包,它基于Go语言实现,通过管理namespaces、Cgroups、capabilities以及文件系统来进行容器控制。runC的start实际上是调用libcontainer的方法实现的。

runC在Github的地址为https://github.com/opencontainers/runc

先从main.go看起,在该文件中可以看到runC的基本命令只有常用的几个管理容器的命令,包括启动、创建、停止、删除、恢复、迁移等。

  1. // 代码地址:https://github.com/opencontainers/runc/blob/master/main.go#L93  
  2.     app.Commands = []cli.Command{  
  3.         checkpointCommand,  
  4.         createCommand,  
  5.         deleteCommand,  
  6.         eventsCommand,  
  7.         execCommand,  
  8.         initCommand,  
  9.         killCommand,  
  10.         listCommand,  
  11.         pauseCommand,  
  12.         psCommand,  
  13.         restoreCommand,  
  14.         resumeCommand,  
  15.         runCommand,  
  16.         specCommand,  
  17.         startCommand,  
  18.         stateCommand,  
  19.         updateCommand,  
  20.     } 

因为runC核心部分还是libcontainer,所以runC实际上还是通过libcontainer的接口管理容器的。

而libcontainer的原理和LXC有些类似,但是比LXC更强大、整合度更高。libcontainer把容器技术的各种工具(namespace、cgroup、rootfs等)整合抽象,并向上层开放接口,使得像如Docker等工具可以轻松与内核打交道,如图2.5展示了libcontainer与其他技术在和Linux内核通信过程的异同。

创建容器的时候,Docker收集信息存到config中,然后调用libcontainer的接口来实现容器的创建。runC也一样,不过把Docker自动收集信息这一步变成了手动操作,用户需要编写配置文件才能通过libcontainer启动一个容器(上文通过runc spec生成的是标准配置文件,事实上很多时候需要手动修改配置)。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢
24H热文
一周话题
本月最赞

读 书 +更多

软件设计师考试全真模拟试题及解析

本书是按照全国计算机技术与软件专业技术资格(水平)考试《软件设计师考试大纲》的要求,参照《软件设计师教程》及近年来考试试题编写的,...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× Phthon,最神奇好玩的编程语言