Docker之docker namespace

序言

整理了一下Docker关于namespace的6种隔离的系统调用,据说面试常问,要学习起来了。

Docker 的三大理念是 build(构建)、 ship(运输)、run(运行)
通过namespace实现资源隔离,通过cgroup实现安全保障 linux内核提拱了6种namespace隔离的系统调用

1.MNT Namespace

提供磁盘挂载点和文件系统的隔离能力
比如一个宿主机是 ubuntu 的服务器, 可以在里面启动一个 centos 运行环境的容器并且在容器里面启动一个 Nginx 服务, 此 Nginx 运行时使用的运行环境就是 centos 系统目录的运行环境, 但是在容器里面是不能访问宿主机的资源, 宿主机是使用了 chroot 技术把容器锁定到一个指定的运行目录里面

2.IPC Namespace

提供进程间通信的隔离能力
同一个容器内的进程间通信相互可见,不同容器则不可见(不能跨容器访问)

3.UTS Namespace

提供主机名隔离能力
UTS提供主机名与域名的隔离,让每个docker拥有的主机名和域名,并独立于宿主机系统和其上的其他容器
docker中,每个镜像基本都以自身所提供的服务名称来命名镜像的hostname,且不会对宿主机产生任何影响

4.PID Namespace

提供进程隔离能力
pid 进程运行时系统随机分配的代号,程序终止后被回收,可能分配给其他程序,在linux系统中,多个容器的进程通过 PID namespace 进程隔离
对进程PID重新标号,即两个不同namespace下的进程可以有相同的PID。每个PID namespace都有自己的计数程序

5.Net Namespace

提供网络隔离能力
提供了关于网络资源的隔离,包括网络设备、IPv4和IPv6协议栈、IP路由表、防火墙,创建的时候添加CLONE_NEWNET标识符位,Docker 使用 network namespace 启动一个 vethX 接口, 这样你的容器将拥有它自己的桥接 ip 地址, 通常是 docker0, 而 docker0 实质就是 Linux 的虚拟网桥,网桥是在 OSI 七层模型的数据链路层的网络设备, 通过 mac 地址对网络进行划分, 并且在不同网络直接传递数据

6.User Namespace

提供用户隔离能力
主要隔离了安全相关的标识符和属性
允许在各个宿主机的各个容器空间内创建相同的用户名以及相同的用户 UID 和 GID,把用户的作用范围限制在每个容器内,包括用户ID、用户组ID、root目录、key以及特殊权限

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值