Docker架构概述
Docker是基于Go语言实现的开源容器项目,能够把开发的应用程序自动部署到容器的开源的应用容器引擎。Docker的构想是要实现"Build, Ship and Run Any App, Anywhere",即通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件级别的"一次封装,到处运行"。这里的应用组件,既可以是一个Web应用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。可以说,Docker首次为应用的开发、运行和部署提供了"一站式"的实用解决方案。Docker整体架构的逻辑视图如下所示:

可以看到,Docker架构由Client、Host、Registry三种节点组成。其中Client作为Docker的客户端,用于和Docker Host中的Daemon进程交互,如发送命令,以完成指定的工作。Host则用于执行Docker Daemon进程和为容器(Container)提供运行环境。Registry作为镜像注册中心,用来保存镜像(Image)。一个Docker Registry可以包含多个仓库(Repository)。一个仓库可以包含同一个软件的不同版本的镜像,而标签则对应该软件的各个版本。可以通过<仓库名>:<标签>的格式来指定软件的具体版本的镜像。
从上图可知,Docker是典型的客户端——服务器(C/S)架构。用户通过Client与Host进行通信。Host接收到客户端的请求后,处理并响应请求。如果涉及到镜像的拉取和推送,Host还会向Registry发起请求,获取或推送指定的镜像。
Client
Docker是客户端——服务器(C/S)架构,所以客户端的请求都是通过Client发出。客户端的种类很多,这里重点介绍下Docker官方提供的Docker Client和Docker Machine。Docker Client是Docker默认的客户端,日常的运维工作基本上通过使用Docker Client就可满足。更多Docker命令的介绍,还需自行学习,这里不展开介绍。Docker Machine则是一个简化的Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker。
Docker Client
Docker Client是Docker架构中用户和Docker Host通信的客户端。Docker Client可以通过以下三种方式和Docker Host通信:
(1) Unix Socket。这是一种类unix系统进程间通讯的一种方式,当Client需要和本机Host通信时就是使用这种方式。对应URL是unix:path_to_socket,缺省的socket文件是unix:/var/run/docker.sock。
(2) Systemd Socket Activation。这是systemd提供的一种为了服务并行启动设计的socket,对应URL是fd://socketfd。
(3) TCP。上面两种都是只能连接本地Host,如果需要连接远程Host,可以在服务器开启TCP连接。此连接为不安全连接,数据通过明文进行传输,对应缺省端口2375。可以在TCP的基础之上加上了SSL的安全证书,以保证连接安全,对应缺省端口2376。
Docker Machine
Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在多种平台上安装Docker,如VirtualBox、Digital Ocean、Microsoft Azure等。Docker Machine可以看成是Docker Client的上层封装。Docker Machine的优势是可支持配置多个远程Docker宿主机,使用示例如下图所示:

Docker Host
Docker Host(主机)可以是一台物理机,也可以是一台虚拟机,用来执行Docker Daemon进程和运行容器。
Docker Daemon
Docker Daemon是Docker架构中一个常驻在后台的系统进程,其功能是接收并处理Client发送的请求。
Docker Image
Docker Image是创建Docker Container的基础。Docker Image是用于创建Docker Container的模板,是构建Docker世界的基石。镜像是Docker生命周期中的"构建"部分。也可把镜像当做容器的“源代码”。Docker镜像是基于联合文件系统的一种层式的结构。
容器镜像一经发布,就可在任何地方下载这个镜像。得到的内容都完全一致,可以完全复现这个镜像制作者当初的完整环境。这就是容器技术"强一致性"的重要体现。这种价值正是支撑Docker公司迅猛发展的核心动力,容器镜像的发明,不仅打通了"开发——测试——部署"流程的每一个环节,更重要的是,容器镜像也成为云服务应用的主流发布方式。
Docker Container
Docker Container是独立运行的一个或一组应用,是容器镜像运行时的实体。Docker Container是基于Docker Iamge启动起来的,容器中可以运行一个或多个进程。Docker Image和Docker Container的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。镜像是Docker生命周期中的构建或打包阶段,而容器则是启动或执行阶段。
Docker Container类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。Docker Container是从Docker Image创建的应用运行实例。它可以启动、开始、停止、删除,而这些容器都是彼此相互隔离、互不可见的。
可以把容器看作一个简易版的Linux系统环境(包括 root用户权限、进程空间、用户空间和网 络空间等)以及运行在其中的应用程序打包而成的盒子。
Docker Registry
Docker Registry用来保存用户构建的镜像,类比代码仓库,可以看成一个镜像中心,为Docker镜像文件的分发和管理提供了便捷的途径。。一个Docker Registry可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
根据所存储的镜像是否公开分享,可将Docker Registry分为公开Registry(Public)和私有Registry(Private)两种形式。如果用户不希望公开分享自己的镜像文件, Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。
Docker Engine
通常所说的"Docker"均是指Docker Engine,它是一个客户端-服务器应用程序,由Docker Daemon进程、一个REST API指定与Daemon进程交互的接口和Docker Client与守护进程通信,共同负责容器的创建和运行。Docker Engine组成结构如下图所示:

