作为云计算IT圈里人, 如果还不知道Docker,那就算out啦。不过,在搞懂Docker之前,得先来了解一下Docker的成名之路!
从dotCloud到Docker,一“开”鸣人!
2010年,美国一家叫“dotCloud”的初创公司,主要提供基于PaaS的云计算技术服务。
初创企业总是艰难的,在大公司的挤压下,dotCloud也举步维艰。
而随着开源的洪流袭来,2013年,dotCloud 的创始人Solomon Hykes做了个艰难的决定:“将dotCloud的核心引擎,也就是Docker开源!”然而一旦这个基于 LXC技术的核心管理引擎开源,dotCloud公司就相当于走上了一条"不归路"。
可正是这个孤注一掷的举动,却得到了全球技术人员的拥护,众程序员惊呼:太方便了!
甚至像谷歌、微软、亚马逊、VMware等巨头,也开始对它青睐有加。
Docker口号1:Build, Ship and Run
而想要搞懂Docker,先来看它口号的句:“Build, Ship and Run”,也就是“搭建、发送和运行”。
以盖房子为例:
你想在一片空地上建个房子,得画图 纸、搬砖头、弄材料,一顿操作后,终于把房子盖好了。
结果,住了一段时间,想搬到另一片空地去。这时候,按以往的办法,只能再次画图 纸、搬砖头、弄材料、盖房子。
可如果能把之前盖好的房子复制一份,做成“镜像”,放在自己的背包里。等到了新的空地,就用这个“镜像”,复制粘贴出一套房子,是不是就轻松多了。
Docker口号2:Build?once,Run?anywhere
Docker的第二句口号就是:“Build?once,Run?anywhere(搭建一次,到处能用)”。
这里要涉及到Docker的三大核心概念,分别是:
镜像(Image)
容器(Container)
仓库(Repository)
在上面的例子中,那个放在包里的“镜像”,就是Docker镜像。而背包,就是Docker仓库。在空地上,用复制粘贴造好的房子,就是一个Docker容器。
这个Docker镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
也就是说,每次变出房子,房子是一样的,但生活用品等是不管的,谁住谁负责添置。
每一个镜像可以变出一种房子,那多个镜像就能变出多个种类的房子。比如,有的人盖了别墅,生成了镜像;有的人盖了四合院,也生成了镜像;还有的人盖了茅草屋,也生成了镜像……
这么一来,大家相互间就可以交换镜像,你用我的,我用你的,岂不是多方共赢?
于是乎,就变成了一个大的公共仓库。
Docker仓库用来保存我们的“镜像”,当创建了“镜像”后,可以使用push命令将它上传到公有或者私有仓库,这样下次要在别的机器上使用这个“镜像”时,只需从仓库上pull下来即可。
负责对Docker镜像进行管理的,是Docker Registry服务(类似仓库管理员)。但不是任何人建的任何镜像都是合法的,万一有人盖了有问题的房子呢?
因此,Docker Registry服务对镜像的管理是非常严格的。官方的Docker Hub是常用的Registry公开服务,这也是默认的 Registry,并拥有大量的高质量的官方镜像供用户下载。
Docker的运行离不开上面几个的支持,也有人会误以为,Docker就是容器。但Docker只会傲娇地说:“我不是容器,我是创建容器的工具,是应用容器引擎。”