libcontainer - 系统程序员的观点

时间:2016-08-17 23:19:24

标签: docker containers

我是一名新手去程序员,具有系统编程背景,试图剖析libcontainer。我对名称空间和控制组非常熟悉。我很想知道libcontainer如何利用这些功能来创建容器。

从逻辑上讲,有人必须使用NEW_NS_FLAGS拨打克隆系统调用。但我无法找到此克隆系统调用的位置!!

Documentations说,必须使用工厂界面来创建容器。我看到它只是为id和config执行验证工作并创建具有700权限的目录。

container.start ,应该创建一个新的名称空间,也不会调用克隆系统调用。

如果有人可以告诉我,容器创建如何在系统调用方面起作用,那将非常有用。

1 个答案:

答案 0 :(得分:0)

我对此感兴趣,并且刚刚开始深入研究代码。

我相信你要找的是在nsexec.c中完成的,它读取(或者通过使用netlink消息的unix套接字传递)命名空间设置的配置,然后调用clone()两次。

在子进程中,我认为它调用setns()来创建命名空间或将命名空间设置为新值。

对我来说,整个事情并不完全清楚,但从目前我似乎理解的情况来看,使用libcontainer的过程本身就是一个" init"它在新容器中成为PID 1,看起来这个新进程在C中做了一些事情,并且去设置容器。