Docker 概述以及整体架构

news2025/1/19 8:05:30

文章目录

  • 一、Docker概述
    • 1.1 什么是 Docker
    • 1.2 Docker 如何工作
    • 1.3 底层技术
  • 二、Docker架构
    • 2.1 Docker 整体架构
    • 2.2 Docker daemon
    • 2.3 Docker client
    • 2.4 Docker registries
    • 2.5 Docker objects
    • 2.6 Docker Desktop
  • 参考资料

一、Docker概述

1.1 什么是 Docker

Docker是一个用于开发、发布和运行应用程序的开放平台

Docker使您能够将应用程序与基础架构分开,以便快速交付软件。使用Docker,您可以以管理应用程序的相同方式管理基础架构。通过利用Docker的发布、测试和部署代码的方法,您可以显着减少编写代码和在生产中运行代码之间的延迟。

Docker提供了在称为容器的松散隔离环境中打包和运行应用程序的能力,并提供工具和平台来管理容器的生命周期。

1.2 Docker 如何工作

Docker帮助开发人员在任何地方 构建、共享 和 运行 应用程序,无需繁琐的环境配置或管理

正如 Docker: Accelerated Container Application Development 所言, Accelerate how you build, share, and run applications

其中,docler具体工作方式为:

  • Build : 快速启动新环境;与您现有的工具集成;容器化应用程序以实现一致性
  • Share:使用经过验证的可信内容构建;与您的团队合作,从Hub拉取和发布镜像; 保护您的工作空间;
  • Run: 一致的应用程序交付; 多功能性发展; 使用单个命令部署

1.3 底层技术

Docker 最初是基于 Linux 内核特性构建的。其中的关键特性包括 **命名空间(Namespace)**和控制组(cgroup),它们使得容器能够在隔离的环境中运行,有自己的文件系统、网络和进程空间。

The underlying technology

二、Docker架构

2.1 Docker 整体架构

Docker 使用客户端-服务器架构

这意味着有两个主要组件:Docker 客户端 和 Docker 守护进程(daemon)。架构细节如下:

  • Docker 客户端用于与用户交互和发送命令。而守护进程负责处理这些命令的执行,即负责构建、运行和分发 Docker 容器。

  • Docker 客户端和守护进程可以在同一系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护进程。这种架构允许用户在本地或远程环境中管理 Docker 容器。

  • Docker 客户端与 Docker 守护进程( Docker daemon ) 使用 REST API、UNIX 套接字或网络接口进行通信。

  • 另一个 Docker 客户端是 Docker Compose,它允许您使用由一组容器组成的应用程序。Docker Compose 允许用户通过简化的配置文件定义和管理多容器应用。

在这里插入图片描述

2.2 Docker daemon

Docker daemon (dockerd)监听 Docker API 请求并管理 Docker 对象,包括镜像、容器、网络和卷。它是整个 Docker 引擎的核心组件。

Docker 守护进程可以与其他 Docker 守护进程通信,以协同管理 Docker 服务。这种分布式特性使得可以在多个主机上创建和管理 Docker 容器,并通过 Docker Swarm 或 Kubernetes 等工具进行集群管理。

总体而言,Docker 守护进程充当着 Docker 引擎的控制中心,负责协调和执行各种 Docker 操作,从而实现容器化应用的构建、部署和管理。

2.3 Docker client

Docker client (docker)是许多 Docker 用户与 Docker 交互的主要方式。当您使用诸如 docker run 等命令时,客户端将这些命令发送到 dockerd,由它来执行。docker 命令使用 Docker API。

Docker 客户端具备与多个 Docker 守护进程进行通信的能力。这种特性使得用户可以管理位于不同主机上的 Docker 守护进程,从而实现更为复杂的容器编排和集群管理。

2.4 Docker registries

Docker registries 是用于存储和管理Docker镜像的中央存储库。它允许用户共享和访问Docker镜像。

Docker Hub 是一个公共的、官方托管的 Docker 注册表。用户可以在 Docker Hub 上找到和分享各种Docker镜像。默认情况下,当用户未指定镜像来源时,Docker会从Docker Hub上检索镜像。

用户可以搭建自己的私有 Docker 注册表,用于存储和管理自定义的 Docker 镜像。这种私有注册表可以在内部网络中使用,提供更高的安全性和控制。

当您使用docker pulldocker run命令时,Docker 会从您配置的注册表中拉取所需的镜像。当您使用docker push命令时,Docker 会将您的镜像推送到配置的注册表中。通过这些命令,Docker 用户能够方便地管理镜像的获取和发布,无论是使用公共注册表还是自建私有注册表。

