一、镜像
镜像是一个只读的文件和文件夹组合,是容器运行的基础,包含了容器运行所需要的的基础文件和配置信息。
来源:自己制作;镜像仓库拉取(docker hub)
二、容器
通俗的理解,容器是镜像的运行实体。
镜像是静态的可读文件,容器带有运行时所需要的可写文件层,容器运行着真正的进程。
容器的状态:初建、运行、暂停、停止、删除
在容器内部,无法看到主机上的环境变量、运行的进程、网络等信息。
三、仓库
仓库用来存储和分发docker镜像,包含共有仓库和私有仓库,docker官方仓库:Docker Hub
总结:镜像、容器、仓库之间的关系如下图
四、docker架构
由上图可以看到,Docker 整体架构采用 C/S(客户端 / 服务器)模式,主要由客户端和服务端两大部分组成。客户端负责发送操作指令,服务端负责接收和处理指令。客户端和服务端通信有多种方式,即可以在同一台机器上通过UNIX套接字通信,也可以通过网络连接远程通信。
重要组件
- runC是 Docker 官方按照 OCI 容器运行时标准的一个实现。通俗地讲,runC 是一个用来运行容器的轻量级工具,是真正用来运行容器的。
- containerd是 Docker 服务端的一个核心组件,它是从dockerd中剥离出来的 ,它的诞生完全遵循 OCI 标准,是容器标准化后的产物。containerd通过 containerd-shim 启动并管理 runC,可以说containerd真正管理了容器的生命周期
通过如下命令,查看上图中各个组件之间的进程关系:
dockerd 启动的时候, containerd 就随之启动了,dockerd 与 containerd 一直存在。当执行 docker run 命令(通过 busybox 镜像创建并启动容器)时,containerd 会创建 containerd-shim 充当 “垫片” 进程,然后启动容器的真正进程