docker 创建容器过程

结合下图,本文讨论docker 创建容器过程:
在这里插入图片描述

START└── [用户通过Docker Client发出指令]└── (1) docker run 或 docker create 命令├── (2) Docker Client与Docker Daemon建立通信连接└── (3) Docker Daemon接收到创建容器请求├── (4) 检查本地是否存在指定镜像│       ├── (4a) 存在:使用本地镜像│       └── (4b) 不存在:从Docker Registry拉取镜像├── (5) 镜像下载完成后,根据镜像元数据创建新的容器配置├── (6) 分配唯一的容器ID├── (7) 设置容器的网络配置├── (7a) 创建或加入网络(如桥接网络、overlay网络等)├── (7b) 配置端口映射、DNS等网络参数└── (7c) 设置容器间链接(如果适用)├── (8) 设置容器存储卷(如有必要)├── (8a) 绑定挂载宿主机目录├── (8b) 创建或使用数据卷容器└── (8c) 使用临时文件系统或存储驱动进行持久化存储├── (9) 初始化容器环境变量、用户、工作目录等配置└── (10) 准备容器运行时环境├── (10a) 创建容器命名空间、控制组(cgroups)、安全上下文等└── (10b) 启动容器进程(执行指定的ENTRYPOINT和CMD)└── (11) 容器运行时监控├── (11a) 监控容器资源使用情况(CPU、内存、磁盘、网络)├── (11b) 根据cgroups限制调整资源分配└── (11c) 处理容器生命周期事件(如重启、停止、退出)└── (12) 用户访问与交互├── 提供API接口供Docker Client查询容器状态、 logs等信息├── 支持通过`docker exec`命令进入容器执行命令└── 在容器终止时处理退出码及清理工作

注解:

1、 用户通过Docker客户端(如命令行界面CLI)执行docker rundocker create命令,指定要使用的镜像、运行参数等。

2、Docker客户端与Docker守护进程(Docker Daemon,即Docker Engine)建立远程API连接,以便发送请求和接收响应。

3、Docker守护进程接收到创建容器的请求后,开始处理该请求。

4、检查本地镜像仓库中是否已有指定的镜像。如果有,直接使用;如果没有,需从Docker Registry(如Docker Hub)拉取。

  • 如果本地存在所需镜像,则跳过下载步骤。

  • 如果本地不存在所需镜像,Docker会从注册表拉取镜像,并将其存储在本地镜像仓库。

5、根据选定的镜像元数据(如镜像层、环境变量、默认入口点等)生成新的容器配置。

6、为新容器分配一个唯一的容器ID。

7、设置容器的网络配置,包括但不限于:

  • 将容器加入已有的网络(如桥接网络、overlay网络等)或创建新的网络。
  • 配置端口映射,将容器内部端口暴露到宿主机或其他网络。
  • 设置DNS解析规则和其他网络参数,确保容器间通信和对外访问。

8、设置容器的存储卷,用于持久化数据或共享数据:

  • 可以将宿主机上的目录绑定挂载到容器内。
  • 使用数据卷容器(Data Volume Container)共享数据。
  • 通过临时文件系统(如tmpfs)或特定存储驱动(如devicemapper、overlay2等)管理持久化存储。

9、初始化容器的环境变量、用户、工作目录等运行时配置,即创建容器1号进程。

10、准备容器运行时环境:

  • 创建必要的Linux命名空间(如PID、NET、MNT等)、控制组(cgroups)以实现资源隔离与限制,以及安全上下文(如SELinux标签)。
  • 最后,启动容器主进程,执行镜像定义的ENTRYPOINT和CMD。

11、容器运行时监控:

  • 监控容器的CPU、内存、磁盘、网络等资源使用情况。
  • 根据cgroups设置对容器资源进行动态调整。
  • 处理容器的生命周期事件,如自动重启、手动停止、异常退出等。

12、容器状态变更时,Docker守护进程将通知Docker客户端更新状态信息。

以上流程涵盖了从用户发起容器创建请求到容器实际运行起来的全过程,涉及的主要组件包括Docker Client、Docker Engine(Daemon)、镜像、容器运行时、网络配置、存储管理等。您可以根据此描述绘制详细的流程图来直观展现整个过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/304048.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL数据库 | 第二十五篇】深入探讨MVCC底层原理

前言: 在当今互联网时代,数据库扮演着数据存储和管理的关键角色。对于大型Web应用程序和企业级系统而言,高效地处理并发访问和事务管理是至关重要的。多版本并发控制(MVCC)是一种数据库事务处理的技术,旨…

【复现】用友NC-Cloud文件上传漏洞_70

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 用友NC Cloud大型企业数字化平台,深度应用新一代数字智能技术,完全基于云原生架构,打造开放、…

【Axure高保真原型】马赛克效果

今天和大家分享动态画出马赛克效果的原型模板,鼠标按着左键拖动,可以在对应位置拖出马赛克,具体效果可以观看下方视频或者打开预览地址体验。 【原型效果】 【Axure高保真原型】马赛克效果 【原型预览含下载地址】 https://cspfgk.axshare.…

