0%

Docker 基础概念

参考: Docker实践, Docker Deep Dive;

Docker 中存在若干基础概念, 理解基础概念,有助于理解Docker 的整个生命周期, 例如:

  • 镜像 (Image)
  • 容器 (Container)
  • 服务 (Registry)

Image 镜像

  • 镜像是什么?

    • 感性上讲: 对于VM 管理员来说, 镜像是VM模板; 对于编码人员来说, 镜像是Class; 对于操作系统而言, 镜像相当于是一个root 文件系统; PS: 操作系统分为内核与用户空间. 对于Linux, 内核启动后, 会挂在root文件系统为其提供用户空间支持.

    • 理性上讲: 镜像是一个特殊的文件系统,其不仅提供了容器运行需要的程序, 库, 资源, 配置等文件, 还提供了运行时准备的位置参数(比如匿名卷, 环境变量, 用户);

  • 镜像的组成:

    镜像的构成设计采用了Union FS技术, 设计为分层存储的结构; 也就是说镜像并不是像ISO 那样的整个打包文件, 镜像是由一组文件系统联合组成的;

    对于内部而言, 镜像是由一个精简的OS, 同时包括运行应用需要的文件和依赖包组成; 由底向上,分层构成;

    对于外部而言, 镜像是一个独立的对象;

  • 镜像的构建过程:

    如镜像组成所示, 镜像的构建是一层层构建的, 前一层是后一层的基础, 每一层构建完后, 不会再发生变更, 后一层的变动, 仅影响当前层; 这也就需要在镜像构建时, 保证每一层,仅添加需要添加的文件, 额外的文件, 应当在当前层构建时清理掉;

Container 容器

  • 容器是什么?

    容器是镜像的运行时实例, 这与ClassObject 的关系是一致的, 从这个角度来说镜像是静态的定义, 容器时动态的定义;

  • 容器运行的操作?

    既然是运行时的概念, 那么相关操作可以有: 容器创建, 启动, 停止, 删除, 暂定等;

  • 容器的本质

    容器的本质是进程, 但是其运行于自己独立的命名空间中, 因此容器具备自己的root 文件系统, 网路配置, 进程空间, 用户ID空间.

  • 容器的运行时发生了什么?

    由于镜像时分层存储的, 容器在运行时, 也是同理, 在以镜像层作为基础层, 在其上创建一个当前容器的存储层, 其为容器运行时读写而出现, 称为 容器存储层; 容器存储层的生命后期与容器保持一致;

Registry 服务

Docker Registry 是什么?

镜像构建完成后, 想要在其他服务上使用该镜像, 则需要一个是镜像进行集中存储与分发的服务, 这就是 Docker Registry;

Docker Registry 的组成?

一个Docker Registry 包含有多个仓库 Repository, 每个仓储包含有多个标签 Tag; 每个标签, 对应一个镜像;

Docker Registry 公开服务有哪些?

默认的是官方的 Docker Hub, 还有 Red HatQuary.io, GoogleGoogle Container Registry, GitHubghcr.io等;