|
|
|
|
移动端

1.3.3 容器的创建

《Docker从入门到实战》本书从Docker的相关概念与基础知识讲起,结合实际应用,通过不同开发环境的实战例子,详细介绍了Docker的基础知识与进阶实战的相关内容,以引领读者快速入门并提高。本节为大家介绍容器的创建。

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


1.3.3  容器的创建

前面只是非常简单地介绍了namespace和Cgroups两个概念。实际上各个namespace的具体介绍与各个Cgroups子系统的介绍都没有深入讲解到,但通过前面两节的学习,相信读者已经大致有了容器创建过程的雏形。

(1)系统调用clone()创建新进程,拥有自己的namespace。

该进程拥有自己的pid、mount、user、net、ipc和uts namespace。

  1. pid =clone(fun,stack,flags,clone_arg); 

(2)将pid写入Cgroup子系统这样就受到Cgroups子系统控制。

  1. # echo$pid >/sys/fs/cgroup/cpu/tasks  
  2. # echo$pid >/sys/fs/cgroup/cpuset/tasks  
  3. # echo$pid >/sys/fs/cgroup/bikio/tasks  
  4. # echo$pid >/sys/fs/cgroup/memory/tasks  
  5. # echo$pid >/sys/fs/cgroup/devices/tasks  
  6. # echo$pid >/sys/fs/cgroup/feezer/tasks 

(3)通过pivot_root系统调用,使进程进入一个新的rootfs,之后通过exec()系统调用,在新的namespace、Cgroups、rootfs中执行/bin/bash。

  1. fun(){   
  2.     pivot_root("path_of_rootfs/",path);  
  3.     exec("/bin/bash");  

通过上面的操作,成功地在一个容器中运行了/bin/bash。

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

51CTO读书频道二维码


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

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

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Scrum敏捷项目管理

本书详细描述如何在复杂技术项目中使用Scrum,并结合真实的Scrum案例及专家洞识,在简明及高度概括的理论之上更侧重于实践,并不断强调Scru...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