Docker Engine从Client接收Docker命令,如docker run <image>运行指定镜像、docker ps列出正在运行的容器、docker images列出镜像,等等。
Docker Engine是Docker容器的核心组件,可以在主流的操作系统和云平台上使用,包括Linux操作系统(如Ubuntu、Debian、CentOS、Red Hat等),macOS 和 Windows 操作系统,以及IBM、亚马逊、微软等知名云平台。
参考
《第一本Docker书》 James Turnbull 著, 李兆海, 刘斌, 巨震 译
《Docker技术入门与实战》 杨保华 戴王剑 曹亚仑 著
https://www.docker.org.cn/docker/192.html Docker 架构及工作原理
https://blog.csdn.net/qq_29166327/article/details/109571542 Docker 核心设计理念
https://www.qinglite.cn/doc/7250647594b444c03 深入理解 Docker 架构
https://tkstorm.com/docker-doc/introduction/what.html 什么是 Docker
https://blog.csdn.net/qq_39135287/article/details/101012149 docker简介与安装
https://www.yiibai.com/docker/docker-architecture.html Docker架构
http://www.uml.org.cn/yunjisuan/202011172.asp docker容器技术基础
https://ebook.qicoder.com/docker-in-practice/notes/01-版权信息.html Docker实践
https://www.runoob.com/docker/docker-machine.html Docker Machine
https://c.biancheng.net/view/3137.html Docker引擎(engine)详解
https://cloud.tencent.com/developer/section/1091762 Docker概述(引擎)
https://zhuanlan.zhihu.com/p/35102874 Docker 三剑客之 Docker Machine
https://zhuanlan.zhihu.com/p/94224305 Docker客户端连接远程Docker服务
https://zhuanlan.zhihu.com/p/269485082 详解Docker架构原理、功能及使用
https://www.runoob.com/docker/docker-architecture.html Docker 架构
相关文章:
Docker架构概述
Docker是基于Go语言实现的开源容器项目,能够把开发的应用程序自动部署到容器的开源的应用容器引擎。Docker的构想是要实现"Build, Ship and Run Any App, Anywhere",即通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运…...
安装 node 错误的配置环境变量之后使用 npm 报错
安装 node 错误的配置环境变量之后使用 npm 报错 node:internal/modules/cjs/loader:1147 throw err; ^ Error: Cannot find module ‘F:\ACodeTools\Node\node_modules\npm\bin\node_modules\npm\bin\npm-cli.js’ at Module._resolveFilename (node:internal/modules/cjs/loa…...
Matlab 最小二乘插值(曲线拟合)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 在多项式插值时,当数据点个数较多时,插值会导致多项式曲线阶数过高,带来不稳定因素。因此我们可以通过固定幂基函数的最高次数 m(m < n),来对我们要拟合的曲线进行降阶。之前的函数形式就可以变为: 二、实现…...
AWTK-MVVM 配置文件模型
配置文件模型 AWTK-MVVM 内置了一些配置文件模型,用于读写各种配置文件,比如,JSON/XML/INI/CSV/UBJSON 等。 文件名中可以引用下面的变量。 ${app_dir} 应用程序目录${user_dir} 用户目录${temp_dir} 临时目录 json(url${app_dir}/demos/de…...
【活动】金三银四,前端工程师如何把握求职黄金期
随着春意盎然的气息弥漫大地,程序员群体中也迎来了一年一度的“金三银四”求职热潮。这个时间段对于广大前端工程师而言,不仅象征着生机勃发的新起点,更是他们职业生涯中至关重要的转折点。众多知名公司在这一时期大规模开启招聘通道…...
萌新学习RSA第二天(离线分解整数N)
1.yafu的使用(离线环境分解N)、 下载 打开 及使用 下载地址:https://sourceforge.net/projects/yafu/ 在下载好的并解压好的文件夹上鼠标右键打开终端 然后输入.\yafu-x64.exe并回车运行 .\yafu-x64.exe 来到这个页面就OK了 然后输入 fa…...
STM32学习和实践笔记(1): 装好了的keil μVision 5
2019年3月在淘宝上买了这块STM32的开发板,学了一段时间后就丢下了,今天重新捡起来,决定好好学习、天天向上。 对照教程,今天先把keil5装上了。 装的过程有以下几点值得记录下: 1)用注册机时,…...
企业计算机服务器中了360勒索病毒如何解密,360后缀勒索病毒处理流程
对于众多的企业来说,企业的数据是企业发展的核心,越来越多的企业开始注重企业的数据安全问题,但随着网络技术的不断发展与应用,网络黑客的攻击加密手段也在不断升级。近期,云天数据恢复中心接到多家企业的求助…...
【图像拼接/视频拼接】论文精读:Efficient Video Stitching Based on Fast Structure Deformation
第一次来请先看这篇文章:【图像拼接(Image Stitching)】关于【图像拼接论文精读】专栏的相关说明,包含专栏使用说明、创新思路分享等(不定期更新) 图像拼接系列相关论文精读 Seam Carving for Content-Aware Image ResizingAs-Rigid-As-Possible Shape ManipulationAdap…...
LASSO算法
LASSO (Least Absolute Shrinkage and Selection Operator) 是一种回归分析的方法,它能够同时进行变量选择和正则化,以增强预测准确性和模型的解释性。LASSO通过在损失函数中加入一个L1惩罚项来实现这一点。该惩罚项对系数的绝对值进行约束。 基本概念 …...
xss.haozi.me靶场练习
靶场地址alert(1) 1、第一关 输入在文本框里面,我们闭合前面的标签,中间的内容我们就可以随意写了 2、第二关 逃逸value的属性即可,这里使用点击事件触发xss 3、第三关 看代码,使用了正则表达式,去掉了所有的括号字…...
Unity 游戏设计模式:观察者模式
本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com 在 unity 游戏设计中,观察者模式(Observer Pattern)有着重要的作用,它主要用于实现对象之间的一对多的依赖关系,当一个对象的状态发生变化时&#x…...
计算机体系结构安全:对体系结构如何支持安全机制进行调研
一、体系结构支持信任建立和主动防御的技术: 可信3.0 二、体系结构怎么更好的支持信任建立和主动防御 2.1 支持信任建立 一、以手机芯片举例,用智能手机的芯片作为信任根,确保应用程序和敏感数据受到保护。 二、启动时验证操作系统和应用…...
b站小土堆pytorch学习记录—— P15 Dataloader的使用
文章目录 一、前置知识1.dataloader简要介绍2.dataloader 官方文档(翻译后) 二、DataLoader的使用 一、前置知识 1.dataloader简要介绍 DataLoader 是 PyTorch 中用于加载数据的实用工具,它可以处理数据集的批量加载、数据集的随机打乱、多…...
小程序中使用echarts地图
一、下载并安装echarts 1、下载echarts-for-weixin组件 echarts-for-weixin项目提供了一个小程序组件,用这种方式可以在小程序中方便地使用 ECharts。 下载ec-canvas项目(下载地址) 注意:下载的 ec-canvas 中的echarts的版本…...
swoole协程
协程执行顺序 //hyperf框架 use Co;go(function () {Co::sleep(1); // Io等待一秒echo "hello go1 \n";});echo "hello main \n";go(function () {echo "hello go2 \n";});//打印结果hello mainhello go2hello go1/*运行此段代码, 系统启动一个…...
Android Gradle 开发与应用 (一) : Gradle基础
1. Gradle是什么 Gradle是一个通用的构建工具,支持诸多主要的 IDE,包括 Android Studio、IntelliJ IDEA、Visual Studio 等 Gradle 的底层实现(核心引擎和框架)其实是用 Java 编写的开发者通常使用 Groovy 或 Kotlin 来编写构建脚本 1.1 那么为什么Gra…...
PostgreSQL操作笔记
基础操作 数据库相关 -- 查看所有数据库 \l-- 切换到指定数据库 \c 库名-- 查看库中所有表 \d执行SQL脚本 如果有现成的SQL脚本: \i 脚本路径路径一般需要用单引号引起来。 如果需要当场编辑一次性的SQL脚本,可以: \e执行上述命令后会进…...
【微服务】微服务中常用认证加密方案总结
目录 一、前言 二、登录认证安全问题 3.1 认证方式选择 三、常用的加密方案 3.1 MD5加密算法 3.1.1 md5特点 3.1.2 md5原理 3.1.3 md5使用场景 3.2 AES加密算法 3.2.1 AES简介 3.2.2 AES加解原理 3.2.3 AES算法优缺点 3.2.4 AES算法使用场景 3.3 RSA加密算法 3.3…...
【Unity】实现从Excel读取数据制作年份选择器
效果预览: 此处利用Excel来读取数据来制作年份选择器,具体步骤如下。 如果只是制作年份选择器可以参考我这篇文章:构建简单实用的年份选择器(简单原理示范) 目录 效果预览: 一、 Excel准备与存放 1.1 …...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
