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.mzph.cn/news/806595.shtml

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

相关文章

vue3里前端生成二维码和解析二维码(不需要后端参与)

1.生成二维码 1&#xff09;安装qrcode npm install qrcode 2&#xff09;生成二维码代码 <template><el-input v-model"formData.designation"></el-input><el-input v-model"formData.people"></el-input><el-button …

Python --- Python + Vs code的安装与使用(windows平台)

Python Vs code的安装与使用 今天是我第一次开始尝试用Python&#xff0c;然后我想借此机会记录一下整个安装过程和上手过程。之前一直都是用的matlab&#xff0c;这个东西不仅大而且收费&#xff0c;但不可否认的是。matlab的很多东西都做的比较好&#xff0c;但我一直用的都…

【Linux的进程篇章 - 进程终止和进程等待的理解】

Linux学习笔记---008 Linux之fork函数、进程终止和等待的理解1、fork函数1.1、什么是fork?1.2、fork的功能介绍1.3、fork函数返回值的理解1.4、fork函数的总结 2、进程的终止2.1、终止是在做什么&#xff1f;2.2、进程终止的3种情况 3、进程的终止3.1、进程终止的三种情况3.2、…

1.8.4 卷积神经网络近年来在结构设计上的主要发展和变迁——Inception-v2 和Inception-v3

1.8.4 卷积神经网络近年来在结构设计上的主要发展和变迁——Inception-v2 和Inception-v3 前情回顾&#xff1a; 1.8.1 卷积神经网络近年来在结构设计上的主要发展和变迁——AlexNet 1.8.2 卷积神经网络近年来在结构设计上的主要发展和变迁——VGGNet 1.8.3 卷积神经网络近年来…

阿里Canal使用

Canal 是阿里巴巴开源的一款基于 MySQL 数据库增量日志解析&#xff0c;提供实时的数据订阅和消费服务的工具。它可以用来读取 MySQL 的 binlog 日志并转换成 JSON 格式的事件消息&#xff0c;然后将这些消息发布到下游的消息中间件&#xff0c;比如 RabbitMQ&#xff0c;以实现…

输入输出系统的发展历程

发展阶段&#xff1a;1.早期阶段&#xff1a;i/o设备种类较少&#xff0c;i/o设备与主存交换信息都必须通过CPU&#xff0c;当时的i/o设备具有以下特点&#xff0c;每个i/o设备都必须配有一套独立的逻辑电路与CPU相连&#xff0c;线路十分庞杂散乱。输入输出过程是穿插在CPU执行…

MySQL innoDB存储引擎多事务场景下的事务执行情况

一、背景 在日常开发中&#xff0c;对不同事务之间的隔离情况等理解如果不够清晰&#xff0c;很容易导致代码的效果和预期不符。因而在这对一些存在疑问的场景进行模拟。 下面的例子全部基于innoDB存储引擎。 二、场景&#xff1a; 2.1、两个事务修改同一行记录 正常来说&…

Java 对象的初始化顺序

在 Java 中&#xff0c;对象的初始化顺序都是遵循一定的规则的。这涉及到类的构造函数调用、字段初始化以及继承关系中的初始化顺序。 当涉及到继承时&#xff0c;初始化顺序如下&#xff1a; 父类静态变量和静态初始化块&#xff1a;按照声明的顺序执行。子类静态变量和静态…

自动化测试框架-senlenium(2)

目录 1.前言 2.鼠标点击 2.1click点击对象 2.2senk_keys在对象上模拟键盘输入 2.3清除对象输入的文本内容 2.4submit提交 2.5 text用于获取文本信息 ​编辑3.获取信息 3.1获取title 3.2获取url 1.前言 前面我们讲了如何定位元素,那么我们把元素定位到了以后,又如何…

Python的MATLAB使用

Python和MATLAB是两种不同的编程语言&#xff0c;它们各自拥有不同的生态系统和库。然而&#xff0c;你可以在Python中使用一些方法来实现与MATLAB类似的功能。以下是一些方法和库&#xff0c;可以帮助你在Python中实现MATLAB风格的编程&#xff1a; 1. NumPy: NumPy是Python中…

