Docker:基础概念、架构与网络模式详解

news2024/9/19 10:52:55

1.Docker的基本概念

1.1.什么是docker

        Docker是一个用于开发,交付和运行应用程序的开放平台.docker使您能够将应用程序域基础框架分开,以便你可以快速开发交付软件.使用docker,你可以管理你的基础架构以管理应用程序相同的方式.通过利用docker用于交付,测试和部署代码的方法,你可以显著减少编写代码和生产环境中运行代码之间的延迟.

1.2.docker和虚拟机的区别

1.2.1.框架

        每个虚拟机运行一个完整的操作系统,并在其上运行应用程序。虚拟机赖于一个虚拟化管理程序(如 VMware、Hyper-V、KVM),该程序在物理硬件和虚拟机操作系统之间充当中介。每个虚拟机需要分配单独的系统资源(CPU、内存、存储),并运行自己的内核和操作系统实例。

        Docker 容器共享宿主机操作系统的内核,但独立运行应用程序及其所有依赖项。使用操作系统级虚拟化技术(如 cgroups 和 namespaces)来隔离和管理容器。容器之间共享操作系统内核,启动时间快,占用资源少。

1.2.2.性能

        虚拟机由于需要运行一个完整的操作系统实例,虚拟机通常启动较慢,且占用更多系统资源。性能开销主要来自于操作系统的管理和Hypervisor的开销。

        而docker的容器化应用程序几乎可以立即启动,因为它们不需要启动一个完整的操作系统。资源开销低,性能更接近于裸机。

1.2.3.资源分配

        虚拟机的资源分配是静态的,即在启动时分配特定的CPU、内存等资源,即使这些资源在某些时候未被完全利用,也不会被其他虚拟机使用。而docker的资源利用是动态和弹性的,多个容器可以高效地共享和利用系统资源。资源分配可以根据需求进行调整。

2.Docker架构

       Docker 架构通过客户端、守护进程、镜像、容器、仓库等多个组件的协同工作,提供了一个高效、灵活的容器化平台。

2.1.Docker Client(客户端)

        Docker客户端是用户与 Docker 交互的接口。用户通过命令行或其他工具向 Docker 客户端发送命令,客户端再将命令传递给 Docker 守护进程(Docker Daemon)进行处理。常用的 Docker 命令如 docker rundocker pulldocker build 等,都是通过客户端发起的。

2.2.Docker Daemon(守护进程)

        Docker Daemon 是 Docker 的核心组件,它运行在主机上,负责处理来自 Docker 客户端的请求,并管理容器、镜像、网络和存储等资源。Docker Daemon 通常作为后台进程运行,可以在本地主机上,也可以通过远程 API 接受来自其他主机的请求。

2.3.Docker 的核心组件:image镜像、Container容器、Registry仓库

2.3.1.镜像

        Docker 镜像是一个只读的模板,它包含了运行应用程序所需的所有内容,包括代码、库、环境变量、配置文件等。镜像是不可变的,每次创建新的镜像时,都会生成一个新的快照。其中镜像遵循2个重要的原则:

  1. image是不可变的。创建image后,无法修改。您只能创建新图像或在其上添加更改。

  2. 容器image由层组成。每个层表示一组文件系统更改,用于添加、删除或修改文件。

这两个原则允许您扩展或添加到现有映像。例如,如果要构建 Python 应用,则可以从Python 图像并添加其他层以安装应用的依赖项并添加代码。这样一来,你就可以专注于你的应用,而不是 Python 本身。

2.3.2.容器?

        Docker 容器是镜像的运行实例。它可以被启动、停止、移动和删除。每个容器都是一个独立的、隔离的环境,包含了运行应用程序所需的一切。

2.3.3.仓库?

        Docker 仓库是存储和分发镜像的地方。它们可以是公共的,也可以是私有的。最常用的公共仓库是 Docker Hub,此外还有许多其他的第三方仓库和企业内部的私有仓库。

2.4.Docker Compose

        容器的最佳实践之一是每个容器应该只做一件事,并且做好这件事。尽管有些例外,但应尽量避免让一个容器做多件事。你可以使用多个命令启动多个容器,但你会很快发现需要管理网络、连接容器到这些网络的所有标志等等。而且,当你完成后,清理变得有点复杂。

        此时通过Docker Compose,你可以在一个 YAML 文件中定义所有容器及其配置。如果你把这个文件包含在代码库中,任何克隆你代码库的人都可以通过一个命令启动所有容器。

2.5.Docker Swarm

        Docker Swarm 是 Docker 的原生集群管理工具,允许用户将多个 Docker 主机组合成一个虚拟的 Docker 主机。通过 Docker Swarm,用户可以在集群中调度和管理容器,提供高可用性和负载均衡。

2.6.Docker Networking(网络)

        Docker 网络用于容器之间以及容器与外部世界之间的通信。Docker 提供了多种网络驱动,如桥接网络、主机网络、覆盖网络等,用户可以根据需求选择合适的网络模式。下面会详细说明.

