理论概述

可能现在称 Docker 为 Moby 比较合适,2017 年 4 月 Github docker 项目已经正式改名为 moby。至于个中缘由,可以通过 对于 Docker 改名 Moby ,大家怎么看? 做进一步了解,此处不过多说明,本文继续沿用 Docker。

说起 Docker 不得不提到传统的 VM 虚拟化。传统虚拟机实现资源隔离的方法是利用独立的 OS,并利用 Hypervisor 虚拟化 CPU、内存、IO 设备等。Docker 基于容器技术的轻量级虚拟化,相对于传统的虚拟化技术,省去了 Hypervisor 层的开销,而且其虚拟化技术是基于内核的 CgroupNamespace 技术,处理逻辑与内核深度融合。

容器本身不是一个新技术,早期的 Linux 容器是基于 LXC 去管理的,而 Docker 让容器变得更易用。对于 Docker,可以认为它是一个开源的容器引擎,可以方便的对容器进行管理,并且通过镜像交付的方式,达到更简单的环境构建,理念就是 “Build, Ship, and Run Any App, Anywhere”。

Docker 名词介绍

Docker 镜像

Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。按照官方说明,镜像是一个轻量级,独立的,可执行的,包括软件运行一切所需,囊括了代码,运行态,lib 库以及环境变量和配置文件的包。通俗的理解,可以理解为一个封装好环境的集装箱。

Docker 容器

容器是通过 Docker 镜像创建的一个运行态的实例,可以针对 Docker 容器执行运行、开始、停止、移动和删除等操作。

Docker Registry

Registry 用来存放 Docker 镜像,如果把 Docker 镜像比作集装箱的话,那么 Registry 可比喻成装载集装箱的大货轮。Registry 有公有和私有的概念,Docker 官方 RegistryDocker Hub,国内的如阿里云、网易蜂巢、时速云等也均有相关仓库。Docker 镜像仓库起到了一个集中存储和分发 Docker 镜像的作用。

三者之间的关系可以参考下图(摘自《DevOps Kubernetes》):

拓展

Docker 原理

关于 Docker 的原理需要结合 Linux 底层的 CgroupNamespace 去理解。Docker 通过 Cgroup 实现针对每个容器的资源管理,如 CPU、Memory、IO 等,而通过 Namespace 让每个容器都拥有自己的命名空间,包括 PID、USER、UTS、MNT、NET、IPC 等。

图自 https://msdnshared.blob.core.windows.net/media/2017/01/Linux-Arch.png

如果需要深入理解相关知识,可以通过以下文章进一步学习:

最后更新于