【操作系统百科】namespace:容器的内核根基
namespace 把全局内核资源(pid、mount、net、uts、ipc、user、cgroup、time)切成多个互不可见的视图。本文讲 7 种 namespace 的语义、unshare/setns/clone3 API、user ns 的 uid 映射、rootless 容器、namespace 与 cgroup 的分工、以及 pid ns init 的特殊待遇。
发布来自土法炼钢兴趣小组的知识、笔记、进展和应用。主题包括数据结构和算法、编程语言、网络安全、密码学等。
共 5 篇文章 · 返回首页
namespace 把全局内核资源(pid、mount、net、uts、ipc、user、cgroup、time)切成多个互不可见的视图。本文讲 7 种 namespace 的语义、unshare/setns/clone3 API、user ns 的 uid 映射、rootless 容器、namespace 与 cgroup 的分工、以及 pid ns init 的特殊待遇。
2013 年 3 月,Solomon Hykes 在 PyCon 上用五分钟演示了 Docker 的原型:一条命令就能把应用连同依赖打包成一个可移植的单元,在任何 Linux 机器上秒级启动。这个演示没有展示任何新技术——namespace 在 2002 年就进入了 Linux 内核,cgroup 在 2007 年由…
容器不是魔法。它就是几个系统调用。本文用 C 从 clone() 开始,逐个开启 PID/UTS/Mount/IPC namespace,看隔离到底是怎么回事。50 行代码,你就拥有了一个'容器'的雏形。
上一篇我们用 clone() 隔离了 PID、主机名和挂载点,但那个'容器'连 lo 都 ping 不通。本文从 CLONE_NEWNET 出发,用 veth pair + bridge + iptables MASQUERADE,一步步给容器接上网。
五篇文章攒了一堆内核积木:namespace、netns、rootfs、cgroup、overlayfs。现在是时候用 Go 把它们拼成一个能跑的容器运行时了。不到 500 行代码,create/start/exec/kill/delete,五个命令走完容器的一生。