镜像与容器
先了解两个关键概念,镜像(Image)与容器(Container)。镜像里面有网站的代码,需要的环境,配置文件等等,也就是镜像里面包含了网站运行起来需要的所有的东西。基于镜像你可以创建能运行的东西,这些东西就叫容器。镜像活起来以后就是容器。
镜像与容器的关系有点像是软件与软件在运行时的关系。一个软件,比如一个编辑器,安装在电脑上,平时它就是静止的待在我们的电脑上,软件在没运行的时候,什么也干不了。打开了这个编辑器,也就是运行了这个编辑器软件以后,我们就可以用它去编辑文件了。你也可以同时运行多个编辑器窗口,去编辑不同的文件。如果把编辑器软件本身比做 Docker 的镜像,那这个编辑器运行起来的状态就相当于是 Docker 的容器。
容器里发生的任何毁灭性的事件,都不会影响到运行这个容器的主机本身。因为容器跟运行容器的主机之间是完全隔离的状态。当然你也可以通过设置,让容器可以访问主机上的文件。
容器经常拿来跟虚拟机做比较,容器的性能比虚拟机要好很多。其实它们并不是一回事,虚拟机需要一个 Hypervisor,通常都是虚拟机软件提供的,虚拟机有自己的独立的操作系统。容器里面并没有独立的操作系统,它跟主机之间会共用一个系统内核,容器会包含其它需要的东西,模拟出某种特定的系统环境,比如 Ubuntu,CentOS 等等。
我们可以自己去构建 Docker 镜像,在镜像里面安装网站的环境,做些特别的配置,再把网站的代码放进去。这个过程就像是去创建一个软件。然后你可以把自己构建好的镜像搬到任何地方去运行,只要这个地方上面安装了 Docker 就行,镜像运行起来的状态就是容器。