2.5 Docker objects

Docker objects 主要包括 镜像、容器、网络、卷、插件等对象

(1)镜像(Images)

Images是一个只读的模板,包含创建 Docker 容器的指令。您可以创建自己的镜像,也可以仅使用由其他人创建并发布在注册表中的镜像。要构建自己的镜像,您需要创建一个 Dockerfile,其中包含用于定义创建镜像和运行它所需步骤的简单语法。

镜像的性质主要有:

  • 只读性质: 镜像是只读的,一旦创建就不可更改。任何对容器的修改都是在镜像的基础上进行的,而不会影响原始镜像。

  • 基于其他镜像: 通常,镜像是基于其他镜像构建的,添加一些额外的定制。例如,您可以构建一个基于ubuntu镜像的镜像,但安装了Apache web服务器和您的应用程序,以及使您的应用程序运行所需的配置细节。

  • 分层结构: 镜像是由多个文件系统层(layers)组成的,每个层都包含了特定的文件和配置。Dockerfile 中的每个指令都会在镜像中创建一个层。当您更改Dockerfile并重新构建镜像时,只有更改的那些层会被重新构建。这是使镜像相对于其他虚拟化技术如此轻量、小巧和快速的一部分。

  • 标签(Tags): 镜像可以通过标签来标识和区分,标签通常表示版本、特定用途等信息。例如,ubuntu:20.04 表示了一个基于Ubuntu 20.04版本的镜像。

(2)容器(Containers)

Containers是镜像的可运行实例 。您可以使用Docker API或CLI创建、启动、停止、移动或删除容器。您可以将容器连接到一个或多个网络,附加存储,甚至基于其当前状态创建一个新的镜像。

镜像和容器之间的关系,类似于面向对象程序设计中的 类 和 对象

默认情况下,容器与其他容器及其主机机器相对隔离。您可以控制容器的网络、存储或其他底层子系统与其他容器或主机机器的隔离程度。

2.6 Docker Desktop

Docker Desktop 是一个一键安装的应用程序,适用于您的Mac、Linux或Windows环境,它允许您构建、分享和运行容器化的应用程序和微服务。

它提供了一个直观的GUI(图形用户界面),让您可以直接从您的计算机管理您的容器、应用程序和镜像。您可以将Docker Desktop作为独立工具使用,也可以作为CLI的补充工具使用。

参考资料

Docker overview | Docker Docs

Docker 架构 | 菜鸟教程 (runoob.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1344977.html

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

相关文章

JVM工作原理与实战(二):字节码编辑器jclasslib

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、字节码编辑器jclasslib介绍和安装 1.介绍 2.安装 3.IntelliJ IDEA 插件安装 二、字节码编辑器jclasslib的使用 1.使用jclasslib bytecode viewer打开字节码文件 2.使用Intell…

Spring 是如何解决循环依赖的

1.什么是循环依赖? 所谓的循环依赖是指,A 依赖 B,B 又依赖 A,它们之间形成了循环依赖。或者是 A 依赖 B,B 依赖 C,C 又依赖 A。它们之间的依赖关系如下: 2.通过手写代码演示理解Spring循环依赖 DEMO: pu…

模型性能评估简介

模型评估 混淆矩阵 Positive - 正例Negative (N) - 负例 结果: 预测为正类别 预测为负类别 真实为正类别 True Positive (TP) False Negative (FN) 真实为负类别 False Positive (FP) True Negative (TN)TP - 预测 P, 实际 P, 模型预测正确FP - 预测 P, …

Spring-5-切入点的高级使用

Spring提供了两个额外的Pointcut实现,分别是ComposablePointcut和ControlFlowPointcut,它们提供了所需的灵活性。 使用控制流切入点 由ControlFlowPointcut类实现的Spring控制流切入点类似于许多其他AOP实现中可用的cflow构造,尽管功能上没有那么强大。…

2023十大编程语言及未来展望

2023十大编程语言及未来展望 1. 2023年十大编程语言排行榜2. 十大编程语言未来展望PythonCCJavaC#JavaScriptPHPVisual BasicSQLAssembly language 1. 2023年十大编程语言排行榜 TIOBE排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎&a…

vivado CDC约束-约束总线偏移

CDC限制 关于CDC约束 时钟域交叉(CDC)约束适用于具有不同启动和捕获时钟。根据发布和捕获时钟关系以及在CDC路径上设置的定时异常。例如同步时钟之间但被错误路径约束覆盖的CDC路径不定时,并且因此被视为异步CDN。异步CDC路径可以是安全的&…

CentOS7安装部署Zookeeper

文章目录 CentOS7安装部署Zookeeper一、前言1.简介2.架构3.集群角色4.特点5.环境 二、正文1.部署服务器2.基础环境1)主机名2)Hosts文件3)关闭防火墙4)JDK 安装部署 3.单机部署1)下载和解压2)配置文件3&…

