Docker 核心概念及架构

Docker 核心概念

镜像

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

镜像使用有以下两种方式:
● 自建镜像:在基础镜像上添加一些用户自定义的内容,多见于 Dockerfile。
● 他人镜像:在镜像仓库上获取已制作好的一些常用的软件或者系统镜像,类似官方的 Docker Hub。

容器

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

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


仓库

Docker 的镜像仓库类似于代码仓库,用来存储和分发 Docker 镜像。镜像仓库又分为公共镜像仓库和私有镜像仓库。目前,Docker Hub 是 Docker 官方的公开镜像仓库,它不仅有很多应用或者操作系统的官方镜像,还有很多组织或者个人开发的镜像供我们免费下载和使用。除了公开镜像仓库,我们也可以构建自己的私有镜像仓库,仅公司内部使用。


镜像、容器及仓库之间的联系

下图所示,镜像是容器的基石,容器是由镜像创建的;一个镜像可以创建多个容器,容器是镜像运行的实体;而仓库是用来存放和分发镜像的。

镜像、容器、仓库关系图


Docker 核心架构

容器技术标准

OCI 全称为开放容器标准(Open Container Initiative),它是一个轻量级、开放的治理结构。OCI 组织在 Linux 基金会的大力支持下,于 2015 年 6 月份正式注册成立。基金会旨在为用户围绕工业化容器的格式和镜像运行时,制定一个开放的容器标准。目前主要有两个标准文档:容器运行时标准 (runtime spec)和容器镜像标准(image spec)。

重要组件

dockerd:一个非常重要的后台管理进程,它负责响应和处理来自 Docker 客户端的请求,然后将客户端的请求转化为 Docker 的具体操作,例如镜像、容器、网络和挂载卷等具体对象的操作和管理。

containerd:Docker 服务端的一个核心组件,它是从 dockerd 中剥离出来的 ,它的诞生完全遵循 OCI 标准,是容器标准化后的产物。containerd 通过 containerd-shim 启动并管理 runC,可以说 containerd 真正管理了容器的生命周期。

containerd-shim:译为垫片,主要作用是将 containerd 和真正的容器进程解耦,使用 containerd-shim 作为容器进程的父进程,从而实现重启 dockerd 不影响已经启动的容器进程。

runC:Docker 官方按照 OCI 容器运行时标准的一个实现。通俗地讲,runC 是一个用来运行容器的轻量级工具,是真正用来运行容器的。

Docker 架构图


组件之间关系

以下通过一个例子来描述 Docker 各组件之间的关系:
dockerd 启动的时候, containerd 也随之启动了,dockerd 与 containerd 一直存在。当执行 docker run 命令(通过 busybox 镜像创建并启动容器)时,containerd 会创建 containerd-shim 充当 “垫片” 进程,然后启动容器的真正进程 sleep 3600

### 启动一个 busybox 容器
$ docker run -d busybox sleep 3600

### 查看该 dockerd 的 PID 进程号
$ ps aux | grep dockerd
root  2021  0.3  0.2 1447892 83236 ?  Ssl  Jul03 00:10 /usr/bin/dockerd

### 根据 PID 查看进程调用关系
$ pstree -l -a -A 2021
dockerd
  |-containerd --config /var/run/docker/containerd/containerd.toml --log-level info
  |   |-containerd-shim -namespace mytest -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/mytest/d14d20507073e5743e607efd616571c834f1a914f903db6279b8de4b5ba3a46a -address /var/run/docker/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc
  |   |   |-sleep 3600
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值