Docker 包括三大核心概念:镜像(Image)、容器(Container)和仓库(Repository)。
(1)镜像
镜像类似于虚拟机镜像,可以把它理解为一个只读的模板。例如,一个包含 Nginx 应用程序的镜像,其内部包含一个基本的操作系统环境以及 Nginx 应用程序 。 镜像是创建 Docker 容器的基础,通过版本管理和增量文件系统, Docker 提供了一套机制来创建或更新现有的镜像,我们还可以从网上下载并使用别人已经做好的镜像。
(2)容器
Docker 容器类似于一个轻量级沙箱, Docker 利用容器来运行和隔离上层应用。容器与镜像的关系类似于面向对象编程中的对象与类。从镜像中创建的应用,在容器中运行实例,从而保证实例之间不会相互影响。容器可以启动 、 开始 、 停止 、 删除,并且这些容器都是彼此相互隔离 、 互不可见的。
镜像本身是只读的,而容器会在启动镜像时,在镜像的最上层创建一个可写层,执行一些必要的写入操作。
(3)仓库
Docker 仓库类似于代码仓库,是集中存放 Docker 镜像文件的地方。根据所存储的镜像是否公开,我们可以把仓库分为公开仓库 ( Public ) 和私有仓库 ( Private ) 两种形式。
目前,最大的公开仓库是官方提供的 Docker Hub,其中存放着数量庞大的镜像供我们下载使用。国内也有不少云服务提供商 ( 如腾讯云 、 阿里云等 ) 也提供了仓库的本地源,为我们提供稳定的国内访问。
我们创建好自有镜像后就可以使用 push 命令将它上传到指定的公有或者私有仓库。这样其他人就可以在另外一台机器上下载并使用该镜像,这很像 Git 代码仓库的管理与使用方式。
Docker 就是依靠镜像、容器和仓库所构建起来的,它们之间的关系如图 1 所示。
<仓库名>:<标签>
的格式来指定这个软件所对应版本的镜像。如果不给出标签,将以 latest 作为默认标签。实际上标签的概念类似于软件的版本号。