【Docker】Docker容器与虚拟机的对比、三要素、架构和镜像加速器的详细讲解

news2024/9/20 18:49:10

🚀欢迎来到本文🚀
🍉个人简介:陈童学哦,目前学习C/C++、算法、Python、Java等方向,一个正在慢慢前行的普通人。
🏀系列专栏:陈童学的日记
💡其他专栏:C++STL,感兴趣的小伙伴可以看看。
🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝 ​
⛱️万物从心起,心动则万物动🏄‍♂️

在这里插入图片描述

前言:Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux系统 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker容器与虚拟机的对比、三要素、架构和镜像加速器的详细讲解

  • Docker与虚拟机的对比
  • Docker的三要素(镜像、容器、仓库)
    • Image(镜像)一个只读的文件系统
    • Container(容器)一个独立运行的应用程序的实例
    • Repository(仓库)保存镜像统一存储的位置
  • Docker的架构及其工作原理
  • Docker的镜像加速器的配置

Docker与虚拟机的对比

Docker与虚拟机在几个方面有所不同。首先,磁盘空间使用方面,Docker的镜像层一般很小,只有几十KB,而虚拟机则通常以GB为单位。

  • 性能方面,Docker依附于宿主机,所以性能接近宿主机,而虚拟机相对于原主机来说性能较差。[1]再者,资源利用率方面,Docker的资源利用率较高,而虚拟机的资源利用率较低。
  • 隔离性方面,Docker和虚拟机都具有安全隔离的特性。
  • Docker直接在宿主机内核上运行,而虚拟机运行在隔离层Hypervisor上。
  • Docker可以同时运行上千个容器,而虚拟机相对较厚重,最多只能启动几十个。
  • 在运行速度方面,Docker优于虚拟机,Docker容器的启动和停止可以在秒级实现,而传统的虚拟机方式要慢得多。

总的来说,Docker作为一种轻量级的虚拟化方式,在运行应用上具有显著的优势,启动速度快,对系统资源需求少,指令简明,学习成本较低

在这里插入图片描述

Docker的三要素(镜像、容器、仓库)

Docker中的三要素为:Image(镜像),Container(容器),Repository(仓库)。

Image(镜像)一个只读的文件系统

Docker中的镜像是一个只读的文件系统,它包含了运行一个容器所需的所有文件和配置。镜像可以通过扩展现有镜像来创建新的镜像。大多数镜像都是通过在基础镜像中安装和配置需要的软件来构建的。基础镜像是镜像栈的最底部,而位于下面的镜像称为父镜像。当从一个镜像启动容器时,Docker会在该镜像的最顶层加载一个读写文件系统,我们想在Docker中运行的程序就是在这个读写层中执行的。

基础镜像可以是任何可用的镜像文件,如果在Docker主机上找不到指定的镜像文件,Docker会从Docker Hub Registry上拉取所需的镜像文件。如果找不到指定的镜像文件,docker build会返回一个错误信息。

在这里插入图片描述

Container(容器)一个独立运行的应用程序的实例

在Docker中,容器是指一个独立运行的应用程序的实例。每个容器都是在Docker引擎上运行的一个进程,它具有自己的文件系统、网络和进程空间。容器是通过Docker镜像创建的,镜像是一个只读的模板,包含了运行应用程序所需的所有文件和配置。容器可以被启动、停止、删除和重启,它们提供了一种轻量级、可移植和可扩展的方式来打包和部署应用程序。

在Docker中,容器的网络配置是通过Linux桥接实现的。在宿主机上虚拟一个Docker容器网桥(docker0),当启动一个容器时,Docker会为容器分配一个IP地址,并将Docker网桥作为容器的默认网关。这样,同一宿主机上的容器可以通过容器的IP地址直接进行通信。Docker还提供了四种网络模式,包括桥接模式、主机模式、容器模式和无网络模式,以满足不同的网络需求。

