02 | Docker核心概念

02 | Docker核心概念

镜像

镜像通俗的讲就是只读的文件夹和文件夹组合,包含了容器运行时所需要的所有基础文件和配置信息,是容器启动的基础。

使用镜像:

  1. 自己创建镜像。在基础镜像上添加用户自定义的内容。
  2. 从功能镜像仓库拉取别人制作好的仓库。

容器

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

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

仓库

Docker的仓库类似于代码仓库,用来存储和分发Docker镜像。

  • 公共镜像仓库
    Dockhub
  • 私有镜像仓库

在这里插入图片描述

镜像、容器和仓库之间的关系

Docker架构

在这里插入图片描述

C/S模式。客服端负责发送操作指令,服务器端负责接收和处理指令。
客户端和服务器端通信有多种方式

  • 同一台机器上通过UNIX套接字通信
  • 网络连接远程通信

Docker客户端

Docker客户端其实是一种泛称。交互方式有:

  • docker命令
  • 直接请求 REST API 的方式
  • 使用各种语言(如Java)的 SDK 与 Docker 服务端交互

Docker服务器端

它是Docker所有后台服务的统称。其中dockerd是一个非常重要的后台管理进程,它负责响应和处理来自Docker客户端的请求,然后讲客户端清楚转为Docker的具体操作。例如镜像、容器、网络、挂载卷等具体对象的操作和管理。

Docker的重要组件

  • runC 是Docker官方按照 OCI容器运行时标准的一个体现。runC是一个用来运行容器的轻量级工具,是真正用来运行容器的
  • containerd 是Docker服务器端的一个核心组件,它是从dockerd种剥离出来的,是容器标准化后的产物。containerd通过containerd-shim启动并管理runC,它真正管理了容器的生命周期。

gRPC 是一种远程服务调用。想了解更多信息可以参考https://grpc.io
containerd-shim 的意思是垫片,类似于拧螺丝时夹在螺丝和螺母之间的垫片。containerd-shim 的主要作用是将 containerd 和真正的容器进程解耦,使用 containerd-shim 作为容器进程的父进程,从而实现重启 containerd 不影响已经启动的容器进程.

事实上,dockerd 启动的时候, containerd 就随之启动了,dockerd 与 containerd 一直存在。当执行 docker run 命令(通过 busybox 镜像创建并启动容器)时,containerd 会创建 containerd-shim 充当 “垫片”进程,然后启动容器的真正进程 sleep 3600 。这个过程和架构图是完全一致的。

遇到的问题

  1. 进行docker操作前要先启动
  2. containerd 是管理容器声明周期的,containerd-shim 是为了解耦 containerd 与业务进程,runc 是真正启动容器进程的
  3. Docker 的二进制默认安装在 /usr/bin/ 目录下

猜你喜欢

转载自blog.csdn.net/Cirtus/article/details/108942446