Docker 的三大核心概念
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
1、Docker 镜像
Docker 镜像类似于虚拟机镜像,可以将它理解为一个面向 Docker 引擎的只读模版,包含了文件系统。
例如:一个镜像可以只包含一个完整的 Ubuntu 操作系统环境,可以把它称为一个 Ubuntu 镜像。镜像也安装了 Apahce 应用程序(或需要的其他软件),可以把它称为一个 Apache 镜像。
镜像是创建 Docker 容器的基础。通过版本管理和增量的文件系统,Docker 提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并通过简单的命令就可以直接运行。
2、Docker 容器
Docker 容器类似于一个轻量级的沙箱,Docker 利用容器来运行和隔离应用。
容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。
可以把容器看做一个简易版的 Linux 系统环境(这里包括 root 用户权限、进程空间、用户空间和网络空间等),以及其运行在其中的应用程序打包而成的应用盒子。
镜像自身是只读的。容器从镜像启动的时候,Docker 会在镜像的最上层创建一个可写层,镜像本身保持不变。
3、Docker 仓库
Docker 仓库类似于代码仓库,是Docker 集中存放镜像文件的场所。
有时候看到有资料将 Docker 仓库和注册服务器(Registry)混为一谈,并不严格区分。实际上,注册服务器是存放仓库的地方,其上往往存放着多个仓库。没个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(Tag)来进行区分。例如存放 Ubuntu 操作系统镜像的仓库,其中可能包括14.04、12.04 等不同版本的镜像。
目前,最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括 Docker Pool等,可以提供稳定的国内访问。
当然,用户如果不希望公开分享自己的镜像文件,Docker 也支持用户在本地网络内创建一个只能自己访问的私有仓库。
当用户创建了自己的镜像之后使用 push 命令将它上传到指定的公有或私有仓库。这样用户下次在另外一台机器上使用该镜像时,只需要将其从仓库 pull 下来就可以了。