Docker namespace隔离性

Namespace 类型

隔离资源

Kernel 版本

IPC

System V IPC 和 POSIX 消息队列

2.6.19

Network

网络设备、网络协议栈、网络端口等

2.6.29

PID

进程

2.6.14

Mount

挂载点

2.4.19

UTS

主机名和域名

2.6.19

USR

用户和用户组

3.8

Pid namespace

  • 不同用户的进程就是通过 Pid namespace 隔离开的,且不同 namespace 中可以有相同 Pid。
  • 有了 Pid namespace, 每个 namespace 中的 Pid 能够相互隔离。

net namespace

  • 网络隔离是通过 net namespace 实现的, 每个 net namespace 有独立的 network devices, IP addresses, IP routing tables, /proc/net 目录。
  • Docker 默认采用 veth 的方式将 container 中的虚拟网卡同 host 上的一个 docker bridge: docker0 连接 在一起。

ipc namespace

  • Container 中进程交互还是采用 linux 常见的进程间交互方法 (interprocess communication – IPC), 包 括常见的信号量、消息队列和共享内存。
  • container 的进程间交互实际上还是 host上 具有相同 Pid namespace 中的进程间交互,因此需要在 IPC 资源申请时加入 namespace 信息 - 每个 IPC 资源有一个唯一的 32 位 ID。

mnt namespace

mnt namespace 允许不同 namespace 的进程看到的文件结构不同,这样每个 namespace 中的进程所看 到的文件目录就被隔离开了。

uts namespace

UTS(“UNIX Time-sharing System”) namespace允许每个 container 拥有独立的 hostname 和 domain name, 使其在网络上可以被视作一个独立的节点而非 Host 上的一个进程。

user namespace

每个 container 可以有不同的 user 和 group id, 也就是说可以在 container 内部用 container 内部的用户 执行程序而非 Host 上的用户。

相关命令

  • 查看当前系统的 namespace: lsns –t <type>

  • 查看某进程的 namespace: ls -la /proc/<pid>/ns/

  • 进入某 namespace 运行命令: nsenter -t <pid> -n ip addr

  • 生产一个新的namespace运行一个程序

     unshare -f -n sleep 360
    

练习

# 运行一个sleep使用新的net的namespace
[root@ip-172-16-21-45 ~]# unshare -fn sleep 360
# 找出sleep的进程
[root@ip-172-16-21-45 ~]# ps -ef | grep sleep
root     10574  7278  0 15:04 pts/0    00:00:00 unshare -fn sleep 360
root     10577 10574  0 15:04 pts/0    00:00:00 sleep 360
root     10635 10485  0 15:05 pts/1    00:00:00 grep --color=auto sleep
# 查看sleep的网路情况
[root@ip-172-16-21-45 ~]# nsenter -t 10577 -n ip  a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

发现只有环回口地址,因为并没有网络插件给他分配地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值