docker引擎内部原理

docker主要由以下主要组件构成:docker客户端、docker守护进程(daemon)、containerd、runc、shim

daemon

daemon的主要功能包括镜像管理、镜像构建、REST API、身份验证、安全、核心网络以及编排。

containerd

主要任务就是对容器的生命周期管理---start|stop|pause|rm......

shim

shim是实现无daemon的容器(用于将运行中的容器与daemon解耦,以便进行daemon升级等的操作)

containerd指挥runc来创建新容器。事实上,每次创建容器时它都会fork一个新的runc示例,一旦容器创建完成对应runc进程会退出,然后containerd-shim进程就会成为容器的父进程,shim部分职责如下

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

runc

runc生来只有一个作用-----创建容器,这一点它速度很快

启动一个新的容器
docker container run -it --name test 7faaec683238 bash
  • 当使用docker命令行工具执行如上命令是,docker客户端会将其转换为合适的api格式,并发送到正确的api端点

  • api是在daemon中实现的。这套功能丰富、基于版本的rest api已经成为docker的标志

  • 一旦daemon接收到创建新容器的命令,它就会向containerd发出调令。(daemon已经不会再包含任何创建代码的模块了 分工明确)

  • 虽然名叫containerd 但是它并不负责创建容器,而是指挥runc去做。containerd将docker镜像转换为oci bundle 并让runc基于此创建一个新容器

  • runc与操作系统内核接口进行通信,基于所有必要的工具来创建容器。容器进程作为runc的子进程启动,启动完毕后,runc将会退出,然后containerd-shim进程就会成为容器的父进程

  • 由于将所有用于启动、管理容器的逻辑和代码都从daemon中移除,意味着容器运行时与daemon是解耦的,对于docker daemon的升级维护工作不会影响到运行中的容器

docker基础_docker引擎内部原理的更多相关文章

  1. Docker基础修炼2--Docker镜像原理及常用命令

    通过前文的讲解对Docker有了基本认识之后,我们开始进入实战操作,本文先演示Docker三要素之镜像原理和相关命令. 本文的演示环境仍然沿用上一篇文章在本地Centos7中安装的环境,如果你本地没有 ...

  2. docker基础_docker镜像与分层

    docker镜像与分层 docker镜像由一些松耦合的制度镜像层组成 docker负责堆叠这些镜像层并将它们表示为单个统一的对象 当 docker image pull ubuntu:latest 时 ...

  3. JVM 内部原理系列

    JVM 内部原理(一)— 概述 JVM 内部原理(二)— 基本概念之字节码 JVM 内部原理(三)— 基本概念之类文件格式 JVM 内部原理(四)— 基本概念之 JVM 结构 JVM 内部原理(五)— ...

  4. 『现学现忘』Docker基础 — 16、Docker中的基本概念和底层原理

    目录 1.Docker的底层原理 2.Docker中常用的基本概念 3.run命令的运行流程 4.为什么Docker比VM快 Docker架构图: 我们依照Docker架构图进行Docker基础概念的 ...

  5. JVM 内部原理(七)— Java 字节码基础之二

    JVM 内部原理(七)- Java 字节码基础之二 介绍 版本:Java SE 7 为什么需要了解 Java 字节码? 无论你是一名 Java 开发者.架构师.CxO 还是智能手机的普通用户,Java ...

  6. JVM 内部原理(六)— Java 字节码基础之一

    JVM 内部原理(六)- Java 字节码基础之一 介绍 版本:Java SE 7 为什么需要了解 Java 字节码? 无论你是一名 Java 开发者.架构师.CxO 还是智能手机的普通用户,Java ...

  7. 批处理引擎MapReduce内部原理

    批处理引擎MapReduce内部原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MapReduce作业生命周期 MapReduce作业作为一种分布式应用程序,可直接运行在H ...

  8. Docker基础(1) 原理篇

    Docker是什么 Docker的构成 Docker的分层和写时拷贝策略 Docker与主流虚拟机的区别 Docker镜像与容器的关系 镜像的变更管理 Docker是什么 Docker是一个开源的应用 ...

  9. docker基础内容讲解

    一.初识docker 1.1 LXC介绍 LXC为LinuX Container的简写.Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提 ...

随机推荐

  1. python 输入加密的MD5值,并搜索文件中的原始值

    此程序可以输入一串MD5的值,并在指定的文件中搜索到原始值.程序自有用处. #输入加密的MD5值,并搜索文件中的原始值 by qianxiao996 #博客地址:https://blog.csdn.n ...

  2. 10年.NET老程序员推荐的7个开发类工具

    做.NET软件工作已经10年了,从程序员做 到高级程序员,再到技术主管,技术总监.见证了Visual Studio .NET 2003,Visul Studio 2005, Visual Studio ...

  3. 生成树Toolkit

    STP Toolkit 快速收敛: Port Fast 生成树安全: Root Guard BPDU Guard BPDU Filter Port Security 防环: Loop Guard Po ...

  4. Java基础 - 异常详解

    异常的层次结构 Throwable Throwable 是 Java 语言中所有错误与异常的超类. Throwable 包含两个子类:Error(错误)和 Exception(异常),它们通常用于指示 ...

  5. 文档类型声明<!DOCTYPE html>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  6. idea中将已有项目转变为git项目,并提交到git服务器上

    idea中将已有项目转变为git项目,并提交到git服务器上 前言 有时候,本地有个项目不错,想要分享到github或者码云上,我们就会有这样的需求:项目在本地已经存在(可能不是git项目),又想提交 ...

  7. 面试问题之C++语言:简述编译过程

    转载于:https://blog.csdn.net/ypshowm/article/details/89374706 编译过程主要分为四步: 1.词法分析(扫描) 运行类似于有限状态机的算法将源代码的 ...

  8. springmvc组件组成以及springmvc的执行过程

    springmvc三大组件 处理器映射器:用户请求路径到Controller方法的映射 处理器适配器:根据handler(controlelr类)的开发方式(注解开发/其他开发) 方式的不同区寻找不同 ...

  9. spring的核心模块有哪些?

    Spring的七个核心模块,供大家参考,具体内容如下 1.Spring core:核心容器 核心容器提供spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关 ...

  10. 转载:23种常用设计模式的UML类图

    转载至:https://www.cnblogs.com/zytrue/p/8484806.html 23种常用设计模式的UML类图 本文UML类图参考<Head First 设计模式>(源 ...