自己动手写容器(上)
这是本课程的第二部分:容器篇,共 8 篇,帮助大家由浅入深地认识和掌握容器。前面,我为你介绍了容器生命周期和资源管理相关的内容,让你对容器有了更加灵活的控制。之后从进程的角度带你认识了容器以及容器的两项核心技术 cgroups 和 namespace。本篇,我们进入实践环节,自己动手写容器,以便让你对容器有更加深刻的理解和认识。
经过了前面内容的学习,想必你对 Docker 容器已经不那么陌生了。从容器的生命周期管理,到对容器的资源控制,以及从进程的角度对容器的剖析,再到前两篇的 cgroups 和 namespace,你是否想更进一步地理解容器呢?
本篇内容会分上下两篇,通过前面已经学习到的 namespace 和 cgroups 等知识,来自己实现容器。
容器的基本属性
要自己实现容器,我们应该对容器进行更明确地定义,以便确认需求。
首先,容器一定是具有隔离性的,具备了隔离性才能称之为“容器”;其次,容器的资源可以被管理;再者按照我们之前使用 Docker 容器的经验来看,容器应该可以从“镜像”启动;还有启动后的容器,应该可以具备网络连接;最后,我们可以进入到容器中执行命令。
按照我们前面学到的内容,namespace 和 cgroups 肯定是实现资源的隔离和管理的关键技术;其他的问题就是镜像以及和网络相关的部分了。是不是这样拆解后感觉蛮简单的?我们开始逐步去实现它。
创建隔离环境
上一篇已经介绍过,我们可以通过使用 unshare 这个工具来很简单地达