2.7.Docker Storage(存储)

        Docker 存储解决方案用于持久化容器数据。Docker 提供了多种存储驱动,如数据卷(Volumes)、绑定挂载(Bind Mounts)和 tmpfs 挂载,用户可以根据应用需求选择合适的存储方式。

3.Docker容器的网络模式

        Docker 提供了多种网络模式来连接容器。每种模式都有其特定的用途和配置方式,了解这些模式有助于在不同场景下选择合适的网络解决方案。

3.1. Bridge(桥接)网络模式

        Bridge网络模式是Docker 默认的网络模式。当你启动一个新的容器时,Docker 会自动将其连接到一个默认的桥接网络。这种模式适用于在同一主机上运行的多个容器之间的通信。每个容器都会获得一个独一无二的 IP 地址。通过与主机的桥接连接,这些容器还可以相互交互,与本地网络(LAN)和 Internet 互联。然而,它们不会以物理设备的形式出现在 LAN 上。特点是:每个容器都有一个独立的IP地址;容器之间通过桥接网络相互通信;适合单机上的容器通信。

3.2.Host(主机)网络模式

        允许容器共享宿主机的网络栈。在这种模式下,容器不会获得独立的 IP 地址,而是使用宿主机的 IP 地址。这种模式适用于需要高性能网络通信的场景。特点是:容器共享宿主机的网络栈;提高网络性能;容器和宿主机上的服务共享同一个端口空间。

3.3.None网络模式

        None网络模式为容器提供完全隔离的网络环境。容器不会连接到任何网络,只有一个回环接口。这种模式适用于需要完全隔离网络的容器。特点是:容器没有网络连接;适合需要完全隔离的环境。

3.4. Container网络模式

        Container网络模式允许多个容器共享同一个网络栈。在这种模式下,一个容器可以与另一个容器共享网络接口。适用于需要紧密耦合的容器之间的通信。特点是:多个容器共享同一网络栈;容器之间通信效率高.

3.5.Overlay网络模式

Overlay网络模式用于跨多个 Docker 主机的容器通信,常用于 Docker Swarm 或 Kubernetes 环境。通过覆盖网络,可以实现分布式集群中容器之间的通信。特点是:支持跨多个主机的容器通信;适用于分布式集群环境.

3.6.Macvlan 网络模式

        是一种高级网络配置,允许你将容器直接连接到宿主机的网络,并为每个容器分配一个独立的 MAC 地址。这种模式使得容器在网络中看起来像是独立的物理设备。它非常适合需要与物理网络设备进行高度集成的场景。特点是:每个容器都有自己的 MAC 地址和 IP 地址,类似于物理设备;容器可以直接与宿主机的物理网络通信,减少了网络开销;由于容器直接连接到物理网络,网络性能较好;需要手动配置物理网络接口和子网。

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

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

相关文章

「字符串匹配算法 2/3」有限自动机匹配字符串算法

有限自动机匹配字符串算法需要一定的数论知识,而且也不是很好玩。 本文不会展开说其数学属性,因为要说清楚这点需要读者有一定的离散数学基础,不然就得先解释清楚一些概念。所以如果你不懂自动机、状态机等概念,对集合、关系等概…

【Datawhale AI 夏令营】讯飞“基于术语词典干预的机器翻译挑战赛”

背景 机器翻译具有悠长的发展历史,目前主流的机器翻译方法为神经网络翻译,如LSTM和transformer。在特定领域或行业中,由于机器翻译难以保证术语的一致性,导致翻译效果还不够理想。对于术语名词、人名地名等机器翻译不准确的结果&…

PyTorch复现PointNet++——模型训练+模型测试

本博文主要实现对PointNet源码进行调试,训练可视化测试。 一、下载源码和数据集 论文:PointNet: Deep Hierarchical Feature Learning on Point Sets in a Metric Space GitHub源码:Pointnet2_pytorch 数据集包括三种:分类、零部…

修改留言板

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>备忘录</title><!-- <link rel"…

[Spring] Spring Web MVC基础理论

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

如何从 PDF 中删除背景

您是否曾经收到过充满分散注意力背景的扫描 PDF 文档&#xff1f;也许是带有繁忙水印的旧收据或背景光线不均匀的扫描文档。虽然这些背景可能看起来没什么大不了的&#xff0c;但它们会使您的工作空间变得混乱&#xff0c;并使您难以专注于重要信息。轻松删除这些不需要的元素并…

嵌入式基础 硬件接口汇总

在此收集整理嵌入式通信中常见的接口协议&#xff0c;它们具有一定的通用性&#xff0c;在今后的开发中会反复遇到。 包括但不限于以下类别&#xff08;逐步完善中…&#xff09;&#xff1a; GPIOUARTSPII2CUSBEthernetNAND Flash类SDRAM类&#xff08;ram-like&#xff09;LC…

机器学习——随机森林(学习笔记)

目录 一、基础认识 1. 集成算法介绍 2. 集成算法种类 二、sklearn中的随机森林 1. ensemble.RandomForestClassifier &#xff08;随机森林分类&#xff09; &#xff08;1&#xff09;基本参数 &#xff08;2&#xff09;基本属性 &#xff08;3&#xff09;基本接口 …

