Docker 原理剖析(一)隔离

本文围绕Docker容器技术展开,介绍其核心功能是通过约束和修改进程动态表现创造边界,Cgroups制造约束,Namespace修改进程视图。阐述了Linux Namespace机制实现容器隔离的原理,以及docker exec进入容器的原理。还对比了Docker与虚拟机的区别,指出Namespace隔离机制存在的问题。

引子

我们之前说过,容器是一种沙盒技术,通俗地说,容器可以像一个集装箱一样把我们的应用装起来。这样,应用与应用之间便有了边界,不会互相干扰,被放进集装箱的应用也可以被我们搬来搬去,完美!那么,你可知道这功能是如何实现的呢?今天,我们便来聊聊边界的实现手段。

手段

我们先下结论,容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个边界。

对于一个进程来说,它的静态表现就是程序,平时就呆在磁盘上。当它运行起来了,就变成了计算机里的数据和状态的总和,包括计算机内存中的数据、寄存器里的值、堆栈中的指令、被打开的文件,以及各种设备的状态信息的一个集合,这就是它的动态表现。

对于 Docker 来说,Cgroups 是制造约束的主要手段,而 Namespace 是用来修改进程视图的主要方法。

测试

我们执行以下指令:

docker run -it centos /bin/bash

该命令以交互形式启动了一个容器,并在容器中执行了 /bin/bash,这样,我的机器变成了一台宿主机,而运行着 /bin/bash 的容器在我的宿主机里面。

我们可以在容器中执行 ps 指令
在这里插入图片描述
易见,我们在 Docker 里最开始执行的 /bin/bash,是这个容器内部的第 1 号进程(PID = 1),而这个容器里一共只有两个进程在运行。可以知道,之前执行的 /bin/bash,和现在执行的 ps,已经被 Docker 隔离在了一个跟宿主机完全不同的世界当中。

这是怎么做到的?

原理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值