综上所述,Docker中的容器是一个独立运行的应用程序实例,它具有自己的文件系统、网络和进程空间。容器是通过Docker镜像创建的,可以被启动、停止、删除和重启。容器的网络配置是通过Linux桥接实现的,同一宿主机上的容器可以通过容器的IP地址直接进行通信。此外,Docker还提供了不同的网络模式来满足不同的网络需求。

在这里插入图片描述

Repository(仓库)保存镜像统一存储的位置

在Docker中,仓库(Registry)是用来保存所有创建好的镜像统一存储的位置。它分为私有仓库(Private Registry)和公共仓库(Public Registry)。公共仓库的名字是Docker Hub,它是世界上最大的容器镜像存储库,包含了大量的镜像供使用。这些镜像可以是用户自己创建的,也可以是在别人的镜像基础上创建的。Docker Hub提供了免费的公共仓库供用户存储和共享镜像,同时也提供了私人仓库的订阅计划供用户选择。

对于私有仓库的搭建,可以通过以下步骤进行:

  • 1.环境部署:准备好搭建私有仓库所需的环境。
  • 2.自建仓库:搭建私有仓库,可以使用Docker Registry来实现。
  • 3.使用TLS证书:生成TLS证书,以确保仓库的安全性。
  • 4.Nginx反向代理仓库:使用Nginx作为反向代理来提供更好的访问控制和性能。
  • 5.可视化私有仓库:可以使用一些可视化工具来管理和监控私有仓库的使用情况。

总结来说,Docker中的仓库是用来存储和分发镜像的地方,可以是公共仓库(如DockerHub)或私有仓库。私有仓库可以通过搭建自己的仓库来实现,并可以使用TLS证书和Nginx反向代理来增加安全性和性能。同时,还可以使用可视化工具来管理和监控私有仓库的使用情况。

在这里插入图片描述

Docker的架构及其工作原理

Docker的架构由多个组件组成。其中,Docker Daemon是Docker架构的主体部分,它提供了Server的功能,可以接受Docker Client的请求。Docker Engine是Docker内部的执行引擎,它以Job的形式执行一系列工作。

Docker架构中的其他主要模块包括:

  • 1.Docker Client:作为用户与Docker交互的命令行工具或API。
  • 2.Docker Registry:用于存储和分发Docker镜像的中央仓库。公有的Docker Registry包括Docker Hub,用户可以通过互联网访问获取容器镜像。同时,Docker也支持构建本地私有的Docker Registry,以在内网环境中获取容器镜像。
  • 3.Graph:用于存储Docker镜像和容器的文件系统。它包含了镜像的各个层以及容器的文件系统变化。[2]
    此外,Docker架构还包括Driver、libcontainer和Docker container等组件,它们在Docker的运行过程中发挥着重要的作用。

总结起来,Docker的架构由Docker Daemon、Docker Client、Docker Registry、Graph、Driver、libcontainer和Docker container等多个组件组成。Docker Daemon作为主体部分,接受Docker Client的请求并通过Docker Engine执行各种工作。Docker Registry用于存储和分发Docker镜像,可以是公有的Docker Hub或私有的本地Registry。Graph用于存储镜像和容器的文件系统。

在这里插入图片描述

Docker的镜像加速器的配置

Docker的镜像加速器是用来加速Docker官方镜像的下载的工具。阿里云容器镜像服务ACR提供了官方的镜像站点,可以加速官方镜像的下载。

在这里插入图片描述

要配置镜像加速器,可以按照以下步骤进行操作:

首先,在终端中输入命令:

sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://mqkiky4e.mirror.aliyuncs.com"] } EOF

这将在/etc/docker/目录下创建一个名为daemon.json的文件,并将镜像加速器的地址配置为为"https://mqkiky4e.mirror.aliyuncs.com"。
然后,重新加载配置文件,可以使用命令:

sudo systemctl daemon-reload

最后,重启Docker服务,可以使用命令:

sudo systemctl restart docker

这样你大概率可能也许或许应该是就成功配置了Docker的镜像加速器

