美文网首页
Docker namespace的理解

Docker namespace的理解

作者: 燃燃的爸爸 | 来源:发表于2020-10-10 18:50 被阅读0次
docker run helloworld
lrwxrwxrwx 1 root root 0 Nov 26 14:10 ipc -> ipc:[4026532155]
lrwxrwxrwx 1 root root 0 Nov 26 14:10 mnt -> mnt:[4026532153]
lrwxrwxrwx 1 root root 0 Nov 26 14:08 net -> net:[4026532215]
lrwxrwxrwx 1 root root 0 Nov 26 14:10 pid -> pid:[4026532156]
lrwxrwxrwx 1 root root 0 Nov 26 14:11 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Nov 26 14:10 uts -> uts:[4026532154]

setns() net /bin/sh
lrwxrwxrwx 1 root root 0 Nov 26 14:17 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 Nov 26 14:17 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0 Nov 26 14:17 net -> net:[4026532215]
lrwxrwxrwx 1 root root 0 Nov 26 14:17 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 Nov 26 14:17 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Nov 26 14:17 uts -> uts:[4026531838]

宿主机 sleep
lrwxrwxrwx 1 root root 0 Nov 26 14:12 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 Nov 26 14:12 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0 Nov 26 14:12 net -> net:[4026531956]
lrwxrwxrwx 1 root root 0 Nov 26 14:12 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 Nov 26 14:12 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Nov 26 14:12 uts -> uts:[4026531838

docker --net=host
lrwxrwxrwx 1 root root 0 Nov 26 14:24 ipc -> ipc:[4026532159]
lrwxrwxrwx 1 root root 0 Nov 26 14:24 mnt -> mnt:[4026532157]
lrwxrwxrwx 1 root root 0 Nov 26 14:24 net -> net:[4026531956]
lrwxrwxrwx 1 root root 0 Nov 26 14:24 pid -> pid:[4026532160]
lrwxrwxrwx 1 root root 0 Nov 26 14:24 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Nov 26 14:24 uts -> uts:[4026532158]

docker exec
lrwxrwxrwx 1 root root 0 Nov 26 06:40 ipc -> 'ipc:[4026532155]'
lrwxrwxrwx 1 root root 0 Nov 26 06:40 mnt -> 'mnt:[4026532153]'
lrwxrwxrwx 1 root root 0 Nov 26 06:40 net -> 'net:[4026532215]'
lrwxrwxrwx 1 root root 0 Nov 26 06:40 pid -> 'pid:[4026532156]'
lrwxrwxrwx 1 root root 0 Nov 26 06:40 user -> 'user:[4026531837]'
lrwxrwxrwx 1 root root 0 Nov 26 06:40 uts -> 'uts:[4026532154]'

上面的实验我一个个的来解释下:

一、宿主机 sleep

这个就是我们平常运行的一些脚本,通过查看ll /proc/进程号/ns可以查看到宿主机的默认namespace

二、docker run helloworld

docker inspect --format '{{ .State.Pid }}' 4ddf4638572d 查到pid
你会发现只有user跟宿主机是一致的。

三、setns() net /bin/sh

其实也就是docker的--net=container:4ddf4638572d的原理,你执行ifconfig会发现看到的就是和helloworld一致的网卡信息。

四、docker --net=host

会发现net跟宿主机的进程一致

五、docker exec

这个时候在容器里面查看ls /proc/xx/ns和helloworld的完全一致,也就是exec的原理了,加入到一个已经存在的 Namespace 当中

总结:

  • docker 默认是没有做user的单独namespace的
  • docker通过namespace的做隔离,也就是在clone进程的时候加入一些特殊的参数
  • 加入一个已经存在的Namespace通过setns()加上 namespace文件路径 + 需要执行的命令例如 /proc/25686/ns/net /bin/bash

相关文章

  • Docker namespace的理解

    上面的实验我一个个的来解释下: 一、宿主机 sleep 这个就是我们平常运行的一些脚本,通过查看ll /proc/...

  • netns指令

    引用:理解Docker容器网络之Linux Network Namespace9.5. ETHERNET BRID...

  • 2018-12-23第1-3节

    docker是基于linux内核级的namespace和chroot实现 namespace、cgroups、ch...

  • 10 Docker 资源隔离

    技术实现 Docker 是使用 Linux 的 Namespace 技术实现各种资源隔离的。Namespace 是...

  • docker部署笔记

    docker 了解一下lxc cgroup namespace docker菜鸟教程 docker官方文档 安装用...

  • docker 原理中的概念

    docker 原理中的概念 docker 容器 docker 容器就是一个特殊的进程 Namespace 隔离机制...

  • Docker

    什么是Docker? Docker使用go语言进行开发实现,基于linux内核的cgroup,namespace,...

  • Docker

    Docker - Debian - cgroug / namespace RabbitMQ - 消息服务 - Ru...

  • 白话Docker(NameSpace)

    Docker容器无疑是当下最火的技术了。Docker通过镜像明确解决的是应用打包困难的问题。 但是容器本身是没有什...

  • docker user namespace

    docker 容器是一种特殊的进程,namespace是一种隔离技术,docker就是使用隔离技术开启特定的nam...

网友评论

      本文标题:Docker namespace的理解

      本文链接:https://www.haomeiwen.com/subject/vrwewctx.html