了解这些 Docker 原理知识,出去吹牛逼再也不担心了
发布时间:2021-06-07 11:12:06 所属栏目:云计算 来源:互联网
导读:在现代的开发流程中随处可见 Docker 的身影,Docker 提供了环境隔离、应用打包等功能让服务部署变得特别简单,本文将会浅析 Docker 背后所使用的技术,阅读完后,你可以搞清楚如下问题: 容器与虚拟机之间的差别 Docker 资源隔离的原理 Docker 资源限制的原
|
在现代的开发流程中随处可见 Docker 的身影,Docker 提供了环境隔离、应用打包等功能让服务部署变得特别简单,本文将会浅析 Docker 背后所使用的技术,阅读完后,你可以搞清楚如下问题:
容器与虚拟机之间的差别
Docker 资源隔离的原理
Docker 资源限制的原理
Docker 分层结构的原理
容器 vs 虚拟机
虚拟机(VM)是计算机系统的仿真器,通过软件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,能提供物理计算机的功能。
虚拟机通过在当前的真实操作系统上通过 Hypervisor 技术进行虚拟机运行环境与体系的建立并通过该技术进行资源控制,一个性能较好的物理机通常可以承载多个虚拟机,每个虚拟机都会有自己操作系统,如图 1.1 所示。
掌握这些 Docker 原理知识,出去吹牛逼再也不担心了
从图中可以看出,虚拟机提供了物理机硬件级别的操作系统隔离,这让不同虚拟机之间的隔离很彻底,但也需要消耗更多资源,而有时不需要这么彻底的隔离,而更希望不消耗那么多资源,此时就可以使用容器技术。
容器可以提供操作系统级别的进程隔离,以 Docker 为例,当我们运行 Docker 容器时,此时容器本身只是操作系统中的一个进程,只是利用操作系统提供的各种功能实现了进程间网络、空间、权限等隔离,让多个 Docker 容器进程相互不知道彼此的存在,如图 1.2 所示。
掌握这些 Docker 原理知识,出去吹牛逼再也不担心了
虚拟机技术与容器技术的最大区别在于:多个虚拟机使用多个操作系统内核,而多个容器共享宿主机操作系统内核。
Docker 资源隔离:Linux Namespace
Linux Namespace(Linux 命名空间)是 Linux 内核(Kernel)提供的功能,它可以隔离一系列的系统资源,如 PID(进程 ID,Process ID)、User ID、Network、文件系统等。
如果你熟悉 Linux,你可能会联想到 linux 中的 chroot 命令,该命令允许将当前目录修改成根目录(即根目录 / 的挂载点切换了),相当于文件系统被隔离了,Namespace 也具有相似的功能,但更加强大。
目前 Linux 主要提供 6 种不同类型的 Namespace,如下表所示。
掌握这些 Docker 原理知识,出去吹牛逼再也不担心了
以一个具体的例子来解释 Namespace 的作用,假设你有一台性能非常好的计算机,你向用户出售自己的计算机的资源,每个用户买到一个 ssh 实例,为了避免不同客户之间相互干扰,你可能会对不同用户进行权限限制,让用户只能访问自己 ssh 实例下的资源。
但有些操作需要 root 权限,而我们不能将 root 权限提供给用户,此时就可以使用 Namespae 了,通过 User Namespace 对 UID 进行隔离,具体而言,UID 为 x 的用户在该 Namespace 中具有 root 权限,但在真实物理机中,他依旧是 UID 为 x 的用户,这就解决了用户间隔离的问题。
此外还可以通过 PID Namespace 对 PID 进行隔离,从该 Namespace 中的用户角度看,Namespace 中就像一台新的 Linux,有自己的 init 进程(初始进程,PID 为 1),其他进程的 PID 在 init 进程 PID 上递增,如图 1.3 所示。
掌握这些 Docker 原理知识,出去吹牛逼再也不担心了
图中,进程 3 在父命名空就中 PID 为 3,而在子命名空间中,其 PID 为 1,用户在该子命名空间中内看进程 3 就像 init 进程一样。
Linux 提供了 3 个系统 API 方便我们使用 Namespace:
clone () 创建新进程,根据系统调用 flags 来决定哪种类型 Namespace 将会被创建,而该进程的子进程也会包含这些 Namespace。
setns () 将进程加入到已存在的 Namespace 中。
unshare () 将进程移出某个 Namespace
Docker 利用 Linux Namespace 功能实现多个 Docker 容器相互隔离,具有独立环境的功能,Go 语言对 Namespce API 进行了相应的封装,从 Docker 源码中可以看到相关的实现。
![]() (编辑:承德站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

