美文网首页
怎么理解docker的本质是进程

怎么理解docker的本质是进程

作者: 栗山海芋 | 来源:发表于2019-12-27 15:44 被阅读0次

容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。

对于 Docker 等大多数 Linux 容器来说,Cgroups 技术是用来制造约束的主要手段,而 Namespace 技术则是用来修改进程视图的主要方法。

接下来,让我们首先创建一个容器来试试

docker run -it busybox /bin/sh

上面这条指令是启动一个容器,在容器里执行 /bin/sh,并且分配一个命令行终端跟这个容器交互。此时,如果我们在容器里执行一下 ps 指令,就会发现一些更有趣的事情:

ps
PID USER TIME COMMAND
1 root 0:00 /bin/sh
10 root 0:00 ps

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

这究竟是怎么做到呢?

本来,每当我们在宿主机上运行了一个 /bin/sh 程序,操作系统都会给它分配一个进程编号,比如 PID=100。这个编号是进程的唯一标识。而现在,我们要通过 Docker 把这个 /bin/sh 程序运行在一个容器当中。这时候,Docker 就会在这个给这个PID=100的进程施一个“障眼法”,让他永远看不到其他进程。这种机制,其实就是对被隔离应用的进程空间做了手脚,使得这些进程只能看到重新计算过的进程编号,比如 PID=1。可实际上,他们在宿主机的操作系统里,还是原来的第 100 号进程。

这种技术,就是 Linux 里面的 Namespace 机制。

除了我们刚刚用到的 PID Namespace,Linux 操作系统还提供了 Mount、UTS、IPC、Network 和 User 这些 Namespace,用来对各种不同的进程上下文进行“障眼法”操作。 比如,Mount Namespace,用于让被隔离进程只看到当前 Namespace 里的挂载点信息;Network Namespace,用于让被隔离进程看到当前 Namespace 里的网络设备和配置。

这,就是 Linux 容器最基本的实现原理了。
所以,Docker 容器的概念,实际上是在创建容器进程时,指定了这个进程所需要启用的一组 Namespace 参数。这样,容器就只能“看”到当前 Namespace 所限定的资源、文件、设备、状态,或者配置。而对于宿主机以及其他不相关的程序,它就完全看不到了。

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

原文: docker--进程隔离
作者: soda

相关文章

  • 怎么理解docker的本质是进程

    容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。 对于 Docker 等大多数 ...

  • 怎么理解docker的本质是进程

    刚开始学习docker的时候,在ppt中看到,docker本质就是进程,云里雾里,就稀里糊涂,过了一段时间不用do...

  • 深入剖析Kubernetes笔记

    深入理解docker镜像 容器的本质是一种特殊的进程Namespace 的作用是“隔离”,它让应用进程只能看到该 ...

  • Docker 资源隔离

    概述 Docker 容器本质上是宿主机上的进程。Docker 通过 namespace 实现资源隔离。 Linux...

  • Docker最新版19.03 详细教程

    Docker 容器本质上是宿主机上的一个进程。Docker 通过 namespace 实现了资源隔离,通过 cgr...

  • Docker Starter

    Docker是怎么工作的 Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上...

  • Docker(二)初探

    Docker架构 daemon 守护进程 Docker Daemon是Docker的守护进程,Docker Cli...

  • 什么是docker?

    一、什么是Docker: Docker容器本质上是宿主机上进程,三个特点: 1.通过namespace实现了资源隔...

  • docker镜像概念

    docker和虚拟机的本质区别 Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源;...

  • Docker容器技术笔记

    1、docker运行中的容器本质上是一个宿主机上的进程;2、使用linux的namespace,对进程进行隔离,使...

网友评论

      本文标题:怎么理解docker的本质是进程

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