docker本质是轻量级虚拟机?不,它是一个进程而已

    科技2023-12-04  96

    参考

    docker是如何通过内核的系统调用模拟出一个虚拟机的。docker底层的简介怎么理解docker就是一个进程?

    理解

    1.实现容器资源隔离的Linux内核机制是namespace,主要的系统调用是:
    1. clone()系统调用大家应该都比较熟悉,它的功能是创建一个新的进程。 2. setns():就是设置namespace,将进程加入到一个已经存在的namespace中. (你在docker内Docker容器中用exec运行一个新命令,其实就是用这个函数开启了一个进程,再加入到docker中,看起来就像是docker自己执行了一个命令。) 3. unshare(): 这个系统调用与clone()很像,都是做一个新的隔离。不同之处在于clone()创建了一个新的进程,而unshare()是在原进程上作隔离。
    2. namespace机制可以分组实现隔离的资源有:

    可以看出,上图基本就可以模拟出一个操作系统了。docker原理其实就是如此。

    总结

    一个docker容器跑起来,其实就是新划分了一个进程组。在docker容器启动的时候,docker进行一个初始化操作,调用了系统调用函数,将上图6大资源进行了一个分组隔离,并且展示出来的时候好像完全看不到其他进程的存在,从而完成模拟。本质上,这些开启的容器,底层共用内核,无需模拟出新的内核,物理结构,所以,这也正是docker比操作系统要快的原因。

    Processed: 0.023, SQL: 8