Docker 学习

Docker学习 - 核心原理的解读

2019-05-15  本文已影响0人  消失黎明

Docker 容器本质上是宿主机上的进程,通过namespace实现了资源的隔离,通过cgroups实现了资源限制,通过写时复制机制(copy-on-write)实现了高效的文件操作。

Docker的核心概念

Docker的三大核心概念

Docker的两个主要部件

Docker 使用客户端-服务器 (C/S) 架构模式。Docker 客户端会与 Docker 守护进程进行通信。Docker 守护进
程会处理复杂繁重的任务,例如建立、运行、发布你的 Docker 容器。Docker 客户端和守护进程可以运行在
同一个系统上,当然你也可以使用 Docker 客户端去连接一个远程的 Docker 守护进程。Docker 客户端和守
护进程之间通过 socket 或者 RESTful API 进行通信。

资源隔离

namespace资源隔离

在linux系统中,可以同时存在多个用户和多个进程,对于这些用户和进程的运行进行协调管理,通过进程调度和进程管理即可解决,但是整体资源是有限的,怎么样把有限的资源(进程号,通信资源,网络资源等)合理分配给各个用户所在进程是需要进行考虑和设计的。linux中提出了namespace的机制,这是一种轻量级的虚拟化形式。在此之前,Linux系统中很多资源都是全局管理的,例如,系统中所有进程都是通过PID来进行标识的,就像是每个学生的学号一样,在整个学校范围内,肯定是唯一标识这个学生的。用户的ID管理,各个用户通过全局UID来标识。随着大数据的兴起,Linux为了提供更加精细的资源分配管理机制,给出了namespace的机制解决方法。根据linux内核对命名空间的划分,可以分为以下几个namespace.

namespace   |                      系统调用参数                隔离内容
UTS         |                      CLONE_NEWUTS              主机名与域名
PID         |                      CLONE_NEWPID              进程编号
Network     |                      CLONE_NEWNET              网络设备、网络栈、端口等
Mount       |                      CLONE_NEWS                挂载点
User        |                      CLONE_NEWUSER             用户和用户组

有了以上 6 种 namespace 从进程、网络、IPC、文件系统、UTS 和用户角度的隔离,一个 container 就可以对外展现出一个独立计算机的能力,并且不同 container 从 OS 层面实现了隔离。 然而不同 namespace 之间资源还是相互竞争的,仍然需要类似 ulimit 来管理每个 container 所能使用的资源 --- cgroup。

上一篇下一篇

猜你喜欢

热点阅读