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

🚀欢迎来到本文🚀
🍉个人简介:陈童学哦,目前学习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.mzph.cn/news/20960.shtml

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

相关文章

什么?你还没有用过JPA Buddy,那么你工作肯定没5年

1. 概述 JPA Buddy是一个广泛使用的IntelliJ IDEA插件&#xff0c;面向使用JPA数据模型和相关技术&#xff08;如Spring DataJPA&#xff0c;DB版本控制工具&#xff08;Flyway&#xff0c;Liquibase&#xff09;&#xff0c;MapStruct等&#xff09;的新手和有经验的开发人员…

《Java-SE-第二十七章》之常见的锁策略

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…

RD算法(四)登堂入室 —— 成像完成

SAR成像专栏目录_lightninghenry的博客-CSDN博客https://lightning.blog.csdn.net/article/details/122393577?spm=1001.2014.3001.5502先放RD算法最终的成像结果: 经简单的地距投影后为(地距投影的内容在后面的几何校正章节中讲解): 温哥华这地形还真像是一张怪兽的巨嘴呀…

方差分析||判断数据是否符合正态分布

方差分析练习题 练习学习笔记&#xff1a; &#xff08;1&#xff09; 标准差和标准偏差、均方差是一个东西。标准误差和标准误是一个东西。这两个东西有区别。 &#xff08;2&#xff09;单因素方差分析&#xff08;MATLAB求解&#xff09; &#xff08;3&#xff09;使用an…

【雕爷学编程】MicroPython动手做(28)——物联网之Yeelight

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

同比环比使用方法

一、解释&#xff1a; 1.同比&#xff1a;本期与去年同期相比 &#xff0c;如2023年8月 比 2022年8月 2.环比&#xff1a;本期与上期相比 &#xff0c;如2023年8月 比 2023年7月 二、应用&#xff1a; 1.场景&#xff1a;统计日报、周报、月报、年报下进店客流的同比和环…

银河麒麟V10 飞腾 Qt环境搭建

采用在线安装方式&#xff1a; 1、在线安装qt组件 sudo apt-get install qt5-* 2、在线安装qt creator sudo apt-get install qtcreator 以上简单两步安装完成后&#xff0c;新建项目已经可以编译过&#xff0c;但ClangCodeModel会报错如下图 the code model could not parse …

开始学习 Kafka,一文掌握基本概念|Kafka 系列 一

如果你还不了解 Kafka&#xff0c;或者也打算深入探索、系统学习&#xff0c;那么欢迎有同样目标的小伙伴可以加群交流&#xff0c;让学习之路不再孤独。 一个人可能走的很快&#xff0c;但是一群人会走的更远。&#xff08;后台回复&#xff1a;加群&#xff09; 点击上方“后…

python

文章目录 初识pythonpython的安装win系统Linux系统&#xff08;centos7&#xff09; 第一个Python程序常见问题 Python解释器Python开发环境PyCharm的基础使用创建项目修改主题修改默认字体和大小汉化插件翻译软件常用快捷键 初识python Python语言的起源可以追溯到1989年&…

Ubuntu-文件和目录相关命令

&#x1f52e;linux的文件系统结构 ⛳目录结构及目录路径 &#x1f9e9;文件系统层次结构标准FHS Filesystem Hierarchy Standard(文件系统层次结构标准&#xff09; Linux是开源的软件&#xff0c;各Linux发行机构都可以按照自己的需求对文件系统进行裁剪&#xff0c;所以众多…

17. Spring 事务

目录 1. 事务定义 2. MySQL 中的事务使用 3. 没有事务时的插入 4. Spring 编程式事务 5. Spring 声明式事务 5.1 Transactional 作用范围 5.2 Transactional 参数说明 5.3 Transactional 工作原理 1. 事务定义 将⼀组操作封装成一个执行单元&#xff08;封装到一起…

ffplay——QT项目移植

一、ffmpeg源码编译 参考&#xff1a; https://blog.csdn.net/sgzed/article/details/119850119 在生成时做了一些修改&#xff1a; ./configure --toolchainmsvc --enable-shared --enable-postproc --enable-gpl --prefixwindows 二、对文件做调整 ffplay只需要三个文件&…

stm32常见数据类型

stm32的数据类型的字节长度 s8 占用1个byte&#xff0c;数据范围 -2^7 到 (2^7-1) s16 占用2个byte&#xff0c;数据范围 -2^15 到 (2^15-1) s32 占用 4个byte&#xff0c;数据范围 -2^31 到 (231-1)231 2147483647 int64_t占用8个byte&#xff0c;数据范围 -2^63 到 (2^63-1)…

一文快速入门Byzer-python

目录 一、Byzer-Python介绍 二、Byzer-python工具语法糖 三、环境依赖 1. Python 环境搭建 2. Ray 环境搭建 3. Byzer-python 与 Ray 四、参数详解 五、数据处理 1. Byzer-python 处理数据 2. Byzer-python 代码说明 3. Byzer-python 读写 Excel 文件 4. Byzer-pytho…

如何搭建一个口才培训的网站?需要具备哪些条件?

论文题目&#xff1a;如何搭建一个口才培训的网站及所需条件 摘要&#xff1a; 本文探讨了如何搭建一个口才培训的网站&#xff0c;并详细分析了所需的关键条件。口才培训作为一种重要的社交技能&#xff0c;能够帮助人们提升自信和影响力&#xff0c;因此具有广阔的市场前景。…

day17 | 654.最大的二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

文章目录 一、最大的二叉树二、合并二叉树三、二叉搜索树中的搜索四、验证二叉搜索树 一、最大的二叉树 654.最大的二叉树 构建二叉树的题目&#xff0c;都用前序遍历。 因为我们一定要先构建根节点&#xff0c;才能继续向后构建。 递归函数的参数和返回值&#xff1a; Tree…

AssetBundle学习

官方文档&#xff1a;AssetBundle 工作流程 - Unity 手册 (unity3d.com) 之前写的博客&#xff1a;AssetBundle学习_zaizai1007的博客-CSDN博客 使用流程图&#xff1a; 1&#xff0c;指定资源的AssetBundle属性 &#xff08;xxxa/xxx&#xff09;这里xxxa会生成目录&…

redux-promise-middleware和applyMiddleware的理解与使用

一、作用&#xff1a; applyMiddleware是一个中间件&#xff0c;通常和applyMiddleware结合使用&#xff0c;是dispatch与reducers之间的应用&#xff0c;用于处理dispatch发送的异步action操作 二、使用 1、安装redux-promise-middleware cnpm i redux-promise-middleware…

Micropython STM32F4入门点灯第一课

Micropython STM32F4入门点灯第一课 &#x1f4cc;固件刷可参考前面一篇《STM32刷Micropython固件参考指南》&#x1f4cd;固件下载&#xff1a;https://micropython.org/download/?mcustm32f4&#x1f516;本例程基于STM32F4DISC&#xff0c;主控芯片STM32F407VGT6&#x1f4…

vue 混入(mixin)的使用

在 vue 组件内&#xff0c;如果想将一些公共功能&#xff0c;如组件、方法、钩子函数等复用&#xff0c;混入是一个很好的选择。 现在开始我们的混入使用吧 1、我们可以创建一个目录mixins&#xff0c;在创建一个comment.js文件如图&#xff1a; // 在 common.js 里写你想共享…