Fork me on GitHub

玩Docker这些概念你都知道吗?

Docker's concepts

Posted by Kaelzhang on December 25, 2015

img

Build, Ship and Run Any App, Anywhere!

最近一段时间对Docker很感兴趣,在工作当中也开展了一些应用并有了更深入地了解,很是喜欢。想写点关于它的文章,发现Docker太过火爆各类文章都有–#调查了下发现从概念视角来介绍Docker的文章比较少。ok!let‘s do it!

整理原则:为了便于理解和记忆相关概念,所以概念的描述不应过长,要尽可能精炼并且还需要将概念进行结构化归类。

首先对Docker的相关概念进行分类:

  1. 基础概念
  2. 实现概念
  3. 相关概念

基础概念

包含Docker自身的组成概念。

Container

Container:容器技术并非虚拟化,更准确的说它是一种资源隔离机制。除了Docker外,容器还有warden(cloudfoundry)、LXC。

Docker

Docker:它是轻量级容器?NO!它是一套轻量级操作系统虚拟化解决方案,把cgroup、namespace、LXC等容器底层技术抽象的一个引擎,为用户提供了创建和管理容器的便捷界面(包括命令行和API)。

Registry

仓库:使用起来有点类似于git仓库,用来存储镜像、层以及关于镜像的元数据。Docker仓库也有公有和私有的概念。公有的仓库就是Docker Hub。

Image

镜像:容器运行时的只读模板。每一个镜像由一系列的层 (layers) 组成,层是由Dockerfile指定。

Dockerfile

Dockerfile:命令集,每行均为一条命令。每行的第一个单词为命令。后面的字符串是该命令所要接收的参数。

Docker Client

Docker Client:Docker架构中用户用来和Docker Daemon建立通信的客户端。用户使用client作为Docker交互工具向后台daemon发送管理容器的请求。

Docker Daemon

Docker Daemon:Docker架构中一个常驻在后台的系统进程,用于接受并处理Docker Client发送的请求。

Docker Server

Docker Server:属于Docker Daemon。在Docker架构中是专门服务于Docker Client的server。该server的功能是:接受并调度分发Docker Client发送的请求。

Engine

Engine:Docker架构中的运行引擎,同时也Docker运行的核心模块。它扮演Docker container存储仓库的角色,并且通过执行job的方式来操纵管理这些容器。

Graph

Graph:已下载容器镜像的保管者,以及已下载容器镜像之间关系的记录者。

实现概念

Docker实现层面的相关概念。

LXC

LXC:一种操作系统级虚拟化方法,在执行时不用重复加载内核, 且其内核与宿主共享,允许其他一些沙盒进程运行在一块相对独立的空间,并且能够方便的控制他们的资源调度。

namespace

通过namespace实现容器间的隔离性。容器内的应用只能在自己的命名空间中运行而且不会访问到命名空间之外。

cgroups

cgroups(Control Groups):用来管理群组。使应用隔离运行的关键是让它们只使用你想要的资源。这样可以确保在机器上运行的容器都是良民(good multi-tenant citizens)。群组控制允许Docker分享或者限制容器使用硬件资源。

AUFS

AUFS (AnotherUnionFS):一种Union FS, 支持将不同目录挂载到同一个虚拟文件系统下的文件系统。

GRSEC

GRSEC:linux内核安全相关的patch, 用于保护宿主机防止非法入侵。

union mount

union mount:联合加载技术,AUFS基础。一次同时加载多个文件系统,但在外面看起来只有一个文件系统。Docker的镜像就是多层文件系统叠加到一起。

copy on write

copy on write:写时复制。容器是由镜像所创建,会根据多层文件系统构建一个镜像栈,只有栈的最顶层是读写层。如果发生对只读层的写操作时会将该文件复制到读写层,并隐藏只读层的文件。

libcontains

libcontains:用于替代LXC。反向定义容器的实现标准,通过其操纵容器的namespace、cgroups、apparmor、网络设备以及防火墙规则等。

libchan

libchan:以标准接口的方式解决容器的互联互通,实现跨平台,能更好支持分布式系统和并发编程。

libswarm

libswarm:一个很小的工具包,用来组合 Docker 的各种网络服务。定义了一个服务的标准接口,用于分布式系统中各个服务模块之间的通讯。

周边概念

和Docker关系较紧密的一些概念。

CaaS

CaaS(Container as a Service):容器即服务。CaaS客户不需要关心他的容器到底是运行在哪,CaaS服务商将自动化进行资源调配,帮助客户选择最便宜的或最合适的公有云平台。

Docker Machine

Docker Machine:一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、Digital Ocean、Microsoft Azure。

Docker Compose

Docker Compose:一个“应用层”的服务,用户可以定义哪个容器组运行哪个应用,它支持动态改变应用,并在需要时扩展。

Docker Swarm

Swarm:一套用以管理Docker集群的工具,使得Docker集群暴露给用户时相当于一个虚拟的整体。和Docker的其它项目一样,遵循”batteries included but removable”原则。

文中相关概念由于仅限于我接触到的难免有所遗漏,欢迎大家斧正!

参考资料:

1.https://github.com/docker

2.http://www.csdn.net/article/2014-09-24/2821832

3.http://blog.csdn.net/shlazww/article/details/39178469

4.http://www.openstack.cn/?p=2203


  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!