Docker
小凯Alex
这个作者很懒,什么都没留下…
展开
-
聊一聊Docker所使用到的Linux底层技术(Namespace,Cgroup与存储驱动和容器引擎)
Namespace 首先要理解docker本质上是一个运行在宿主机上的一个进程,用于帮助进程隔离出自己单独的空间. Linux Namespace可以隔离一系列的系统资源,如进程ID,网络资源,用户ID一样 Linux现在实现了六种Namespace UTS Namespace 主要用来进行hostname的隔离 IPC Namespace 用来进行IPC和message queues ...原创 2019-09-28 00:27:28 · 2629 阅读 · 1 评论 -
Docker run实际上发生了什么? 用Go模拟这个过程
Linux Proc Linux下的/proc文件系统是由内核提供的.它不是一个真正的文件系统,只包含了系统运行时候的消息.(如系统内存/mount设备信息/硬件配置) 它只存在于内存中,不占用外存空间. 本质是以文件系统的方式,为访问内核数据的操作提供接口 main函数 main.go 启动的主函数 现在定义了两个命令initCommand与runCommand package main ...原创 2019-09-28 13:51:38 · 290 阅读 · 0 评论 -
Docker是怎么利用cgroup技术来实现资源限制的?
Cgroup cgroup和namespace类似,也是把进程进行分组,但是目的和namespace不一样,namespace是为了隔离进程组之间的资源.而cgroup是为了对一组进程进行统一的资源监控与限制. cgroup技术把系统中所有的进程组织成一棵棵独立的树,每一棵树都有系统所有的进程 树的每个节点都是一个进程组.而每一棵树又于一个或者多个subsystem关联,树的作用是把进程分组,而s...原创 2019-09-28 18:56:52 · 351 阅读 · 0 评论 -
自己动手写Docker之增加管道功能与环境变量识别
通道通信 在Linux上创建两个进程的时候,进程之间的通信一般会使用通道的机制.所谓管道,就是一个链接两个进程的通道. 一般管道有两种 无名通道 存在于有亲缘关系的进程之间 有名通道 存在于文件系统的管道.(FIFO管道) 本质上来说,管道也是文件的一种,不过与文件通信区别在于管道有一个缓冲区,管道写满之后,写进程会阻塞.当管道为空的时候,读进程也会阻塞. 1.用户启动Run func...原创 2019-10-01 21:10:38 · 488 阅读 · 0 评论 -
动手自己写Docker之实现容器文件系统与镜像的隔离.
pivotRoot 这是一个系统调用,主要功能是改变当前的root文件系统,是吧整个系统切换到一个新的root中,移除对之前root的依赖 具体原理是把当前进程root文件系统移动到old文件夹中,使new_root成为新的root文件系统. func pivotRoot(root string) error { /** 为了使当前root的老 root 和新 root 不在同一个文件...原创 2019-10-01 23:48:00 · 566 阅读 · 0 评论