Docker是什么?
简单来说,Docker可以看作是一个非常成功的容器管理平台。Docker最重要的部分就是它的运行管理环境(如下图所示)。
正如上面所说,容器是一个计算单元,那么Docker的运行环境就是用来创建、管理和销毁这些计算单元的。在创建和管理这些计算单元的时候,需要用到计算单元的包装(也就是它的软件发行包),这些包装以容器镜像的方式存放在它的运行环境中,所有的容器计算单元都是通过这些镜像来创建的。
但镜像本身会有版本的发布、升级等需求,这就涉及到Docker的另一个重要组成部分DockerHub了。DockerHub有点像苹果的App Store,它是一个非常大的「容器市场」,所有常用的软件都可以在DockerHub上找到。
最后一个Docker的重要模块,就是用户界面和管理工具,它们用来向容器的运行环境发布命令或查看状态。只需要用一个Docker的命令加上一些参数,就可以实现创建、删除、查看容器的运行情况等操作。
接下来我们就来看看Docker的实际操作情况,我们会以运行一个Hello World的容器为例,讲讲Docker的使用情况。其实,只需要安装好Docker就可以尝试运行这个Hello World的容器了。
通过下面代码,我们来看看Docker做了些什么:
首先我们看到Docker在本地要去找Hello World最新版本的镜像,它发现本地并没有这个镜像后去DockerHub上把这个镜像给下载了下来。然后,这个镜像就被运行了,之后Docker后台就创建了这样一个容器。
Docker的出现,让容器应用管理变得非常轻松,运行容器只需要一个命令就可以实现。而从DockerHub上下载镜像、创建各种各样的隔离环境、创建容器与外部的网络通信环境都可以由Docker来完成。可以说Docker可以管理容器的整个生命周期。
容器vs.虚拟机,伐木工的斧与锯
作为对容器的总结,我们可以把容器最大的特点归纳为轻量级和完全独立部署。这两大特点与云原生的弹性无限扩展和按需使用的定位十分吻合,也正因为如此,容器成为了云原生的基石。
虽然容器和虚拟机都是计算单元,但从虚拟机到容器,并不能看做是一个简单的性能提升或架构的改变,而是一种应用理念的改变。
举个例子,从前伐木工人看书的时候会用斧子,后来大家觉得用斧子太费力气,有个高人就介绍了另一个砍树的工具「锯子」。但如果伐木工人拿着锯子去砍树的话,会发现还没有斧子好用。但事实是,斧子和锯子是两种使用的理念。
而说回容器和虚拟机理念的不同,我们可以通过下面的图表来进一步感受。