|
|
|
|
移动端

1.3.3 容器的创建

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

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

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

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
分享:
大家都在看
猜你喜欢

读 书 +更多

JSP应用开发详解(第二版)

本书结合JSP和Servlet的最新规范,从基本的语法和规范入手,以经验为后盾,以实用为目标,以实例为导向,以实践为指导,深入浅出地讲解了JS...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