参考: Docker实践, Docker Deep Dive;
Docker
中存在若干基础概念, 理解基础概念,有助于理解Docker
的整个生命周期, 例如:
- 镜像 (Image)
- 容器 (Container)
- 服务 (Registry)
Image 镜像
镜像是什么?
感性上讲: 对于
VM
管理员来说, 镜像是VM
模板; 对于编码人员来说, 镜像是Class
; 对于操作系统而言, 镜像相当于是一个root
文件系统; PS: 操作系统分为内核与用户空间. 对于Linux, 内核启动后, 会挂在root
文件系统为其提供用户空间支持.理性上讲: 镜像是一个特殊的文件系统,其不仅提供了容器运行需要的程序, 库, 资源, 配置等文件, 还提供了运行时准备的位置参数(比如匿名卷, 环境变量, 用户);
镜像的组成:
镜像的构成设计采用了
Union FS
技术, 设计为分层存储的结构; 也就是说镜像并不是像ISO
那样的整个打包文件, 镜像是由一组文件系统联合组成的;对于内部而言, 镜像是由一个精简的
OS
, 同时包括运行应用需要的文件和依赖包组成; 由底向上,分层构成;对于外部而言, 镜像是一个独立的对象;
镜像的构建过程:
如镜像组成所示, 镜像的构建是一层层构建的, 前一层是后一层的基础, 每一层构建完后, 不会再发生变更, 后一层的变动, 仅影响当前层; 这也就需要在镜像构建时, 保证每一层,仅添加需要添加的文件, 额外的文件, 应当在当前层构建时清理掉;
Container 容器
容器是什么?
容器是镜像的运行时实例, 这与
Class
与Object
的关系是一致的, 从这个角度来说镜像是静态的定义, 容器时动态的定义;容器运行的操作?
既然是运行时的概念, 那么相关操作可以有: 容器创建, 启动, 停止, 删除, 暂定等;
容器的本质
容器的本质是进程, 但是其运行于自己独立的命名空间中, 因此容器具备自己的
root
文件系统, 网路配置, 进程空间, 用户ID空间.容器的运行时发生了什么?
由于镜像时分层存储的, 容器在运行时, 也是同理, 在以镜像层作为基础层, 在其上创建一个当前容器的存储层, 其为容器运行时读写而出现, 称为
容器存储层
;容器存储层
的生命后期与容器保持一致;
Registry 服务
Docker Registry
是什么?
镜像构建完成后, 想要在其他服务上使用该镜像, 则需要一个是镜像进行集中存储与分发的服务, 这就是 Docker Registry
;
Docker Registry
的组成?
一个Docker Registry
包含有多个仓库 Repository
, 每个仓储包含有多个标签 Tag
; 每个标签, 对应一个镜像;
Docker Registry
公开服务有哪些?
默认的是官方的 Docker Hub
, 还有 Red Hat
的Quary.io
, Google
的 Google Container Registry
, GitHub
的ghcr.io
等;