镜像、容器、仓库,彻底掌握 Docker 架构核心设计理念

  • Docker 核心概念
  • 镜像

镜像是一个只读的文件和文件夹组合。它包含了容器运行时所需要的所有基础文件和配置信息,是容器启动的基础。所以你想启动一个容器,那首先必须要有一个镜像。镜像是 Docker 容器启动的先决条件。

  • 容器

容器是什么呢?通俗地讲,容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有初建、运行、停止、暂停和删除五种状态。

虽然容器的本质是主机上运行的一个进程,但是容器有自己独立的命名空间隔离和资源限制。也就是说,在容器内部,无法看到主机上的进程、环境变量、网络等信息,这是容器与直接运行在主机上进程的本质区别。

  • 仓库

Docker 的镜像仓库类似于代码仓库,用来存储和分发 Docker 镜像。镜像仓库分为公共镜像仓库和私有镜像仓库。
镜像、容器、仓库,三者之间的联系

img

  • Docker 架构

    OCI全称为开放容器标准(Open Container Initiative),它是一个轻量级、开放的治理结构。

    目前主要有两个标准文档:容器运行时标准 (runtime spec)和容器镜像标准(image spec)。
    img

Docker 整体架构采用 C/S(客户端 / 服务器)模式,主要由客户端和服务端两大部分组成。客户端负责发送操作指令,服务端负责接收和处理指令。客户端和服务端通信有多种方式,既可以在同一台机器上通过UNIX套接字通信,也可以通过网络连接远程通信。

  • Docker 客户端

    • docker 命令是 Docker 用户与 Docker 服务端交互的主要方式。
    • 直接请求 REST API 的方式与 Docker 服务端交互。
    • 使用各种语言(Go、Java、Python、PHP)的 SDK 与 Docker 服务端交互。
  • Docker 服务端

    • dockerd 是一个非常重要的后台管理进程,它负责响应和处理来自 Docker 客户端的请求,然后将客户端的请求转化为 Docker 的具体操作。例如镜像、容器、网络和挂载卷等具体对象的操作和管理。
    • Docker 服务端模块负责和 Docker 客户端交互,并管理 Docker 的容器、镜像、网络等资源。
  • Docker 重要组件

    Docker 的两个至关重要的组件:runC和containerd

    • runC是 Docker 官方按照 OCI 容器运行时标准的一个实现。通俗地讲,runC 是一个用来运行容器的轻量级工具,是真正用来运行容器的。
    • containerd是 Docker 服务端的一个核心组件,它是从dockerd中剥离出来的 ,它的诞生完全遵循 OCI 标准,是容器标准化后的产物。containerd通过 containerd-shim 启动并管理 runC,可以说containerd真正管理了容器的生命周期。
    • dockerd通过 gRPC 与containerd通信,由于dockerd与真正的容器运行时,runC中间有了containerd这一 OCI 标准层,使得dockerd可以确保接口向下兼容。
    • containerd-shim 的意思是垫片,类似于拧螺丝时夹在螺丝和螺母之间的垫片。containerd-shim 的主要作用是将 containerd 和真正的容器进程解耦,使用 containerd-shim 作为容器进程的父进程,从而实现重启 dockerd 不影响已经启动的容器进程。

    参考

posted @ 2021-02-02 11:20  ainimore  阅读(188)  评论(0编辑  收藏  举报