Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >docker用来实现“隔离”的技术手段:namespace

docker用来实现“隔离”的技术手段:namespace

作者头像
lovelife110
发布于 2021-12-08 09:19:47
发布于 2021-12-08 09:19:47
34100
代码可运行
举报
文章被收录于专栏:爱生活爱编程爱生活爱编程
运行总次数:0
代码可运行

例子说明namespace

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -it busybox /bin/sh

进入容器后,执行ps

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 / # ps
 
PID USER TIME COMMAND
1 root 0:00 /bin/sh
10 root 0:00 ps

可以看到,宿主机执行的 /bin/sh,就是这个容器内部的第 1 号进程(PID=1),而这个容器里一共只有两个进程在运行。这就意味着,前面执行的 /bin/sh,以及我们刚刚执行的 ps,已经被 Docker 隔离在了一个跟宿主机完全不同的世界当中。

这种技术,就是 Linux 里面的 Namespace 机制。而这个namespace只是 Linux 创建新进程的一个可选参数。

Linux 六种隔离能力

在 Linux 系统中创建进程的系统调用是 clone(),比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int pid = clone(main_function, stack_size, SIGCHLD, NULL);

这个系统调用就会为我们创建一个新的进程,并且返回它的进程号 pid。而当我们用 clone() 系统调用创建一个新进程时,就可以在参数中指定 CLONE_NEWPID 参数,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int pid = clone(main_function, stack_size, CLONE_NEWPID | SIGCHLD, NULL);

这时,新创建的这个进程将会“看到”一个全新的进程空间,在这个进程空间里,它的 PID 是1。而在宿主机,PID还是原来真实的值。

容器,其实是一种特殊的进程而已。

在使用Docker 的时候,并没有一个真正的“Docker 容器”运行在宿主机里面。Docker项目帮助用户启动的,还是原来的应用进程,只不过在创建这些进程时,Docker 为它们加上了各种各样的Namespace 参数。

