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

    《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

  • 相关阅读:
    【转】基于 Apache 在本地配置多个虚拟主机
    ubuntu linux下各种格式软件包的安装卸载
    钩子
    静态方法中不能使用 $this
    Redis Sentinel机制与用法说明【转】
    CI 分页类的使用
    MySQL压力测试
    简单配置.htaccess就可以实现的10个功能
    bzoj 3529 数表
    poj2773 Happy 2006
  • 原文地址:https://www.cnblogs.com/jehorn/p/11830718.html
Copyright © 2011-2022 走看看