给自己掌握的容器技术进行一次梳理
容器底层核心技术与实现原理
- Namespaces
-
- 说明
命名空间(namespaces)是 Linux 为我们提供的用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法。在日常使用 Linux 或者 macOS 时,我们并没有运行多个完全分离的服务器的需要,但是如果我们在服务器上启动了多个服务,这些服务其实会相互影响的,每一个服务都能看到其他服务的进程,也可以访问宿主机器上的任意文件,这是很多时候我们都不愿意看到的,我们更希望运行在同一台机器上的不同服务能做到完全隔离,就像运行在多台不同的机器上一样。
- 说明
-
- 隔离资源列表
名称 | 宏定义 | 隔离资源 |
---|---|---|
Mount | CLONE_NEWNS | Mount points (since Linux 2.4.19) |
UTS | CLONE_NEWUTS | Hostname and NIS domain name (since Linux 2.6.19) |
IPC | CLONE_NEWIPC | System V IPC, POSIX message queues (since Linux 2.6.19) |
Network | CLONE_NEWNET | Network devices, stacks, ports, etc. (since Linux 2.6.24) |
PID | CLONE_NEWPID | Process IDs (since Linux 2.6.24) |
User | CLONE_NEWUSER | User and group IDs (started in Linux 2.6.23 and completed in Linux 3.8) |
Cgroup | CLONE_NEWCGROUP | Cgroup root directory (since Linux 4.6) |
-
- 源码分析
参考
- 源码分析
struct nsproxy {
atomic_t count;
struct uts_namespace *uts_ns; // 包括user_namespace
struct ipc_namespace *ipc_ns;
struct mnt_namespace *mnt_ns;
struct pid_namespace *pid_ns_for_children;
struct net *net_ns;
struct cgroup_namespace *cgroup_ns;
};
-
- linux 演示
- linux 演示