图论知识汇总

算法可以发掘本质&#xff0c;如&#xff1a; 一&#xff0c;若干师傅和徒弟互有好感&#xff0c;有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二&#xff0c;有无限多1X2和2X1的骨牌&#xff0c;某个棋盘若干格子坏了&#xff0c;如何在没有坏…

【力扣】104. 二叉树的最大深度、111. 二叉树的最小深度

104. 二叉树的最大深度 题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a; 输…

ENSP防火墙配置策略路由及ip-link探测

拓扑 配置目标 1.A区域走ISP1&#xff0c;B区域走ISP2 2. isp线路故障时及时切换到另一条线路 配置接口及安全区域 配置安全策略 配置nat 配置默认路由 配置ip-link 配置策略路由 cl-1 cl-2 验证配置成功 策略路由 A走ISP1 B走ISP2 验证线路故障 isp1 in g0/0/0 shoutdow…

Qt——示波器/图表 QCustomPlot

一、介绍 QCustomPlot是一个用于绘图和数据可视化的Qt C小部件。它没有进一步的依赖关系&#xff0c;提供友好的文档帮助。这个绘图库专注于制作好看的&#xff0c;出版质量的2D绘图&#xff0c;图形和图表&#xff0c;以及为实时可视化应用程序提供高性能。QCustomPlot可以导出…

HWOD:走方格的方案数

一、自己的解题思路 1、(0,m)和(n,0) (0,m)表示处在棋盘的左边线&#xff0c;此刻能回到原点的路线只有一个&#xff0c;就是一路向上 (n,0)表示处在棋盘的上边线&#xff0c;此刻能回到原点的路线只有一个&#xff0c;就是一路向左 2、(1,1) (1,1)表示只有一个方格&#…

leetcode645-Set Mismatch

题目 集合 s 包含从 1 到 n 的整数。不幸的是&#xff0c;因为数据错误&#xff0c;导致集合里面某一个数字复制了成了集合里面的另外一个数字的值&#xff0c;导致集合 丢失了一个数字 并且 有一个数字重复 。 给定一个数组 nums 代表了集合 S 发生错误后的结果。 请你找出重…

02 Git 之IDEA 集成使用 GitHub(Git同时管理本地仓库和远程仓库)

2 .IDEA 集成使用 GitHub&#xff08;Git同时管理本地仓库和远程仓库&#xff09; 首先在 IDEA 的设置中绑定 GitHub 的账号 先创建一个 test1.txt 文件&#xff0c;内容为 aaa. 最上一栏 VCS&#xff0c; SHARE ON GitHub&#xff0c;然后选择要发送到远程仓库的文件即可。…

Vue实现防篡改水印的效果。删除元素无效!更改元素属性无效!支持图片、元素、视频等等。

1、演示 2、水印的目的 版权保护&#xff1a;水印可以在图片、文档或视频中嵌入作者、品牌或版权所有者的信息&#xff0c;以防止未经授权的复制、传播或使用。当其他人使用带有水印的内容时&#xff0c;可以追溯到原始作者或版权所有者&#xff0c;从而加强版权保护。 身份识…

基于单片机的天然气报警系统设计

摘要:为了有效减少我国家庭火灾事故的发生,提高人民家庭的安全水平,给人们带来更为舒适放心的生活环境,设想如果可以研发结构简单、经济实用的家庭烟雾报警器实现天然气报警系统的智能化,那就可以大幅度地减少家庭火灾事故发生的概率。本文根据单片机原理与传感器理论,提…

跟TED演讲学英文:A new way to build AI, openly by Percy Liang

A new way to build AI, openly Link: https://www.ted.com/talks/percy_liang_a_new_way_to_build_ai_openly? Speaker: Percy Liang Date: October 2023 文章目录 A new way to build AI, openlyIntroductionVocabularyTranscriptSummary后记 Introduction Today’s AI …