这时,这些进程就会觉得自己是各自 PID Namespace 里的第 1 号进程,只能看到各自 Mount Namespace 里挂载的目录和文件,只能访问到各自 Network Namespace 里的网络设备,就仿佛运行在一个个“容器”里面,与世隔绝。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/06/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Docker 基础技术之 Linux namespace 详解
Docker 是“新瓶装旧酒”的产物,依赖于 Linux 内核技术 chroot 、namespace 和 cgroup。本篇先来看 namespace 技术。 Docker 和虚拟机技术一样,从操作系统级上实现了资源的隔离,它本质上是宿主机上的进程(容器进程),所以资源隔离主要就是指进程资源的隔离。实现资源隔离的核心技术就是 Linux namespace。这技术和很多语言的命名空间的设计思想是一致的(如 C++ 的 namespace)。 隔离意味着可以抽象出多个轻量级的内核(容器进程),这些进程可以充
Linux云计算网络
2018/03/28
1.9K0
Docker 基础技术之 Linux namespace 详解
Docker与k8s的恩怨情仇(二)—用最简单的技术实现“容器”
上次我们说到PaaS的发展历史,从Cloud Foundry黯然退场,到Docker加冕,正是Docker“一点点”的改进,掀起了一场蝴蝶效应,煽动了整个PaaS开源项目市场风起云涌。
葡萄城控件
2021/06/29
5800
Docker 技术鼻祖 Linux Namespace 入门系列:Namespace API
Linux Namespace 是 Linux 提供的一种内核级别环境隔离的方法。用官方的话来说,Linux Namespace 将全局系统资源封装在一个抽象中,从而使 namespace 内的进程认为自己具有独立的资源实例。这项技术本来没有掀起多大的波澜,是容器技术的崛起让他重新引起了大家的注意。
米开朗基杨
2020/02/14
2.4K0
Docker 技术鼻祖 Linux Namespace 入门系列:Namespace API
脱掉容器的外表,看透容器的本质!
什么是容器?容器其实是一种特殊的进程而已,只是这个进程运行在自己的 “运行环境” 中,比如有自己的文件系统而不是使用主机的文件系统(文件系统这个对我来说印象是最深刻的,也是让人对容器很更好理解的一个切入点)。
syy
2020/12/03
5170
脱掉容器的外表,看透容器的本质!
从入门到跑路之Kubernetes(一)
“ 从今天开始,准备结合自己这段时间学习Kubernetes的进展,慢慢总结一些学习心得,就当是帮助自己成长吧”
周萝卜
2019/07/17
3600
从入门到跑路之Kubernetes(一)
容器底层 --- 超细节的 Namespace 机制讲解
Linux Namespace 是 Linux 提供的一种内核级别环境隔离的方法。这种隔离机制和 chroot 很类似,chroot 是把某个目录修改为根目录,从而无法访问外部的内容。Linux Namesapce 在此基础之上,提供了对 UTS、IPC、Mount、PID、Network、User 等的隔离机制,如下所示。
syy
2020/12/03
3.3K0
容器底层 --- 超细节的 Namespace 机制讲解
【探索 Kubernetes|容器基础进阶篇 系列1】容器的本质是进程
容器本身没有太大价值,有价值的是“容器编排” (相当于是说,技术本身没有价值,价值在于解决实际问题)
秋意零
2023/06/23
2010
Docker原理之Namespaces
在日常使用 Linux 或者 macOS 时,我们并没有运行多个完全分离的服务器的需要,但是如果我们在服务器上启动了多个服务,这些服务其实会相互影响的,每一个服务都能看到其他服务的进程,也可以访问宿主机器上的任意文件,这是很多时候我们都不愿意看到的,我们更希望运行在同一台机器上的不同服务能做到完全隔离,就像运行在多台不同的机器上一样。
栗筝i
2022/12/01
7210
Docker原理之Namespaces
Docker容器实战(五) - 特殊的进程!
所以会以Docker和Kubernetes项目为核心,为你详细介绍容器技术的各项实践与其中的原理。
JavaEdge
2019/09/07
5480
Docker容器实战(五) - 特殊的进程!
现在最火的容器技术到底是怎么实现的?
通俗的来说容器其实是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样,把你的应用“装”起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去。不过,这两个能力说起来简单,但要用技术手段去实现它们,确并不是很容易。所以,本篇文章就来剖析一下容器的实现方式
Java学习录
2019/07/10
9160
现在最火的容器技术到底是怎么实现的?
Docker Notes-namespace
摘要: Docker Notes系列为学习Docker笔记,本文是学习namespace 资源隔离的笔记
itliusir
2018/08/03
5450
Docker Notes-namespace
容器中的隔离与限制:namespace和cgroups
容器和虚机都可以运行在Linux操作系统上,他们的不同是虚机是一个靠硬件技术虚拟出来的一个真实的操作系统环境,里面包含了ghost os,而容器只是操作系统上的一个进程,它只是模拟了操作系统的环境,进行自我管理。
jinjunzhu
2020/08/20
1.3K0
细说docker - 容器技术
docker对于现在的我们来说,已经是一个非常熟悉的东西了,docker无论是在部署打包,自动化,等方方面面都起着重要的作用,但是你是否有疑问,docker究竟是如何帮我们创建一个个隔离的环境的呢?今天我们就来看看,仔细说说docker
LinkinStar
2022/09/01
5760
细说docker - 容器技术
Docker容器实战(七) - Docker存储隔离原理?
容器为什么需要进行文件系统隔离呢? 被其他容器篡改文件,导致安全问题 文件的并发写入造成的不一致问题 Linux容器通过Namespace、Cgroups,进程就真的被“装”在了一个与世隔绝的房间里,
JavaEdge
2021/02/22
7490
Docker容器实战(七)  - Docker存储隔离原理?
Docker容器实现原理
容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。在Docker中使用了Namespace 技术来修改进程视图从而达到进程隔离的目的。
luozhiyun
2020/07/16
1.3K1
容器的本质
使用NameSpace技术来修改进程视图,创建出独立的文件系统、主机名、进程号、网络等资源空间,再使用Cgroups来实现对进程的 CPU、内存等资源的优先级和配额限制,最后使用chroot更改进程的根目录,也就是限制访问文件系统
编程黑洞
2023/03/06
2920
docker 赖以实现资源隔离与限制的原理
我们了解到,docker 是一种基于沙盒技术的容器,它实现了运行时环境的封装,从而让我们的集群管理和发布等操作十分便捷。
用户3147702
2022/06/27
1.1K0
docker 赖以实现资源隔离与限制的原理
Docker与k8s的前世今生,有请下一位容器选手登场(上)
大家在工作中或许或多或少都接触过Docker,那你知道Docker以及容器化背后的原理到底是什么吗?
北游
2021/08/07
6150
操作系统级虚拟化概述
操作系统级虚拟化 KVM、XEN等虚拟化技术允许各个虚拟机拥有自己独立的操作系统。与KVM、XEN等虚拟化技术不同,所谓操作系统级虚拟化,也被称作容器化,是操作系统自身的一个特性,它允许多个相互隔离的用户空间实例的存在。这些用户空间实例也被称作为容器。普通的进程可以看到计算机的所有资源而容器中的进程只能看到分配给该容器的资源。通俗来讲,操作系统级虚拟化将操作系统所管理的计算机资源,包括进程、文件、设备、网络等分组,然后交给不同的容器使用。容器中运行的进程只能看到分配给该容器的资源。从而达到隔离与虚拟化的目的
宅蓝三木
2018/02/07
2.1K0
Linux Namespace浅析
Linux对Namespace的操作,主要是通过clone、setns和unshare这3个系统调用来完成的,clone创建新进程时,接收一个叫flags的参数,这些flag包括CLONE_NEWNS、CLONE_NEWIPC、CLONE_NEWUTS、CLONE_NEWNET(Mount namespace)、CLONE_NEWPID和CLONE_NEWUSER,用于创建新的namespace,这样clone创建出来新进程之后就属于新的namespace了,后续新进程创建的进程默认属于同一namespace。
luoxn28
2020/02/17
1.6K0
Linux Namespace浅析
相关推荐
Docker 基础技术之 Linux namespace 详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验