Vue: 事件修饰符, 键盘事件, 鼠标事件,计算属性

目录 事件修饰符 阻止默认事件 阻止冒泡 允许触发一次 捕获模式 self passive 键盘事件 keyup & keydown 按键别名 注意tab 注意系统按键 自定义按键 鼠标事件 简介 鼠标焦点事件 计算属性 差值语法实现 methods实现 computed实现 get() set() 总…

基于AM62x的ARM+FPGA+Codesys低成本软PLC解决方案

GPMC并口简介 GPMC(General Purpose Memory Controller)是TI处理器特有的通用存储器控制器接口,支持8/16bit数据位宽,支持128MB访问空间,最高时钟速率133MHz。GPMC是AM62x、AM64x、AM437x、AM335x、AM57x等处理器专用于与外部存储器设备的接口…

IP地理位置定位技术基本原理

IP地理位置定位技术的基本原理是基于IP地址的特性。每个IP地址在网络中都有一个与之对应的地理位置信息,这是通过IP地址数据库来确定的。这个数据库由ISP(Internet Service Provider)或其它一些机构维护,其中包含了每个IP地址的地…

openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅

文章目录 openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅179.1 发布179.2 订阅179.3 冲突处理179.4 限制179.5 架构179.6 监控179.7 安全性179.8 配置设置179.9 快速设置 openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅 发布和订阅基于逻辑复…

Java核心知识点1-java和c++区别、隐式和显示类型转换

java和c区别 java通过虚拟机实现跨平台特性,但c依赖于特定的平台。java没有指针,它的引用可以理解为安全指针,而c和c一样具有指针。java支持自动垃圾回收,而c需要手动回收。java不支持多重继承,只能通过实现多个接口来…

Java集合/泛型篇----第一篇

系列文章目录 文章目录 系列文章目录前言一、ArrayList和linkedList的区别二、HashMap和HashTable的区别三、Collection包结构,与Collections的区别四、泛型常用特点前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站…

swing快速入门(三十二)消息对话框

注释很详细,直接上代码 上一篇 新增内容 1.自定义对话框前列图标 2.消息对话框的若干种形式 package swing21_30;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent;public class swing_test_30 {// 定义一个JFrameJFrame jFrame n…

自动驾驶学习笔记(二十三)——车辆控制模型

#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo开放平台9.0专项技术公开课》免费报名—>传送门 文章目录 前言 运动学模型 动力学模型 总结…

2023年03月20日_对李开复3月20日线下媒体会的解读

最近这个AI大模型 因为GPT4.0 ChatGPT 文心一言等等这些事情呢 一下子就被推到了风口浪尖 我们也做了来介绍相关的进展 国内呢也不断有一些大佬开始下场 包括王慧文、张朝阳、李彦宏什么的 都开始说自己要搞AI大模型 就在昨天呢 创新工厂的董事长兼CEO李开复 也发朋友…

oracle-存储结构

文件包括 控制文件.ctl、数据文件.dbf、日志文件.log这三类放在存储上。 参数文件:空间的划分,进程的选用(.ora) oracle启动的时候需要读一下,数据库启动后,参数文件并不关闭,但即使文件丢了&a…

IntelliJ IDEA常用快捷键

【1】创建内容(新建):altinsert 【2】main方法:psvm 【3】输出语句:sout 【4】复制行:ctrld 【5】删除行:ctrly(很多编辑器ctrly是前进操作,如果选择 Delete Line&…

APP端网络测试与弱网模拟!

当前APP网络环境比较复杂,网络制式有2G、3G、4G网络,还有越来越多的公共Wi-Fi。不同的网络环境和网络制式的差异,都会对用户使用app造成一定影响。另外,当前app使用场景多变,如进地铁、上公交、进电梯等,使…

【Maven】报错合集

问题1:com.github.everit-org.json-schema:org.everit.json.schema:pom:1.12.1 failed to transfer from http://localhost:8081/repository/maven-public/ during a previous attempt 发现原来是maven的settings.xml文件配置出现了问题。首先是之前maven进阶学习时…