Docker学习笔记(1)——理清概念
本系列文章的内容和例子基于CentOS下的Docker CE(版本18.02.0-ce),其中包括:
就当前而言,要学习Docker,我们只需要对应自己的操作系统下载一个相应的Docker CE就可以了。但是,Docker生态中有很多名词,比如Docker Engine、Docker Machine、Docker Toolbox、Docker CE等等,有些名词在Docker的发展过程中已经成为历史。对于初学者来说,如果没有一个提纲挈领地总览,很容易产生混淆。因此,在学习Docker之前,我们有必要搞明白这些名词代表什么。
Docker Engine
Docker Engine是整个Docker的核心与基础,我们通常所说的Docker其实主要指的是Docker Engine,它包含了我们平时使用的docker
命令,以及提供Docker核心功能的Docker守护进程(Docker Deamon)——包括管理Image、运行Contrainer等。
Boot2Docker
由于Docker基于Linux内核特性,因此只能运行于Linux之上,为了能在Mac/Windows系统上运行,有了Boot2Docker。Boot2Docker会先启动一个VirtualBox虚拟机,然后在该虚拟机中运行一个Linux系统,再在Linux中运行Docker。
Docker Machine
Docker Machine是用来创建运行Docker的宿主机的,比如AWS、Azure上的虚拟机,也可以用来在本地创建VirtualBox等虚拟机。后来发现既然Docker Machine都能创建诸如VirtubalBox这样的虚拟机了,还不如直接把Boot2Docker的功能也取代了,于是Boot2Docker成为了历史。
Docker Compose
有些时候,我们的软件系统包含了多个应用,他们需要一起运行,并且这些应用直接相互集成,通过docker
命令单独启动每一个应用显得有些繁琐,Docker Compose便是用来一次性启动一个系统中的多个应用的。事实上,Docker Compose只是对Docker Engine的一种封装而已,它在底层依然是有的是Docker Engine提供的功能。在笔者所工作过的某个项目中,我们使用到Elastic Search + LogStash组合,为此我们便是使用的Docker Compose来一次性启动这两个应用的。
Docker Toolbox
在Docker早期,Docker Engine、Docker Machine和Docker Compose这三个组件是需要分别安装的,对于使用者来说并不友好。Docker Toolbox将这些相关的组件合并成一个安装包,分别提供Mac和Windows下的版本。(你可能会问为什么没有Linux下的Docker Toolbox,原因可能是因为在Linux下基本上用不到Docker Machine,并且安装Docker Engine和Docker Compose也很直观,另外Docker Toolbox中包含的Kitematic图形软件没有Linux版本。)
Docker For Mac和Docker For Windows
如前文所述,Docker Toolbox中的Docker Machine依然采用了在Mac/Windows中创建一个Linux虚拟机的形式来运行Docker。后来新版本的Mac和Windows均提供了对虚拟化的原生支持,因此为什么不直接使用而要使用像Virtualbox这样多此一举的工具呢?于是,Docker For Mac和Docker For Windows应运而生,也使得Docker Toolbox成为了历史。在实现层面,Docker For Mac使用了Hyperkit,而Docker For Windows则使用了Hyper-V。
Docker Swarm
Docker Compose主要用于在同一个Docker实例中运行多个紧密联系的Container,而对于有些大型的分布式系统,通常需要使用多台主组成一个基于Docker的集群,并且对集群中Container的管理、调度和编排有更高的要求,Docker Swarm便是用来做这个事情的。在早期的Docker中,Docker Swarm作为一个独立于Docker Engine的组件存在,后来从Docker 1.12开始,Swarm被内嵌到了Docker Engine中。
Docker.io
无独有偶,在Docker出现之前,Debian和Ubuntu系统中早就有个软件包名为docker了,为了避免命名冲突,Docker在这两个系统中采用了Docker.io这个名字,实则跟Docker Engine没有区别。随着后来Docker采用的Docker CE和Docker EE两种全新的命名方式,这个Docker.io同样也成为了历史。
Kubernetes
和Docker Swarm一样,Kubernetes也是用来管理Docker集群的,只是Kubernetes是Google的产品,后来开源了。在笔者写这篇文章的时候,Docker正在提供对Kubernetes的原生支持,并且已经有了Beta版本,让我们一起期待吧。
Docker CE和Docker EE
从2017年3月份开始,Docker采用了全新的命名方式和版本演进形式。先前的Docker Engine、Docker For Mac和Docker For Windows等组成了Docker CE,即Docker 的社区版,完全开源。而Docker EE建立在原先的Docker Data Center之上,是Docker Inc公司向外提供的付费服务,如果你是财大气粗的大公司,估计你是接触不到Docker EE的了,咱还是继续玩Docker CE吧。另外,Docker的命名方式也发生了改变,从之前的1.12
这种命名法变成了基于年.月.版本号-CE/EE
,比如18.02.0-ce
表示2018年2月份发布的,小版本是0,CE版本。
版本大事件
- 2013年3月,Docker首次发布。
- 2013年12月,发布Docker Compose。
- 2015年2月,发布Docker 1.5,首次包含Docker Machine,但是在Mac/Windows上依然采用Boot2Docker。同时发布Docker Swarm,此时的Swarm是独立于Docker Engine的组件。
- 2015年8月,发布Docker 1.8,首次发布Docker Toolbox,Boot2Docker正式被Docker Macine取代。
- 2016年7月,发布Docker 1.12,同时发布Docker For Mac和Docker For Windows,Docker Toolbox退出历史舞台。Docker Swarm内嵌进Docker Engine。
- 2017年1月,发布Docker For AWS和Docker For Azure。
- 2017年3月,发布Docker CE和Docker EE,采用新的命名方式。