您现在的位置是:主页 > 数据库技术 > 数据库技术

Namespace机制怎么理解

IDCBT2022-01-12服务器技术人已围观

简介今天小编给大家分享一下Namespace机制怎么理解的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文

今天小编给大家分享一下Namespace机制怎么理解的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Namespace

Linux Namespace 是 Linux 提供的一种内核级别环境隔离的方法。这种隔离机制和 chroot 很类似,chroot  是把某个目录修改为根目录,从而无法访问外部的内容。Linux Namesapce 在此基础之上,提供了对  UTS、IPC、Mount、PID、Network、User 等的隔离机制,如下所示。

分类系统调用参数相关内核版本Mount NamespacesCLONE_NEWNSLinux 2.4.19UTS NamespacesCLONE_NEWUTSLinux 2.6.19IPC NamespacesCLONE_NEWIPCLinux 2.6.19PID NamespacesCLONE_NEWPIDLinux 2.6.19Network NamespacesCLONE_NEWNET始于Linux 2.6.24 完成于 Linux 2.6.29User NamespacesCLONE_NEWUSER始于 Linux 2.6.23 完成于 Linux 3.8)

★ Linux Namespace 官方文档:Namespaces in operation”

namespace 有三个系统调用可以使用:

    clone() --- 实现线程的系统调用,用来创建一个新的进程,并可以通过设计上述参数达到隔离。

    unshare() --- 使某个进程脱离某个 namespace

    setns(int fd, int nstype) --- 把某进程加入到某个 namespace

    下面使用这几个系统调用来演示 Namespace 的效果,更加详细地可以看 DOCKER基础技术:LINUX NAMESPACE(上)、  DOCKER基础技术:LINUX NAMESPACE(下)。

    UTS Namespace

    UTS Namespace  主要是用来隔离主机名的,也就是每个容器都有自己的主机名。我们使用如下的代码来进行演示。注意:假如在容器内部没有设置主机名的话会使用主机的主机名的;假如在容器内部设置了主机名但是没有使用  CLONE_NEWUTS 的话那么改变的其实是主机的主机名。

    #define _GNU_SOURCE #include <sys/types.h> #include <sys/wait.h> #include <sys/mount.h> #include <stdio.h> #include <sched.h> #include <signal.h> #include <unistd.h>  #define STACK_SIZE (1024 * 1024) static char container_stack[STACK_SIZE];  char* const container_args[] = {     "/bin/bash",     NULL };  int container_main(void* arg) {     printf("Container [%5d] - inside the container!\n", getpid());     sethostname("container_dawn", 15);     execv(container_args[0], container_args);     printf("Something's wrong!\n");     return 1; }  int main() {     printf("Parent [%5d] - start a container!\n", getpid());     int container_id = clone(container_main, container_stack + STACK_SIZE,                                  CLONE_NEWUTS | SIGCHLD, NULL);     waitpid(container_id, NULL, 0);     printf("Parent - container stopped!\n");     return 0; }

    标签:

    很赞哦! ()

本栏推荐