一、概述
- Docker中有三个核心概念,分别是:镜像(Image)、容器(Container)、仓库(Repository)。镜像类似于一个模板文件,可以参考我们安装操作系统时所使用的(Windows、CentOS)镜像来理解Docker中镜像的概念。通过运行系统镜像能够安装一套相应的操作系统,运行Docker镜像,可以获得一个Docker容器。Docker容器类似于一个独立、隔离的“集装箱”,在这个“集装箱”中可能运行着一套操作系统,也可能是一个应用程序。Docker仓库的概念比较好理解,类似于我们日常生活中仓库的概念,Docker仓库即是存放镜像的场所。以上三者的概念如下:
二、核心概念
(一)Docker镜像
- Docker镜像类似于操作系统镜像(Windows、Linux、OS),也可以理解成一个只读模板。在企业工作场景中,Docker镜像是项目交付过程中的重要交付物,工程师通过将软件项目、依赖环境等打包到一个Docker镜像中,然后将Docker镜像发送给其他工程师以实现项目的交付或检验。
- 镜像也是创建容器的基础,Docker镜像与Docker容器之间的关系就好比是CentOS镜像与CentOS系统虚拟机之间的关系。所以打包好了镜像,该镜像所能够提供的功能也就固定了。
- 构建镜像时,还有一个分层的概念在里面。后面会讲到基于Dockerfile构建镜像,在这个过程中,每执行一次Dockerfile中的指令,就会在原镜像的基础上再增加一层,如此层层累加,最终得到我们想要的镜像。
(二)Docker容器
- Docker容器类似于一个轻量级的沙箱(或者参考Docker logo中的集装箱来理解),Docker基于容器来运行和隔离应用程序。
- Docker容器是由Docker镜像运行得来的,关于容器的操作包括启动(run)、开始(start)、停止(stop)、删除(rm)等。
- 镜像本身是只读的,容器是从镜像中启动得来的,当启动镜像时,会在镜像的最上层创建一个可写层。
- 容器是我们使用Docker提供相关服务(可能是一套操作系统,也可能是一项软件服务,或者其他内容)的最终形式,例如我们想通过Docker部署一套MySQL数据库,那MySQL数据库服务最终就是通过Docker容器提供的。
(三)Docker仓库
- Docker仓库的概念比较好理解,与我们日常生活中“仓库”的概念类似,就是存放东西的地方,这里的Docker仓库就是集中存放镜像文件的场所。
- 另一个容易与Docker仓库(Repository)混淆的概念是仓库注册服务器(Registry)。仓库注册服务器是存放仓库的地方,可以在仓库注册服务器中存放多个仓库。每个仓库中通常集中存放某一类镜像,这些同类镜像往往又通过不同的标签(tag)进行区分,例如“Ubuntu:16.04”,“Ubuntu:18.04”。
- 根据存储镜像的权限设置,Docker仓库又可以分为公开仓库(Public)和私有仓库(Private)两种形式。
- 目前市场上,最大的公开仓库是Docker官方提供的Docker hub,该仓库下存放着大量开源的镜像以供工程师下载。其次,国内诸如阿里云、腾讯云等公有云服务厂商也提供了docker仓库服务。
- 为了保护自己公司的知识产权,以及提高软件产品的安全性,部分企业也会建立自己的私有仓库,即是在公司的内网中建立只提供给公司内部访问的私有仓库。