美文网首页Docker 学习
Docker学习 - 核心原理的解读

Docker学习 - 核心原理的解读

作者: 消失黎明 | 来源:发表于2019-05-15 18:41 被阅读0次

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

Docker的核心概念

Docker的三大核心概念

  • 镜像
    Docker镜像类似于虚拟机镜像,可以将其理解为一个面向Docker引擎的只读模板,包含了文件系统。

  • 容器
    Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除。而这些容器都是相互隔离,互不可见的。

  • 仓库
    Docker 仓库类似于代码仓库,是Docker集中存放镜像的场所。最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。

Docker的两个主要部件

  • Docker: 开源的容器虚拟化平台
  • Docker Hub:用于分享、管理Docker容器的Docker SaaS平台

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。

相关文章

网友评论

    本文标题:Docker学习 - 核心原理的解读

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