一:docker三大基础组件:

docker有三个重要的概念:仓库,镜像,容器,它们是docker的三大基础组件。

consul docker 架构图 docker组件简介_docker

 1.镜像:

操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而docker镜像,就相当于是一个root文件系统。比如官方镜像 ubuntu:18.04 就包含了完整的一套 ubuntu:18.04 最小系统的root文件系统。

docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序,库,资源,配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷,环境变量,用户等)。镜像不包含任何动态数据,其内容在构建之后也不会改变。

2.容器:

镜像(image)和容器(container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建,启动,停止,删除,暂停等。

容器的实质是进程,但与直接在宿主机执行的进程不同,容器进程运行于属于自己的独立的命名空间,因此容器可以拥有自己的root文件系统,自己的网络配置,自己的进程空间,甚至自己的用户ID空间。容器内的进程是运行在一个隔离的环境里,使用起来就像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性。

3.仓库:

镜像构建完成之后,可以很容易的在当前宿主机上运行,但是,如果需要在其他服务器上使用这个镜像,就需要一个集中的存储,分发镜像的服务,docker registry 就是这样的服务。

一个Docker Registry 中可以包含多个仓库,每个仓库可以包含多个标签,每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应软件的各个版本。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件那个版本的镜像。如果不给出标签,将以latest作为默认标签。

以 ubuntu 镜像为例,ubuntu是仓库的名字,其内包含有不同的版本标签,如:16.04 , 18.04   我们可以通过 ubuntu:16.04 ,或者ubuntu:18.04来具体指定所需的哪个版本的镜像。如果忽略了标签,比如 ubuntu,那将视为 ubuntu:latest.

consul docker 架构图 docker组件简介_容器_02

 仓库名经常以两段式路径形式出现,比如 jwilder/nginx-proxy,前者往往意味着 docker registry多用户环境下的用户名,后者则往往是对应的软件名。但这并非绝对,取决于所使用的具体 docker registry 的软件或服务。