前言
Docker,容器,看似迷你微小的身躯,却是蕴含着庞大的智慧。它的出现去除了复杂的配置,改变了繁琐的运维,解放了冗余的环境,让大规模的高扩展,高可用的集群部署成为一件并不复杂的事情。
这一篇文章,会尽可能用简单易懂的叙述和快速便捷的操作讲解从编写代码到将其部署在一个可随意扩展的集群上。国内相关的资料实在是太少了,许多的构建指南和教程不是太老就是不完整,初学者很难以入门,尤其是swarm的集群部分,大量的概念没有讲解清除造成了极大的门槛
我希望这一篇文章是能够真正涵盖Docker的所有核心,也希望所有有心的读者能够借此踏入微服务集群领域,尝试着与传统单体大型应用开发或者传统分布式应用开发不一样的路
概念
话不多说,直接先进入Docker的核心概念说明,Docker与其三剑客分别是:
Docker(Image/Container/Registry)
Docker Machine
Docker Compose
Docker Swarm
掌握以上四个Docker核心,就可以完成从代码到集群的部署,不过看似简单,学习起来其实还是有一些曲线的,我自己总结了许久,以下的学习路线也许入门会比较轻松
总览
Docker(Image/Container/Registry)
首先是Docker的3个最基本的核心概念,基础中的基础,那就是Image镜像,Container容器,Registry仓库。
Image镜像的概念就是容器运行时需要的所有程序,文件,参数等的集合体,每一个镜像可以理解为一个应用程序的完整体。
Container容器的概念就是运行起来的镜像。说到这里,我们其实可以对比程序和进程的概念,程序是存储在硬盘上的文件,所谓进程就是被加载内存里运行的程序。镜像和容器是一个道理,没有什么深奥的
Registry仓库的概念就是镜像的集合,仓库里每个镜像都可以有自己的标签,版本等,通过仓库,就可以很轻松下载需要的镜像
好的,说到这里,可以串起来讲一下Docker的概念,Docker其实并不是传统意义上的虚拟机, 它并不是在宿主机上新建立一个虚拟机。Docker之所以能类似虚拟机一样有隔离独立操作系统空间,根本上因为Linux内核支持的隔离技术(在此不展开,操作系统内核技术不在本文讨论范围内),所以非Linux系统,都是没有办法直接运行Docker的,只能通过其他办法中转
可以说也是因为Docker吧,Linux的地位可谓是又上了一层楼,学习Docker最好的办法是用Linux系统,当然Windows和Mac OS X也可以,就是需要安装其他工具辅助运行
最后再说一下Docker本身的文件系统是分层的,当你下载了一个基础镜像后,对这个镜像进行安装工具,应用,或者是设置环境变量等等,其实都是在这个镜像的基础进行增量文件写入。这也就解释了很多人的困惑,为什么一个linux系统再小也得好几百MB,甚至上几GB的大小,但是有时候一个Docker的操作系统镜像才几十MB甚至十几MB。因为Docker的镜像并不是完整的操作系统镜像,并不会包含操作系统所有的文件。Docker使用的都是Linux的内核,不同的Linux发行版本用的也都是Linux内核,只是安装的软件工具不同而已。所以不同的Docker操作系统镜像,其本质的不同就是他们的Dockerfile上的安装软件工具的不同
Docker Machine
很多人会把Docker Machine和Docker弄混,其实Docker Machine只是安装Docker环境的工具,而且这就真的是一个虚拟机工具了。因为不同的Linux发行版太多了,而且还有Windows和Mac OS X等操作系统,要是大量不同机器,而且操作系统参次不齐,那光是安装Docker就足够累死了。所以Docker Machine应运而生,Docker Machine可以通过命令快速创建带有Docker环境的虚拟机,然后在这个虚拟机里面,就可以快速地部署Docker容器了
Docker Compose
如果说Docker是应用环境安装脚本的集合,那么Dcoker Compose就是Docker启动运行脚本的集合,因为使用Docker命令定制化地启动一个镜像容器,命令很长而且不好记忆,每个容器都要输入命令也繁琐,容器数量一大,会累死,所以Docker Compose就诞生了,一个yml的脚本文件,就搞定
Docker Swarm
通过Docker Machine我们创建启动了带有Docker环境的虚拟机,然后通过Docker Compose我们在虚拟机上启动运行了Dcoker,但是这些都仅仅是启动运行了一个镜像容器,和传统单机应用也没啥区别,而且传统的好像也没这么麻烦。这时候,Docker的终极目标Docker Swarm就上场了,通过Docker Swarm,就可以通过仅仅几个命令将大量的机器创建成一个集群,然后在这个集群里面的每台机器上都运行部署指定的镜像容器!所有的镜像容器组成的集群,对外就像一台机器一样,没有任何区别,全自动的负载均衡,全自动的容灾处理。这一些以前需要专业运维团队长时间工作才能完成的事情,如今一个人一天就可以完成,而且非常轻松!这是传统单机应用甚至是传统分布式应用无法匹及的,所以Docker为微服务架构打下基础,引领新一轮软件工程革命是毫不夸张的
后记
以上就是Docker的核心概念,将其所有概念串起来,我们可以得到从零开始到构建一个集群系统的基本思路:
通过Docker将应用的运行环境,和代码本身打包成为一个完整的镜像(Image)
通过容器(Container)运行生成的镜像,就相当于运行了应用
通过上传生成的镜像到仓库(Registry),可以云端持久化镜像,在我们需要的时候下载以容器运行,就可以得到了一个理论上能在任何系统运行的应用体,无须关心任何的配置和环境,一次构建,随处运行
通过以上步骤,我们可以得到一个存储在云端,能随时下载运行的镜像,但是通过Docker的命令参数运行容器,是比较冗余麻烦的,尤其是在容器数量比较多的情况下。这时候我们需要利用Docker Comopse编写一个yml文件,使用一个简单的命令执行这个配置文件,我们则可以迅速运行yml文件所有配置好的所有容器服务
因为Docker的安装在不同的系统安装不同,为了简化Docker环境的部署,引入Dokcer Machine,通过它创建一个带有Docker环境的虚拟机,在这个虚拟机里可以直接使用Dokcer
通过以上,我们完成了单机Dokcer配置运行所有的工作,我们可以完美地在单机上创建部署运行多个容器,让其相互关联工作。但是单机应用在访问量大时,是无法支撑的。这个时候我们就需要通过Docker Swarm,将多台主机组成一个集群,然后创建可伸缩的服务,每个服务的基础是一个镜像容器,这个服务会根据设定好的数量,自动分发到每台服务主机上,且数量可随意调节。不同的主机会被构建在一个网络中,对外部而言,就像是一台主机一样,集群会自动负载均衡
后续
至此,就是Docker构建集群的基本思路,限于篇幅,本文只阐述Docker的核心概念和简单说明集群的构建思路。整个Docker系列文章预计会有三篇,后续两篇会一步步阐述如何真实构建单机Docker应用系统和如何构建一个可伸缩的Dokcer集群系统,所以,未完待续...
感谢你的阅读,希望本文能够给你带来帮助
作者:CheneyXu
关于:XServer官网
作者:宇帅
链接:https://www.jianshu.com/p/7b07a5f9d30c