重庆网站改版,哪些网站做装修,有关做化工机械的网站,曲靖程序网站建设对应到容器技术#xff0c;为了隔离不同类型的资源#xff0c;Linux 内核里面实现了以下几种不同类型的 namespace。
UTS#xff0c;对应的宏为 CLONE_NEWUTS#xff0c;表示不同的 namespace 可以配置不同的 hostname。User#xff0c;对应的宏为 CLONE_NEWUSER#xf…对应到容器技术为了隔离不同类型的资源Linux 内核里面实现了以下几种不同类型的 namespace。
UTS对应的宏为 CLONE_NEWUTS表示不同的 namespace 可以配置不同的 hostname。User对应的宏为 CLONE_NEWUSER表示不同的 namespace 可以配置不同的用户和组。Mount对应的宏为 CLONE_NEWNS表示不同的 namespace 的文件系统挂载点是隔离的PID对应的宏为 CLONE_NEWPID表示不同的 namespace 有完全独立的 pid也即一个 namespace 的进程和另一个 namespace 的进程pid 可以是一样的但是代表不同的进程。Network对应的宏为 CLONE_NEWNET表示不同的 namespace 有独立的网络协议栈。
操作 namespace 的常用指令 nsenter可以用来运行一个进程进入指定的 namespace。例如通过下面的命令我们可以运行 /bin/bash并且进入 nginx 所在容器的 namespace。
# nsenter --target 58212 --mount --uts --ipc --net --pid -- env --ignore-environment -- /bin/bashrootf604f0e34bc2:/# ip addr
1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
23: eth0if24: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ffinet 172.17.0.3/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever
另一个命令是 unshare它会离开当前的 namespace创建且加入新的 namespace然后执行参数中指定的命令。
例如运行下面这行命令之后pid 和 net 都进入了新的 namespace。
unshare --mount --ipc --pid --net --mount-proc/proc --fork /bin/bash
clone 和 unshare 的区别是unshare 是使当前进程加入新的 namespaceclone 是创建一个新的子进程然后让子进程加入新的 namespace而当前进程保持不变。
在内核里面对于任何一个进程 task_struct 来讲里面都会有一个成员 struct nsproxy用于保存 namespace 相关信息里面有 struct uts_namespace、struct ipc_namespace、struct mnt_namespace、struct pid_namespace、struct net *net_ns 和 struct cgroup_namespace *cgroup_ns。
创建 namespace 的时候我们在内核中会调用 copy_namespaces调用顺序依次是 copy_mnt_ns、copy_utsname、copy_ipcs、copy_pid_ns、copy_cgroup_ns 和 copy_net_ns来复制 namespace。 此文章为12月Day4学习笔记内容来源于极客时间《趣谈Linux操作系统》推荐该课程。