当前位置: 首页 > news >正文

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语言实现的开源容器项目&#xff0c;能够把开发的应用程序自动部署到容器的开源的应用容器引擎。Docker的构想是要实现"Build, Ship and Run Any App, Anywhere"&#xff0c;即通过对应用的封装(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 内置了一些配置文件模型&#xff0c;用于读写各种配置文件&#xff0c;比如&#xff0c;JSON/XML/INI/CSV/UBJSON 等。 文件名中可以引用下面的变量。 ${app_dir} 应用程序目录${user_dir} 用户目录${temp_dir} 临时目录 json(url${app_dir}/demos/de…...

【活动】金三银四,前端工程师如何把握求职黄金期

随着春意盎然的气息弥漫大地&#xff0c;程序员群体中也迎来了一年一度的“金三银四”求职热潮。这个时间段对于广大前端工程师而言&#xff0c;不仅象征着生机勃发的新起点&#xff0c;更是他们职业生涯中至关重要的转折点。众多知名公司在这一时期大规模开启招聘通道&#xf…...

萌新学习RSA第二天(离线分解整数N)

1.yafu的使用&#xff08;离线环境分解N&#xff09;、 下载 打开 及使用 下载地址&#xff1a;https://sourceforge.net/projects/yafu/ 在下载好的并解压好的文件夹上鼠标右键打开终端 然后输入.\yafu-x64.exe并回车运行 .\yafu-x64.exe 来到这个页面就OK了 然后输入 fa…...

STM32学习和实践笔记(1): 装好了的keil μVision 5

2019年3月在淘宝上买了这块STM32的开发板&#xff0c;学了一段时间后就丢下了&#xff0c;今天重新捡起来&#xff0c;决定好好学习、天天向上。 对照教程&#xff0c;今天先把keil5装上了。 装的过程有以下几点值得记录下&#xff1a; 1&#xff09;用注册机时&#xff0c;…...

企业计算机服务器中了360勒索病毒如何解密,360后缀勒索病毒处理流程

对于众多的企业来说&#xff0c;企业的数据是企业发展的核心&#xff0c;越来越多的企业开始注重企业的数据安全问题&#xff0c;但随着网络技术的不断发展与应用&#xff0c;网络黑客的攻击加密手段也在不断升级。近期&#xff0c;云天数据恢复中心接到多家企业的求助&#xf…...

【图像拼接/视频拼接】论文精读: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) 是一种回归分析的方法&#xff0c;它能够同时进行变量选择和正则化&#xff0c;以增强预测准确性和模型的解释性。LASSO通过在损失函数中加入一个L1惩罚项来实现这一点。该惩罚项对系数的绝对值进行约束。 基本概念 …...

xss.haozi.me靶场练习

靶场地址alert(1) 1、第一关 输入在文本框里面&#xff0c;我们闭合前面的标签&#xff0c;中间的内容我们就可以随意写了 2、第二关 逃逸value的属性即可&#xff0c;这里使用点击事件触发xss 3、第三关 看代码&#xff0c;使用了正则表达式&#xff0c;去掉了所有的括号字…...

Unity 游戏设计模式:观察者模式

本文由 简悦 SimpRead 转码&#xff0c; 原文地址 mp.weixin.qq.com 在 unity 游戏设计中&#xff0c;观察者模式&#xff08;Observer Pattern&#xff09;有着重要的作用&#xff0c;它主要用于实现对象之间的一对多的依赖关系&#xff0c;当一个对象的状态发生变化时&#x…...

计算机体系结构安全:对体系结构如何支持安全机制进行调研

一、体系结构支持信任建立和主动防御的技术&#xff1a; 可信3.0 二、体系结构怎么更好的支持信任建立和主动防御 2.1 支持信任建立 一、以手机芯片举例&#xff0c;用智能手机的芯片作为信任根&#xff0c;确保应用程序和敏感数据受到保护。 二、启动时验证操作系统和应用…...

b站小土堆pytorch学习记录—— P15 Dataloader的使用

文章目录 一、前置知识1.dataloader简要介绍2.dataloader 官方文档&#xff08;翻译后&#xff09; 二、DataLoader的使用 一、前置知识 1.dataloader简要介绍 DataLoader 是 PyTorch 中用于加载数据的实用工具&#xff0c;它可以处理数据集的批量加载、数据集的随机打乱、多…...

小程序中使用echarts地图

一、下载并安装echarts 1、下载echarts-for-weixin组件 echarts-for-weixin项目提供了一个小程序组件&#xff0c;用这种方式可以在小程序中方便地使用 ECharts。 下载ec-canvas项目&#xff08;下载地址&#xff09; ​​ 注意&#xff1a;下载的 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是一个通用的构建工具&#xff0c;支持诸多主要的 IDE&#xff0c;包括 Android Studio、IntelliJ IDEA、Visual Studio 等 Gradle 的底层实现(核心引擎和框架)其实是用 Java 编写的开发者通常使用 Groovy 或 Kotlin 来编写构建脚本 1.1 那么为什么Gra…...

PostgreSQL操作笔记

基础操作 数据库相关 -- 查看所有数据库 \l-- 切换到指定数据库 \c 库名-- 查看库中所有表 \d执行SQL脚本 如果有现成的SQL脚本&#xff1a; \i 脚本路径路径一般需要用单引号引起来。 如果需要当场编辑一次性的SQL脚本&#xff0c;可以&#xff1a; \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读取数据制作年份选择器

效果预览&#xff1a; 此处利用Excel来读取数据来制作年份选择器&#xff0c;具体步骤如下。 如果只是制作年份选择器可以参考我这篇文章&#xff1a;构建简单实用的年份选择器&#xff08;简单原理示范&#xff09; 目录 效果预览&#xff1a; 一、 Excel准备与存放 1.1 …...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...