如果本文对大家有所帮助的话,还望各位能给我点赞、收藏并评论一下,感谢各位💕!!! 另如果大家有什么疑问或者建议的话,欢迎评论区留言。

那么,我们下期再见。

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

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

相关文章

亚马逊建议卖家使用“客户评论”选项卡提高产品评级!

亚马逊美国站发布公告称客户评论见解选项卡通过分析评论来帮助卖家推出评价较高的产品&#xff0c;以更好地了解客户偏好和当前趋势&#xff0c;从而提高产品评级&#xff0c;以下是公告内容&#xff1a; 客户评论见解选项卡通过分析评论来帮助卖家推出评价较高的产品&#xf…

一份百万收藏的《从零开始写分布式服务框架》称霸Github榜首!

前言 架构说简单点就是一堆技术、框架、工具的组合&#xff0c;至于怎么组合&#xff0c;这就非常考验架构师的经验和水平。一个优秀的架构&#xff0c;可以让开发效率变得更加高效&#xff0c;为企业节省更多的成本。程序员可将自己更多的精力放在业务需求的实现上&#xff0…

Redis 集群部署

Redis 3.0 版本后正式推出 Redis 集群模式,该模式是 Redis 的分布式的解决方案,是一个提供在多个 Redis 节点间共享数据的程序集,且 Redis 集群是去中心化的,它的每个 Master 节点都可以进行读写数据,每个节点都拥有平等的关系,每个节点都保持各自的数据和整个集群的状态…

基于YOLOv8开发构建蝴蝶目标检测识别系统

在前面的一篇博文中已经很详细地描述了如何基于YOLOv8开发构建自己的个性化目标检测模型&#xff0c;感兴趣的话可以看下&#xff1a; 《基于YOLOv8开发构建目标检测模型超详细教程【以焊缝质量检测数据场景为例】》 本文的主要目的就是基于YOLOv8来开发构建细粒度的蝴蝶目标…

【高压架构】AP5199S LED平均电流型恒流驱动IC 0.01调光 景观舞台汽车灯驱动照明

说明 AP5199S 是一款外围电路简单的多功能平均电流型 LED 恒流驱动器&#xff0c;适用于宽电压范围的非隔离式大功率恒流 LED 驱动领域。芯片 PWM 端口支持超小占空比的 PWM 调光&#xff0c;可响应 60ns 脉宽。为客户提供解决方案&#xff0c;限度地发挥灯具优势&#xff0c;…

Betaflight飞控之FAILSAFE机制

Betaflight飞控之FAILSAFE机制 1. 源由2. 设计2.1 触发方式2.1.1 遥控开关触发2.1.2 遥控信号丢失 2.2 FAILSAFE策略2.2.1 Drop mode2.2.2 Landing mode2.2.3 GPS Return mode 3. GPS救援状态机4. 总结5. 参考资料 1. 源由 之前对航模飞控之FAILSAFE机制做了一个简单的探讨&am…

【JavaEE初阶】——第七节.Servlet入门学习笔记

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;JavaEE进阶 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录 前…

基于 moleculer 微服务架构的智能低代码PaaS 平台源码 可视化开发

低代码开发平台源码 低代码管理系统PaaS 平台 无需代码或通过少量代码就可以快速生成应用程序的开发平台。 本套低代码管理后台可以支持多种企业应用场景&#xff0c;包括但不限于CRM、ERP、OA、BI、IoT、大数据等。无论是传统企业还是新兴企业&#xff0c;都可以使用管理后台…

filebeat介绍

1、filebeat概述 Filebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置&#xff0c;收集日志事件&#xff0c;并将它们转发到Elasticsearch或 Logstash或kafka进行索引 1.1 Filebeat两个主要组件 prospector 和 harvester。 prospector&a…

SpringBoot项目使用MyBatisX+Apifox IDEA 插件快速开发

