傻大方


首页 > 学习 >

Docker|Docker容器原理与实现( 三 )



按关键词阅读: 原理 实现 容器 Docker



19、利用net_cls子系统限制进程的 网络数据包、利用ns子系统限制进程使用不同namespace 等功能 。
4、简易容器实现接下来的程序将chrootnamespace 和 cgroups 结合运用 , 就实现了一个简单的容器 。
fdefine STACK_SIZE (1024 * 1024) static char child_stackSTACK_SIZE;
int child(void* args) printf (nenter namespace!n);
sethostnarae (,rccntainern, 12);
chroot (n /home / container,r);
mount (nn 。

20、onenz n/procn/0rNULL);
mount (none J7sys.Jsysfs”.O,NULL);
execv (H/bin/bashMrNULL ;
return 1;
int main(int argcz char *argv) printf(nmain pid:%dnnz getpid();
char str120;
sprintf (strf ,rmkdir -p /cgroup/cpu/demon);
system(str);
sprintf(str,uecho %ld /cgroup/cpu/demo/cpu.cfs_quota_usM, 40000);
system(str);
sp 。

21、rintf (strf ,fecho %ld /cgroup/cpu/demo/tasks,r, getpid ();
system(str);
int child_pid = clone(child/ childstack 十 stack_size/CLCNE_NEWNSICLONENEWUTSICLONE_NEWPIDISIGCHLD. NULL); printf(nchild pid:%dn child_pidT;
waitpid(child_pidr NULL, 0);
printf (nquit namespace!n,r);
return 0;
上述程序运行后 , 就创建一个简易容器环境 。
这个容 。

22、器的初始化进程是bash,后续所有子进程能够访问的 文件系统控制在物理机的/home/container目录映射的 根目录下 , 同时利用namespace对子进程等进行了隔离, 并通过cgroup对这个进程及其所有子进程使用cpu资 源进行了限制 。
在这个容器的后台运行刚才消耗cpu的 应用,进程1对应bash,它的子进程2对应eatcpu. out 这个程序 , 具体如下图所示:bash-4.1# ps -efUIDPIDPPID C STIME TTYTIME CMD0100 10:56 ? T00:00:00 bash021 34 10:57 ? )00:00:01 ./eatcpu.out从物 。

23、理机的linux系统看 , democontainer的进程号为3289、它的子进程bash的进程号是3293、bash的 子进程eatcpu的进程号是3294,具体如下图所示:rootcentos-l # ps -ef I grep 3289root32892520018:56pts/000:00:00./democontainer.outroot32933289018:56pts/000:00:00bashrootcentos-l # ps -ef I grep 3293root32933289018:56pts/000:00:00bashroot329432933918:57pts/000: 。

24、02:36./eatcpu.out物理机和容器之间的进程映射关系如下:虽然eatcpu. out程序非常消耗CPU资源 , 不进行 限制时很快就会将CPU资源100%消耗 , 但是由于cgroup 对 3289 号进程(democontainer. out)进行了 CPU 使用 率40%的限制 , 那么进程3289的所有子进程的CPU使用 消耗总和不能超过这个限制 , 当前只有eatcpu. out消 耗CPU,所以这个进程就消耗了 40%的CPU资源 。
结果 如下图所示:PID USER3294 rootPR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND200 3920 412 344 R40.J 0.07:48.80 eatcpu.out如果同时启动两个etacpu. out,那么它们各自可以分到20%左右的CPU资源 , 结果如下图:PID USER3530 root3529 rootPR NI VIRT RES200392041620SHR S %CPU03920416344 R19.19.0.00.0TI1-1E+ COMMAND0:26.01 eatcpu.out0:27.49 eatcpu.out5、小结Docker容器的核心就是资源的隔离和配额 , 文章对 docker容器中资源隔离和配额进行了剖析 , 讲解了原 理 , 并基于c语言实现了一个简单的容器 。



稿源:(未知)

【傻大方】网址:/a/2021/0905/0024106853.html

标题:Docker|Docker容器原理与实现( 三 )


上一篇:DI|DI即时挑战题选编——任务类

下一篇:六一儿童节|六一儿童节演讲稿三篇