《Docker Deep Dive》Note

Docker 引擎

1. 概览

graph TB
A(Docker client) --- B(daemon)
subgraph Docker 引擎
B --- C(containerd)
C --- D(runc)
end

Docker 引擎是用来运行和管理容器的核心软件。
主要构成:Docker Client、Docker daemon(Docker守护进程)、containerd、runc。

2. 详解

graph TB
A(Docker client) --- B(Docker daemon)
B --- C(containerd)
subgraph 容器Supervisor
C --- D(shim)
D --- D1(runc)
D1 --- D2[运行容器]
C --- E(shim)
E --- E1(runc)
E1 --- E2[运行容器]
C --- F(shim)
F --- F1(runc)
F1 --- F2[运行容器]
C --- G(shim)
G --- G1(runc)
G1 --- G2[运行容器]
end

3. 开放容器计划(OCI)

基于 OCI 的标准,Docker 引擎采用模块化设计。
开放容器计划定义了两个容器相关的规范:

  • 镜像规范
  • 容器运行时规范

Docker 引擎尽可能实现了OCI的规范,Docker daemon 不再包含任何容器运行时的代码,所有的容器运行时代码在一个单独的OCI兼容层中实现。

4. runc

runc 是 OCI 容器运行时规范的参考实现(容器运行时)。
runc 只有一个作用--创建容器。
基于 Libcontainer。

5. containerd

containerd 的作用是容器的生命周期管理。
containerd 在 Linux 和 Windows 中以 Daemin 的方式运行。
containerd 也包含诸如镜像管理的模块化功能。

6. 启动容器

graph TB
A(Docker client) --向 Docker API 发出 docker container run 命令--> B(Docker daemon)
B --在 API 端点接收指令 指示 containerd 启动新容器--> C(containerd)
C --给 runc 传递 OCI bundle即镜像 指示 runc 创建容器--> D(shim)
subgraph runc
D --> E(runc)
E --> F(运行容器)
end

7. 解耦模型的优势

daemonless container

  • Docker daemon 的维护和升级工作不会影响到运行中的容器。

8. shim 组件

  • 保持所有 STDIN 和 STDOUT 流是开启状态,从而当 daemon 重启的时候容器不会因为管道(pipe)的关闭而终止。
  • 将容器的退出状态反馈给 daemon。

9. daemon

目前仍然有很多功能是在 Docker daemon 中实现的。
其中多数功能可能会随着时间推移被拆解。
目前 daemon 中存在但不仅限的功能包括:API、镜像管理、身份认证、安全特性、核心网络以及卷。

由此可以得出结论:Docker 引擎的模块化工作仍在进行中。

The end
Last updated by Jehorn

《Docker Deep Dive》Note - Docker 引擎的更多相关文章

  1. 《Docker Deep Dive》Note - 纵观 Docker

    <Docker Deep Dive>Note 由于GFW的隔离,国内拉取镜像会报TLS handshake timeout的错误:需要配置 registry-mirrors 为国内源解决这 ...

  2. Dive查看docker镜像层信息

    1.主要采用docker运行dive的方式,不然宿主机还要安装go那些挺麻烦的.具体用法可查看官方: https://github.com/wagoodman/dive 2.拉取dive镜像 dock ...

  3. 【docker专栏3】docker基础概念-容器、镜像以及引擎组成部分

    一.docker镜像与容器 docker镜像是一个可执行的静态独立软件包,包含打包程序代码和软件运行环境等文件.如:代码.运行时库.环境变量和配置文件等都包含在其中.容器是镜像的运行时状态(镜像中的软 ...

  4. docker operation method note

    docker stop script #!/bin/bash CID_LIST=$(docker ps -q | xargs)if [ "$CID_LIST" = "&q ...

  5. Docker入门之安装Docker

    目录 目录 1 1. 前言 1 2. 创建网桥 2 3. 安装Docker 2 3.1. 二进制安装 3 3.1.1. 下载安装 3 3.1.2. 配置服务 3 3.1.3. 启动服务 4 3.2. ...

  6. Docker学习总结之docker安装

    Ubuntu安装指南 以下均翻译自Docker官方文档 ,转载请注明:Vikings翻译 Docker 支持多种平台下的安装运行,现在我们选取结合度最高的ubuntu来说明安装过程. 首先需要明确Do ...

  7. Docker学习总结之docker入门

    Understanding Docker 以下均翻译自Docker官方文档 ,转载请注明:Vikings翻译. What is Docker? Docker 是一个开源的平台,设计目标是可以方便开发, ...

  8. docker 1.12 版本 docker swarm 集群

    博客已经迁移到 个人博客中 个人博客 更新地址: http://www.xf80.com/2016/10/25/docker-swarm-1.12/ docker 1.12 版本 的新特性 (1)do ...

  9. Docker系统六:Docker网络管理

    Docker网络 I. Docer的通信方式 默认情况下,Docker使用网桥(brige)+ NAT的通信模型. Docker启动时会自动创建网桥Docker0,并配置ip 172.17.0.1/1 ...

随机推荐

  1. hibernate之一对多关系

    1. 什么是关联(association) 1.1 关联指的是类之间的引用关系.如果类A与类B关联,那么被引用的类B将被定义为类A的属性.例如: public class A{ private B b ...

  2. CF468C 【Hack it!】

    构造题果然都非常神仙啊 首先翻译有点问题,\(L, R\)的范围应该为\([1, 10^{200}]\) 由于模数a达到了\(10^{18}\),所以我们可以发现,当\(i<10^{18}\)时 ...

  3. 不能对以下表使用 TRUNCATE TABLE

    1.由 FOREIGN KEY 约束引用的表.(您可以截断具有引用自身的外键的表.) 2.参与索引视图的表. 3.通过使用事务复制或合并复制发布的表. 4.对于具有以上一个或多个特征的表,请使用 DE ...

  4. 学习opencv(1)

    目录 CV_8UC3 Scalar--颜色赋值 using namespace cv找不到命名空间 waitKey() getTickCount() 引用 CV_8UC3 a) 存放单通道图像中像素: ...

  5. 【大数据应用期末总评】Hadoop综合大作业

    作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 一.Hadoop综合大作业 要求: 1.将爬虫大作业产生的csv ...

  6. 大数据 | 分布式文件系统HDFS 练习

    本次作业来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3292 利用Shell命令与HDFS进行交互 以”./bin/dfs ...

  7. Android A/B System OTA分析(一)概览【转】

    本文转载自:https://blog.csdn.net/guyongqiangx/article/details/71334889 Android从7.0开始引入新的OTA升级方式,A/B Syste ...

  8. Java_jdbc 基础笔记之八 数据库连接(写一个查询Student对象的方法)

    public Student getStudent(String sql, Object... args) { // 查询Student对象 Student stu = null; Connectio ...

  9. win10下通过npm成功搭建react开发环境

    1.安装node-v12.13.1-x64(LTS) 2.安装creatre-react-app: npm install -g create-react-app 3.通过create-react-a ...

  10. 不使用BASE64Encoder、BASE64Decoder

    BASE64Encoder/BASE64Decoder类在sun.misc包下,是sun公司的内部方法,后期有删除的潜在可能,建议使用apache commons.codec下的Base64替代. m ...