今天跟大家介绍两个快速开发项目的插件。能大大提高开发效率。希望能帮助到大家。 1、MyBatisX 插件 MyBatis-Plus为我们提供了强大的mapper和service模板&#xff0c;能够大大的提高开发效率。但是在真正开发过程中&#xff0c;MyBatis-Plus并不能为我们解决所有问题&#xf…

Spark Streaming流媒体引擎

Spark Streaming是Spark的上一代流媒体引擎。Spark Streaming不再有更新&#xff0c;它是一个遗留项目。Spark中有一个更新且更易于使用的流媒体引擎&#xff0c;称为结构化流媒体 概述 Spark Streaming是核心Spark API的扩展&#xff0c;支持实时数据流的可扩展、高吞吐量、…

技术分享 | App测试时常用的adb命令你都掌握了哪些呢?

adb 全称为 Android Debug Bridge&#xff08;Android 调试桥&#xff09;&#xff0c;是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。 adb 是一种功能强大的命令行工具&#xff0c;可让 PC 端与 Android 设备进行通信。adb 命令可执行各种设备操作&#xff0…

Python Geoplotlib 可视化地理数据的综合指南

Geoplotlib&#xff1a; Exploring the World with Python Python Geoplotlib 可视化地理数据的综合指南 Geoplotlib是一个强大的Python库&#xff0c;用于可视化地理数据。它提供了一种简单直观的方法来创建地图并在其上绘制地理数据。 Geoplotlib 建立在 matplotlib 和 numpy…

有哪些常用的设计素材资源网站?

设计师要想在瞬息万变的设计世界中紧跟潮流&#xff0c;就需要不断探索和访问流行的UI设计网站&#xff0c;看看什么是时尚。UI设计网站也是寻求可能解决方案、脚本和设计反馈的好地方。Behance对很多设计师来说并不陌生&#xff0c;是Adobe的UI设计网站。然而&#xff0c;2022…

蓝桥杯单片机第九届国赛 真题+代码

iic.c /* # I2C代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行编写相关代码或以该代码为基础&#xff0c;根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求&#xff0c;进行代码调试和修改。 */ #include <STC1…

【Vue3】局部组件和全局组件

1. 局部组件 Card.vue <template><div class"card"><header><div>标题</div><div>副标题</div></header><section>内容</section></div> </template><script setup lang"ts"…

Jenkins集成SonarQube保姆级教程

Jenkins是自动化部署平台&#xff0c;一个粗眉大眼的糙汉子&#xff01; SonarQube是代码扫描平台&#xff0c;一个眉目清秀的小女子&#xff01; 有一天&#xff0c;上天交给我一个任务&#xff0c;去撮合撮合他们&#xff01; 我抬头看了看天&#xff0c; 不&#xff0c;…

第五章 传输层

第五章 传输层 5.1 运输层的功能 运输层功能&#xff1a; 运输层为应用进程之间提供 端到端的逻辑通信&#xff08;但网络层是为主机之间提供逻辑通信&#xff09;。 运输层还要对收到的报文进行差错检测。 运输层提供面向连接和无连接的服务 ​ 从通信和信息处理的角度看…

Jsp+Ssh+Mysql实现的简单的企业物资信息管理系统项目源码附带视频指导运行教程

由jspssh&#xff08;springstruts2mysql&#xff09;实现的企业物资信息管理系统&#xff0c;系统功能比较简单&#xff0c;实现了基本的管理员、操作员等用户管理、物品分类管理、物品管理、入库管理、出库管理、库存预警、客户管理、供应商管理等基本功能需要的可以联系我分…

Linux工具【1】(编辑器vim、编译器gcc与g++)

vim详解 引言vimVim的三种模式及模式切换普通模式下操作底行模式下操作 gcc与ggcc的使用&#xff08;g类似&#xff09;预编译编译汇编链接静态库与动态库 总结 引言 vim&#xff08;vi improved&#xff09;编辑器是从 vi 发展出来的一个文本编辑器。 代码补全、编译及错误跳…