0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简述Docker的底层技术原理之Namespace

阿铭linux 来源:今日头条 作者:云技术趣谈 2021-07-21 09:55 次阅读

Docker的空间隔离使用的是namespace(空间),它是内核提供的一种空间隔离,在一个空间下,每个进程看到的视图是一致的,相应的如果不在一个空间下看到资源视图是不一致的,举个例子,如果两个进程在同一个网络命令空间下,那么他们看到的网络信息(网卡、IP、路由等)是一样的,可以通过localhost的方式互相访问。常用的有6种namespace,在Linux 内核4.6之后又添加了Cgroup这namespace,5.6 之后又添加了时钟namespace。

Namespace系统调用参数隔离内容

UTSCLONE_NEWUTS主机名与域名

IPCCLONE_NEWIPC信号量、消息队列和共享内存

PIDCLONE_NEWPID进程编号

NetworkCLONE_NEWNET网络设备、网络栈、端口等等

MountCLONE_NEWNS挂载点(文件系统)

UserCLONE_NEWUSER用户和用户组

CgroupCLONE_NEWCGROUPCgroup的根目录

TimeCLONE_NEWTIME时钟

这里有个小细节,上面表格创建Mount Namespace的系统调用参数是CLONE_NEWNS,而不是CLONE_NEWMOUNT。从字面理解是创建一个命名空间的意思,这是由于历史原因导致的,因为Mount Namespace是第一个namespace,内核的开发者可能也没有预料到后续还有其它的namespace的加入,所以就先把CLONE_NEWNS给占用了。

可见,namespace的隔离其实并不充分,除了上面的隔离能力,其他的都一样。譬如,时钟在内核5.6版本之前,所有容器和操作系统都共享同一个时钟,如果修改了操作系统的时间,所有容器都时间都会变化。

namespace实现原理也非常简单,每个进程(task_struct)都有一个关于namespace的属性nsproxy,表示自己所属的namespace。

struct task_struct { 。。.

/* namespaces */

struct nsproxy *nsproxy;

。。.

}

其中的nsproxy就是指向各种namespace的一个代理。

当新进程被创建后会继承其父进程的namespace,这就是为啥一个容器里面的所有进程都共享namespace。在Linux集群上面,通过读取“/proc/进程ID/ns/”下的文件可以获取到每个进程对应的namespace。

文章转载:https://os.51cto.com/art/202107/671347.htm

(版权归原作者所有,侵删)

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Docker
    +关注

    关注

    0

    文章

    435

    浏览量

    11594

原文标题:Docker内核技术原理之Namespace

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ARM平台实现Docker容器技术

    什么是Docker? (1)Docker的架构 Docker是一个开源的应用容器引擎,让开发者可打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器
    的头像 发表于 03-07 13:48 182次阅读
    ARM平台实现<b class='flag-5'>Docker</b>容器<b class='flag-5'>技术</b>

    如何利用树莓派安装DockerDocker-compose呢?

    本文主要演示了树莓派如何安装DockerDocker-compose的过程。
    的头像 发表于 12-14 16:19 1179次阅读
    如何利用树莓派安装<b class='flag-5'>Docker</b>和<b class='flag-5'>Docker</b>-compose呢?

    docker核心组件有哪些

    Docker 是一种开源的容器化平台,它能够实现将应用程序及其依赖项打包到一个可移植的容器中,从而实现快速、可重复、可扩展的部署和管理。Docker 的核心组件包括 Docker Engine
    的头像 发表于 11-23 09:47 700次阅读

    docker进入容器的方法有哪些

    Docker是一种流行的容器化平台,它能够快速构建、交付和运行应用程序。在使用Docker时,我们经常需要进入容器进行调试、管理和运行命令等操作。本文将详细介绍Docker进入容器的各种方法,包括
    的头像 发表于 11-23 09:45 3033次阅读

    Docker与虚拟机的区别

    Docker和虚拟机是两种不同的虚拟化技术,它们在实现方式、资源消耗、运行性能等方面存在许多差异。本文将会详细介绍它们的区别。 一、实现方式 1.1 虚拟机 虚拟机是通过在物理主机上模拟出多个独立
    的头像 发表于 11-23 09:37 2122次阅读

    docker部署对性能的影响

    Docker 是一个流行的容器化平台,它提供了一种轻量级的虚拟化技术,使得应用程序可以在独立的容器中运行。然而,部署应用程序到 Docker 容器中可能会对性能产生一些影响。在本文中,我们将探讨
    的头像 发表于 11-23 09:31 650次阅读

    docker部署mysql的坏处

    Docker 是一种虚拟化技术,它允许开发人员在容器内打包应用程序及其所有依赖项,从而实现在不同环境中运行相同的应用程序的能力。然而,在使用 Docker 部署 MySQL 时,也存在一些潜在
    的头像 发表于 11-23 09:29 679次阅读

    docker微服务架构实战

    随着云计算和容器化技术的快速发展,微服务架构在软件开发领域中变得越来越流行。微服务架构将一个大型的软件应用拆分成多个小型的、独立部署的服务,每个服务负责独立的业务功能。其中,Docker作为一个流行
    的头像 发表于 11-23 09:26 308次阅读

    ArmSoM-W3应用开发之安装docker

    使用docker2.Rockchip平台系统运行dockerDocker运行对内核配置有要求,需要kernel开启cgroups、namespace、netfilter、overlayfs
    的头像 发表于 11-20 10:05 187次阅读
    ArmSoM-W3应用开发之安装<b class='flag-5'>docker</b>

    Jenkins+Docker一键自动化部署SpringBoot应用最精简流程

    简述实现步骤:在docker安装jenkins,配置jenkins基本信息,利用Dockerfile和shell脚本实现项目自动拉取打包并运行。
    的头像 发表于 11-06 16:27 555次阅读
    Jenkins+<b class='flag-5'>Docker</b>一键自动化部署SpringBoot应用最精简流程

    如何使用 Docker容器化技术

    对于开发人员来说,Docker肯定都不陌生,今天小编带大家重新学习一下Docker。 什么是 Docker 官话: Docker 是一种开源的容器化平台,它可以帮助开发者将应用程序与其
    的头像 发表于 09-30 11:24 9739次阅读

    docker基础知识和使用bmnnsdk时的docker常用命令

    本文旨在介绍docker基础知识和使用bmnnsdk时的docker常用命令,帮助没有接触过docker的开发者快速上手。 一、docker基础概念 1.1 什么是
    发表于 09-18 07:59

    docker 搜索镜像,docker查看镜像详细信息(docker下载镜像命令)

    Docker Hub是集中管理的Docker镜像注册中心。通过Docker 用户可以在注册中心搜索、下载和使用CLI命令行工具中的镜像。以下是常用的Docker命令搜索镜像:
    的头像 发表于 07-19 09:46 1104次阅读

    底层狠无聊?

    Docker 是一个开源的应用容器引擎,是虚拟化的一种轻量级替代技术Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以
    的头像 发表于 06-21 09:09 254次阅读
    学<b class='flag-5'>底层</b>狠无聊?

    OpenHarmony Docker移植实践

    Docker简介 从操作系统诞生之日起,虚拟化技术就不断的演进与发展,结合目前云原生的发展态势,容器无疑是其中的重要一环。 Docker是一个开源的软件项目,可以在Linux操作系统上提供一层额外
    发表于 05-18 10:03