前言:最近在读《深入浅出Docker》这本书,发现里面有个章节讲解的比较深入,所以,基于书的内容进行了整理,希望能对docker架构有个比较深入的理解。
概述
docker引擎是用来运行和管理容器的核心软件,通常将其代指为docker或者docker平台,docker引擎由如下主要的构建组成:docker cli、docker daemon、containerd以及runc,共同负责容器的创建和运行。docker引擎的架构示意图如下:
docker daemon实现了docker api,对容器的操作由containerd完成,containerd需要指挥与OCI相兼容的容器运行时来创建容器,默认情况下,docker使用runc来作为其默认的容器运行时,containerd调用runc,并确保docker镜像以OCI bundle的格式传给runc。其中,
- OCI(开放容器计划)定义了两个容器相关的规范:
- 镜像规范
- 容器运行时规范
runc是OCI容器运行时标准的参考实现,runc实际上是一个轻量级的、针对libcontainer进行了包装的命令行交互工具。runc生来只有一个作用,创建容器。
关于libcontainer:LXC提供了对诸如命名空间(Namespace)和控制组(CGroup)等基础工具的操作能力