docker 创建容器过程

news2025/6/27 4:36:21

结合下图,本文讨论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.coloradmin.cn/o/1584017.html

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

相关文章

密码学基础--搞清RFC和PKCS(1)

目录 1. CryptoDriver里KeyElement格式 2. 挖掘RFC标准 3.小结 昨天从生成密钥对开始逐步了解了公钥、证书等各种编码方式,今天继续趁热打,做一个理论知识汇总。 Ps:我只是标准的翻译搬运工。 1. CryptoDriver里KeyElement格式 在 CryptoKeyElemen…

实现鼠标在页面点击出现焦点及大十字星

近段时间,在完成项目进度情况显示时候,用户在操作鼠标时候,显示当鼠标所在位置对应时间如下图所示 代码实现步骤如下: 1.首先引用 jquery.1.7.js 2.再次引用raphael.js 3.然后引用graphics.js 4.最后引用mfocus.js 其中mfocu…

地理信息系统(ArcGIS)在水文水资源、水环境中的应用

刘老师(副教授):来自北京重点高校资深专家,长期从事水资源与水环境、流域污染控制与管理、非点源模拟与控制、环境信息系统开发、环境遥感与GIS应用等领域的研究,发表多篇Sci论文、具有资深的技术底蕴和专业背景。 1、…

多张固定宽度元素,随着屏幕尺寸变化自动换行

背景&#xff1a;多张固定宽度元素&#xff0c;随着屏幕尺寸变化自动换行实现&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevic…

最好的 iPhone 解锁器解决方案功能、优点和缺点

现最受好评的 iPhone 解锁器&#xff0c;例如 奇客解锁、iPassGo 等。深入了解它们的优缺点和兼容性&#xff0c;以做出明智的决定。了解如何解锁 iPhone 并解决有关解锁方法、PIN 绕过和潜在风险的常见问题。 1、奇客手机解锁 奇客手机解锁是一款适用于 iOS 的多功能解锁工具…

Ubuntu-22.04安装VMware虚拟机并安装Windows10

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、VMware是什么&#xff1f;二、安装VMware1.注册VMware账号2.下载虚拟机3.编译vmmon&vmnet4.加载module5.安装bundle 三、安装Windows101.基础配置2.进阶…

RISC-V特权架构 - 中断注入

中断注入 1 中断注入的作用2 mip寄存器3 中断注入后的处理过程 本文属于《 RISC-V指令集基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 中断注入的作用 中断注入&#xff0c;就是在M模式下&#xff0c;手动向S模式去产生一个中断。 比如&#xff1a;向mip寄存器的bit5…

为什么需要SOCKS代理?

在数字化时代&#x1f310;&#xff0c;随着网络安全威胁的不断演进和增加&#xff0c;保护个人隐私和数据安全成为了互联网用户的一大挑战&#x1f6e1;️。在寻求增强在线安全和隐私的解决方案时&#xff0c;SOCKS代理成为了一个关键的技术工具&#x1f511;。本文旨在详细探…

华为数通配置旁挂二层组网直接转发实验

配置旁挂二层组网直接转发示例 组网图形 组网需求 AC组网方式&#xff1a;旁挂二层组网。DHCP部署方式&#xff1a; AC作为DHCP服务器为AP分配IP地址。汇聚交换机SwitchB作为DHCP服务器为STA分配IP地址。业务数据转发方式&#xff1a;直接转发。 数据规划 表1 AC数据规划表 …

Linux JDK修改不生效

原JDK8&#xff0c;现需要切换为JDK11&#xff0c;环境变量已经修改为11&#xff0c;但java -version还是显示8。 ln -s -f /home/jdk-11.0.19/bin/java

数据结构——线性表(链式存储结构)

语言&#xff1a;C语言软件&#xff1a;Visual Studio 2022笔记书籍&#xff1a;数据结构——用C语言描述如有错误&#xff0c;感谢指正。若有侵权请联系博主 一、线性表的逻辑结构 线性表是n个类型相同的数据元素的有限序列&#xff0c;对n>0&#xff0c;除第一元素无直接…

Web3 的社会影响:数字社会的新时代

随着科技的不断进步和创新&#xff0c;人类社会正逐步进入数字化时代的新阶段。Web3 技术作为数字社会的重要组成部分&#xff0c;正在以前所未有的方式重塑着我们的社会生活和交往方式。本文将探讨 Web3 技术对社会的影响&#xff0c;以及它所带来的数字社会的新时代。 1. Web…

同旺科技 USB TO SPI / I2C 专业版 极限测试 ---- 写入数据

所需设备&#xff1a; 1、USB 转 SPI I2C 适配器&#xff1b;内附链接 备注&#xff1a;带EXCEL调试的只适用于专业版&#xff1b; 软件配置&#xff1a; 设置如下&#xff0c;写入32766个字节&#xff0c;单条指令&#xff0c;速率20Mhz; 32766个字节不是适配器的极限&am…

SpringBoot中的Redis的简单使用

在Spring Boot项目中使用Redis作为缓存、会话存储或分布式锁等组件&#xff0c;可以简化开发流程并充分利用Redis的高性能特性。以下是使用Spring Boot整合Redis的详细步骤&#xff1a; 1. 环境准备 确保开发环境中已安装&#xff1a; Java&#xff1a;用于编写和运行Spring…

Node.js常用快捷键

1.常用的终端命令&#xff1a; &#xff08;1&#xff09;del 文件名&#xff1a; 删除文件 &#xff08;2&#xff09;ipconfig: 查看IP命令 &#xff08;3&#xff09;mkdir 目录名 &#xff1a;在当前目录新建指定目录 &#xff08;4&#xff09;rd 目录名&#xff1a;在当前…

【JavaWeb】Day40.MySQL概述——多表设计(一对多)

多表设计 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本上分为三种&#xff1a; 一对多(多…

html页面跳转的方法

1、加在head里面 <head> <meta http-equiv"refresh" content"1;urlhttps://ha.huatu.com/zt/hnsylkseo/?"> </head> 2、加在body里面 在body里用js <script language"javascript" type"text/javascript">…

掌握网络抓取技术:利用RobotRules库的Perl下载器一览小红书的世界

引言 在信息时代的浪潮下&#xff0c;人们对于获取和分析海量网络数据的需求与日俱增。网络抓取技术作为满足这一需求的关键工具&#xff0c;正在成为越来越多开发者的首选。而Perl语言&#xff0c;以其卓越的文本处理能力和灵活的特性&#xff0c;脱颖而出&#xff0c;成为了…

el-table 设置固定列导致行错位的解决方案

element 官方给出的解决办法是使用doLayout&#xff0c;使用doLayout重新加载一下table就好了。 updated() {// tableRef是表格的ref属性值if (this.$refs.tableRef&& this.$refs.tableRef.doLayout) {this.$refs.tableRef.doLayout();}},调整前后效果对比&#xff1a…

LeetCode Meditations:合并 K 排序列表

描述 合并K分类列表 状态&#xff1a; 您有一系列 k 链接-列表 lists &#xff0c;每个链接-列表按升序排序。 合并所有链接-列表为一个排序的链接-列出并返回。 例如&#xff1a; Input: lists [[1, 4, 5], [1, 3, 4], [2, 6]] Output: [1, 1, 2, 3, 4, 4, 5, 6] Explanatio…