二、Docker三大核心概念
Docker三大核心概念
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
镜像(Image)
Docker镜像是用于创建Docker容器的模板。
这样说比较难以理解,举例来说,安装操作系统相信不少人都会。安装操作系统之前,要去下载对应的iso镜像文件,那就就可以把下载下来的这个iso镜像文件当作Docker的镜像。当这个镜像安装完成运行起来之后就是操作系统了。也是就说,Docker镜像是创建容器的基础,先有镜像,再有容器。
镜像分层存储架构设计
Docker设计时,充分利用了Union FS技术,设计为分层存储。
在构建镜像时,会一层层构建,前一层是后一层的基础。每一层构建完毕之后不再发生改变,每一层的改变只发生在自己这一层。如A、B、C三层,改变B层时,A、C层不受影响。由于删除文件时不真的删除,而是为其打上一个删除的标记,容器运行时,这个被删除的文件依旧存在,只是看不到这个文件。所以在构建镜像时,每层尽量只包含该层所需要的东西。
容器(Container)
镜像与容器的关系如同面向对象程序设计中的类与对象的关系。镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、删除、停止等。回想一下,我们中OOP设计中,定义类时,这就相当于一个Docker 镜像(Image),当实例化这个类创建出对象时,这就相当于Docker中的容器(Container)。
容器的实质是一个进程。与直接在宿主执行的进程不同,容器进程运行于属于自己独立的命名空间。因此容器拥有自己的root文件系统、网络配置、进程空间。用户ID空间。容器内的进程运行在一个隔离的环境中,多个容器之间不受影响。
容器的运行同样也是分层存储,每个容器运行时,以镜像为基础层,在其上层创建一个当前容器的存储层,即为容器运行时读写而准备的存储层为容器存储层。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,基础容器存储层保存的数据都会随容器的删除而丢失。
仓库(Registry)
镜像构建完毕之后,若要在其它机器上运行两样的环境,那么就需要一个集中存储、分发镜像的服务,这就是Docker Registry服务。
仓库分为公有仓库(Public)和私有仓库(Private)