【Linux】centos7安装PHP7.4报错:libzip版本过低

问题描述 configure: error: Package requirements (libzip > 0.11 libzip ! 1.3.1 libzip ! 1.7.0) were not met: checking for libzip > 0.11 libzip ! 1.3.1 libzip ! 1.7.0... no configure: error: Package requirements (libzip > 0.11 libzip ! 1.3.1 libzi…

DAMA学习笔记(五)-数据存储和操作

1.引言 数据存储与操作包括对存储数据的设计、实施和支持&#xff0c;最大化实现数据资源的价值&#xff0c;贯穿于数据创建/获取到处置的整个生命周期。 数据存储与操作包含两个子活动&#xff08;图6-1&#xff09;。 图6-1 语境关系图&#xff1a;数据存储与操作 (1) 数据库…

分布式系统—Ceph块存储系统(RBD接口)

目录 一、服务端操作 1 创建一个名为 rbd-xy101 的专门用于 RBD 的存储池 2 将存储池转换为 RBD 模式 3 初始化存储池 4 创建镜像 5 管理镜像 6.Linux客户端使用 在管理节点创建并授权一个用户可访问指定的 RBD 存储池 ​编辑修改RBD镜像特性&#xff0c;CentOS7默认情…

英特尔CPU研发团队繁忙的一天

早晨&#xff1a;准备与启动 7:00 AM - 起床与准备 研发团队的工程师们早早起床&#xff0c;快速洗漱并享用健康的早餐。部分工程师会进行晨间锻炼&#xff0c;保持头脑清醒和身体活力。 8:00 AM - 到达办公室 工程师们来到位于硅谷的英特尔总部&#xff0c;进入研发中心。…

Open-TeleVision——通过VR沉浸式感受人形机器人视野的远程操作

前言 7.3日&#xff0c;我司大模型机器人(具身智能)线下营群里的一学员发了《Open-TeleVision: Teleoperation with Immersive Active Visual Feedback》这篇论文的链接&#xff0c;我当时快速看了一遍&#xff0c;还是有价值的一个工作(其有受mobile aloha工作的启发)&#x…

MT6816磁编码IC在工控机器人中的应用

在现代工业自动化领域&#xff0c;高精度的位置检测和控制技术对于机器人系统的稳定运行至关重要。MT6816磁编码IC作为一款先进的磁传感器解决方案&#xff0c;以其卓越的性能和稳定性&#xff0c;在工控机器人中得到了广泛的应用。本文将详细探讨MT6816磁编码IC在工控机器人中…

git常用命令及git分支

git常用命令及git分支 git常用命令设置用户签名初始化本地库查看本地库状态将文件添加到暂存区提交到本地库查看历史记录版本穿梭 git分支什么是分支分支的好处分支的操作查看分支创建分支切换分支删除分支合并分支合并冲突 git常用命令 设置用户签名 //设置用户签名 git con…

Golang:数据科学领域中的高性能并发编程新星

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 并发性能的卓越表现📝 系统级工具的便捷性📝 语言设计的简洁性📝 强类型系统的严格性📝 版本兼容性的稳定性📝 内置工具的全面性⚓️ 相关链接 ⚓️📖 介绍 📖 在数据科学和机器学习的广阔天地…

音视频开发—使用FFmpeg从纯H264码流中提取图片 C语言实现

文章目录 1.H264码流文件解码流程关键流程详细解码流程详细步骤解析 2.JPEG编码流程详细编码流程详细步骤解析 3.完整示例代码4.效果展示 从纯H.264码流中提取图片的过程包括解码和JPEG编码两个主要步骤&#xff0c;以下是详细阐述 1.H264码流文件解码流程 关键流程 查找编解…

微信小程序---分包加载

一、分包加载 1. 什么是分包加载 什么是分包加载 ❓ 小程序的代码通常是由许多页面、组件以及资源等组成&#xff0c;随着小程序功能的增加&#xff0c;代码量也会逐渐增加&#xff0c;体积过大就会导致用户打开速度变慢&#xff0c;影响用户的使用体验。 分包加载是一种小…

线性代数|机器学习-P23梯度下降

文章目录 1. 梯度下降[线搜索方法]1.1 线搜索方法&#xff0c;运用一阶导数信息1.2 经典牛顿方法&#xff0c;运用二阶导数信息 2. hessian矩阵和凸函数2.1 实对称矩阵函数求导2.2. 线性函数求导 3. 无约束条件下的最值问题4. 正则化4.1 定义4.2 性质 5. 回溯线性搜索法 1. 梯度…

nodejs模板引擎(一)

在 Node.js 中使用模板引擎可以让您更轻松地生成动态 HTML 页面&#xff0c;通过将静态模板与动态数据结合&#xff0c;您可以创建可维护且易于扩展的 Web 应用程序。以下是一个使用 Express 框架和 EJS 模板引擎的基本示例&#xff1a; 安装必要的依赖&#xff1a; 首先&#…