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 …...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
如何做好一份技术文档?从规划到实践的完整指南
如何做好一份技术文档?从规划到实践的完整指南 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...
Copilot for Xcode (iOS的 AI辅助编程)
Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot,它能根据上下文补全代码,快速生成常用…...
