zoukankan      html  css  js  c++  java
  • 《Docker Deep Dive》Note Docker 引擎

    《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

  • 相关阅读:
    Mac安装zookeeper
    征途
    vue-配置文件
    数组去重
    判断身份证
    判断邮箱
    判断手机号是否正确
    JS 时间格式转换
    打印 print-js
    自"愚"自乐的云服务器
  • 原文地址:https://www.cnblogs.com/jimmyguu/p/11830718.html
Copyright © 2011-2022 走看看