一例简单的文件夹病毒的分析

概述 这是一个典型的文件夹病毒,使用xp时代的文件夹图标,通过可移动存储介质传播,会向http://fionades.com/ABIUS/setup.exe下载恶意载荷执行。 其病毒母体只是一个加载器,会在内存是解密加载一个反射型的dll,主要的…

<网络> 网络Socket编程基于TCP协议模拟简易网络通信

目录​​​​​​​ 前言: 一、字符串回响 (一)程序结构 (二)初始化服务器 (三)启动服务器 1. 处理连接请求 2. 业务处理 3. 回调函数 (四)填充server源文件 &…

春秋云境28512

题目说该CMS的/single.php路径下,id参数存在一个SQL注入漏洞。访问看一下随便点一个图片。 发现了注入点?id 那么开始查看闭合符一个 就报错了 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for th…

Unity多线程简单示例

using UnityEngine; using System.Threading;public class texxxst : MonoBehaviour {Thread thread;void Start(){// 创建一个新的线程,并传入要执行的方法thread new Thread(new ThreadStart(DoWork));// 启动线程thread.Start();}void DoWork(){for (int i 0; …

【机器学习】机器学习创建算法第5篇:线性回归,学习目标【附代码文档】

机器学习(算法篇)完整教程(附代码资料)主要内容讲述:机器学习算法课程定位、目标,K-近邻算法定位,目标,学习目标,1 什么是K-近邻算法,1 Scikit-learn工具介绍,2 K-近邻算法API。K-近邻算法,1.4 …

Day30 回溯 LeedCode 332.重新安排行程 51. N皇后 37. 解数独 蓝桥杯 与或异或

332. 重新安排行程 给你一份航线列表 tickets ,其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK…

2、Qt UI控件 -- qucsdk项目使用

前言:上一篇文章讲了qucsdk的环境部署,可以在QDesigner和Qt Creator中看到qucsdk控件,这一篇来讲下在项目中使用qucsdk库中的控件。 一、准备材料 要想使用第三方库,需要三个先决条件, 1、控件的头文件 2、动/静态链…

LeetCode 239. 滑动窗口最大值

滑动窗口最大值 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums [1,3,-1,-3,…

数据生成 | Matlab实现基于DE差分进化算法的数据生成

数据生成 | Matlab实现基于DE差分进化算法的数据生成 目录 数据生成 | Matlab实现基于DE差分进化算法的数据生成生成效果基本描述模型描述程序设计参考资料 生成效果 基本描述 1.Matlab实现基于DE差分进化算法的数据生成,运行环境Matlab2021b及以上; 2.计…

FreeRTOS任务切换学习

FreeRTOS任务切换学习 所谓任务切换,就是CPU寄存器的切换。假设当由任务A切换到任务B时,主要分为两步: 1:需暂停任务A的执行,并将此时任务A的寄存器保存到任务堆栈,这个过程叫做保存现场; 2&am…

设计模式-接口隔离原则

基本介绍 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上先看一张图: 类A通过接口Interface1 依赖类B,类C通过接口Interface1 依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类…

Unity之PUN实现多人联机射击游戏的优化(Section 2)

目录 🎮一、准备工作 🎮二、实现手雷投掷动作 🎮三、手雷投掷同步 💤3.1 photonView.RPC 🎮四、同步手雷伤害 这几周都给我布置任务了,最近可忙。现在终于有机会更新了,也谢谢大家的阅读&a…

爬虫 新闻网站 以湖南法治报为例(含详细注释) V1.0

目标网站:湖南法治报 爬取目的:为了获取某一地区更全面的在湖南法治报已发布的宣传新闻稿,同时也让自己的工作更便捷 环境:Pycharm2021,Python3.10, 安装的包:requests,csv&#xff…

dyld: Library not loaded: @rpath/SDK.framework/SDK错误问题

关于导入三方SDK.framework之后,启动崩溃之后如下报错的解决方式: 截屏2020-10-14 上午9.55.09.png 在正常导入framework之后,做如图示操作, image.png 以上步骤之后,重新启动运行xcode,即可成功运行。

人工智能、深度伪造和数字身份:企业网络安全的新前沿

深度伪造(Deepfakes)的出现打响了网络安全军备竞赛的发令枪。对其影响的偏执已经波及到一系列领域,包括政治错误信息、假新闻和社交媒体操纵。 深度伪造将加剧公共领域对信任和沟通的本已严峻的压力。这将理所当然地引起监管机构和政策制定者…

嵌入式学习第三十二天!(队列)

1. 队列的定义: 队列:是只允许一端进行数据插入,而另一端进行数据删除的线性表。(先进先出FIFO),如下图所示。 队列的应用:缓冲区,即解决高速设备和低速设备数据交互的时候&#xff…

蓝桥2021A组C题

货物摆放 问题描述格式输入格式输出评测用例规模与约定解析参考程序难度等级 问题描述 格式输入 无 格式输出 输出答案 评测用例规模与约定 无 解析 数字给的相当大所以我们不能直接给他暴力了,不然等很久都跑不出来。由题目我们可以得到让nLxWxH,所…