一文理清楚-Docker 容器如何工作

news2024/11/20 3:30:21

Docker 容器如何工作

    • 集装箱
    • 什么是虚拟机?
    • 虚拟化如何运作?
    • 什么是容器?
    • 什么是 Docker?
    • 总结

在这里插入图片描述
五星上将麦克阿瑟曾经说过:在docker面前,虚拟机就是个弟弟

集装箱

《盒子:集装箱如何让世界变得更小,让世界经济变得更大》是马克·莱文森 (MarcLevinson)所著的一本书。它探讨了海运集装箱对全球贸易和世界经济的深远影响。

虽然运输容器的历史在有关 Docker 容器的讨论中似乎无关紧要,但它们的共同点比您想象的要多。

在集装箱运输出现之前,货物装卸是劳动密集型且耗时的,导致全球贸易效率低下和延误。抵达时的货物形状和尺寸各异,缺乏标准化包装使得有效堆叠和固定物品变得困难。

如果没有标准化集装箱,货物常常被随意存放在船舱或船坞中。这种对空间的低效利用意味着船舶无法运载尽可能多的货物,从而导致运输成本更高。

采用统一的集装箱尺寸和装卸程序,可以在不同的运输方式(船舶、卡车、火车和用于移动集装箱的起重机)之间无缝转移货物。
该图显示了标准化集装箱尺寸如何使它们能够在船舶、火车和卡车之间轻松移动
这种标准化是集装箱成功的关键。毕竟,如果一家公司的集装箱不适合另一家公司的船舶、卡车或货运列车,它们就无法正常运输。每家公司都需要自己的集装箱车队才能将物品发送给每个客户——这将是一场运营噩梦。

集装箱的标准化使其具有便携性,可以轻松地从一个地方移动到另一个地方。这种可移植性也是 Docker 容器的一个关键特性,我们将很快讨论。

什么是虚拟机?

虚拟机 (VM) 是通过称为虚拟化的过程创建的。

虚拟化是一项技术,允许您在单个物理计算机上创建多个模拟环境或某些事物的虚拟版本,例如操作系统、服务器、存储或网络。

这些虚拟环境的行为就好像它们是独立的、单独的实体一样,尽管它们共享底层物理系统的资源。

虚拟化就像有一顶魔术师的帽子,可以在里面变出多顶帽子。正如魔术师的帽子会造成一顶物理帽子出现许多帽子的错觉一样,虚拟化允许单个物理计算机或服务器显示为多个虚拟机 (VM),每个虚拟机都有自己的操作系统和资源。

VM 虚拟化硬件。这仅仅意味着虚拟机采用单个硬件(服务器)并创建运行自己的操作系统的其他服务器的虚拟版本。从物理上来说,它只是一个硬件。

从逻辑上讲,多个虚拟机可以在单个硬件上运行。这本质上是在一台计算机内运行的一台或多台计算机,如下所示。
在这里插入图片描述

虚拟化如何运作?

所以您可能想知道 – 虚拟化到底是如何工作的?看看下面的图片:
在这里插入图片描述
在基础上,您拥有主机硬件和操作系统。这是用于创建虚拟机的物理机。最重要的是,您还有虚拟机管理程序。这允许多个虚拟机(每个虚拟机都有自己的操作系统 (OS))在单个物理服务器上运行。

不过,虚拟机有一些缺点,容器可以解决这些缺点。有两个缺点尤其突出:

虚拟机消耗更多资源:由于需要为每个虚拟机运行完整的操作系统实例,因此虚拟机具有更高的资源开销。这可能会导致更大的内存和存储消耗。这反过来会对虚拟机的性能和启动时间产生负面影响。
可移植性:由于底层操作系统环境的差异,虚拟机通常不太可移植。在不同的虚拟机管理程序或云提供商之间移动虚拟机可能会更加复杂。
主要的云提供商都有虚拟机。对于AWS来说,它是EC2,GCP有计算引擎,Azure有Azure虚拟机。

什么是容器?

容器是一个轻量级、独立且可执行的软件包,其中包含运行软件所需的一切,包括代码、运行时、系统工具和库。

容器旨在隔离应用程序及其依赖项,确保它们可以在不同环境中一致运行。无论应用程序是从您的计算机运行还是在云中运行,应用程序的行为都保持不变。

与虚拟化硬件的虚拟机不同,容器虚拟化操作系统。这仅仅意味着容器使用单个操作系统来创建虚拟应用程序及其库。容器在主机系统提供的共享操作系统之上运行。

如下图所示:
在这里插入图片描述
容器引擎允许您启动容器。它提供构建、运行和部署容器化应用程序所需的工具和服务。

容器有几个好处:

  • 可移植性:容器被设计为独立于平台。它们可以在任何支持容器运行时的系统上运行,例如 Docker,而不管底层操作系统是什么。这使得在不同环境之间移动应用程序变得更加容易,包括本地开发机器、测试服务器和不同的云平台。
  • 效率:容器共享主机系统的操作系统,这减少了运行多个操作系统的虚拟机的开销。这可以提高资源利用率,并允许在单个主机上运行更高密度的应用程序。
  • 一致性:容器将所有必要的组件(包括应用程序代码、运行时、库和依赖项)打包到一个单元中。这消除了“它可以在我的机器上运行”的问题,并确保应用程序在从开发到生产的不同环境中一致运行。
  • 隔离:容器为运行应用程序提供了一个轻量级且隔离的环境。每个容器都封装了应用程序及其依赖项,确保它们不会相互干扰。这种隔离有助于防止冲突并确保不同环境中行为的一致性。
    快速部署:容器可以快速创建和启动,通常只需几秒钟。这种快速的部署速度对于需要根据需求快速扩展或缩小的应用程序特别有利。

什么是 Docker?

现在我们已经介绍了虚拟机和容器,那么 Docker 到底是什么?Docker 只是一个用于创建和管理容器的工具。

Docker 的核心有两个易于理解的概念:Dockerfile 和 Docker Images。

Dockerfile 包含用于构建 Docker 映像的一组指令。

Docker 镜像充当创建 Docker 容器的模板。它包含运行软件应用程序所需的所有必要代码、运行时、系统工具、库和设置。

因此,Dockerfile 用于构建 Docker 映像,然后将其用作创建一个或多个 Docker 容器的模板。如下图所示。
在这里插入图片描述
如果这个解释仍然让您摸不着头脑,请考虑以下使用集装箱的类比。

想象一下,您需要建造多个集装箱来将物品运输到世界各地。您从列出运输集装箱要求的文件开始。这将包含集装箱尺寸、密封件类型、门锁机构、通风和制冷要求(例如,如果您运输需要温度控制环境的食品)等信息。

然后,该需求文件将用于创建容器的详细模板,其中包括显示尺寸和其他规格的工程图。

然后将根据该模板构建物理容器。这一单一模板可用于构建一个或多个物理容器,这些容器都是相同的并符合容器模板中的规格。

如下图所示:

在这里插入图片描述
Dockerfile 类似于需求文档,它只是包含一组用于构建容器模板的指令。

Docker 镜像类似于容器模板,它详细介绍了构建物理容器所需的所有指令。

一旦创建,Docker 镜像就是不可变的,这意味着它们无法更改。如果需要对应用程序进行更改,则需要修改 Dockerfile 并创建新镜像。这种不变性确保了应用程序部署的一致性和可重复性。

总的来说,Docker 容器类似于物理运输容器。

总结

容器提供了一种可移植且高效的方式来打包应用程序及其依赖项,从而确保各种环境之间的一致性。它们给软件开发带来的好处类似于不起眼的集装箱给全球经济带来的好处

  • 可移植性
    通过标准化,运输集装箱可确保世界上任何地方的任何集装箱都可以无缝地用于在各种运输方式之间运输物品——船舶、卡车、火车以及用于将物品装上和卸下不同形式的运输的起重机。

  • 提高效率
    使用标准集装箱尺寸,您可以移动的货物的包装密度会增加。现在,您可以将更多的东西挤进一个集装箱中,而在集装箱出现之前,您可以将非标准形状和尺寸的货物随意存放在船舱或船坞中。因此,每艘轮船、货运列车或卡车在每次行程中都可以运载更多货物,从而使在世界各地运输货物的成本变得更便宜。

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

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

相关文章

车载电子电器架构 —— 多核处理器刷写策略

车载电子电器架构 —— 多核处理器刷写策略 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消…

内存管理(mmu)/内存分配原理/多级页表

1.为什么要做内存管理? 随着进程对内存需求的扩大,和同时调度的进程增加,内存是比较瓶颈的资源,如何更好的高效的利于存储资源是一个重要问题。 这个内存管理的需求也是慢慢发展而来,早期总线上的master是直接使用物…

C++:STL - string

C&#xff1a;STL - string basic_stringstringstring的常见构造string的输入输出operator<<c_stroperator>>getline string访问及遍历operator[ ] & atfont & back迭代器begin & endrbegin & rend 范围for string的容量操作size & lengthmax_…

用甘特图有效管理多个项目进度

当公司或组织同时承担多个项目时,合理规划各项目的时间节点与资源分配对确保高效完成至关重要。采用甘特图可以直观地展示多个项目的时间进程、关键里程碑以及资源分配情况,便于从宏观层面全面把控各项目的动态。 在线甘特图软件 zz-plan.com 提供了非常强大的时间轴规划功能,支…

CSS 多色正方形上升

<template><view class="loop cubes"><view class="item cubes"></view> <!-- 方块1 --><view class="item cubes"></view> <!-- 方块2 --><view class="item cubes"></vie…

C# 将HTML网页、HTML字符串转换为PDF

将HTML转换为PDF可实现格式保留、可靠打印、文档归档等多种用途&#xff0c;满足不同领域和情境下的需求。本文将通过以下两个示例&#xff0c;演示如何使用第三方库Spire.PDF for .NET和QT插件在C# 中将Html 网页&#xff08;URL&#xff09;或HTML字符串转为PDF文件。 HTML转…

【C语言】深入理解指针(3)数组名与函数传参

目录 &#xff08;一&#xff09;数组名的理解 &#xff08;1&#xff09;数组名是数组首元素的地址 &#xff08;2&#xff09;两个例外 &#xff08;二&#xff09;函数内数组传参 &#xff08;1&#xff09;一维数组传参 &#xff08;2&#xff09;二维数组传参 &…

以太网交换基础VLAN原理与配置

目录 7.以太网交换基础 7.1.以太网协议 7.2.以太网帧介绍 7.3.以太网交换机 7.4.同网段数据通信全过程 8.VLAN原理与配置 8.1.VLAN的基本概念 8.2.VLAN的应用 7.以太网交换基础 7.1.以太网协议 以太网是当今现有局域网(Local Area Network,LAN)采用的最通用的通信协议…

git使用指南——以gitlab为例

注册gitlab 自行注册 新建项目 选择新建一个空白的项目 上传项目 clone项目地址到本地 执行完之后&#xff0c;会在目录下生成如下内容&#xff1a;进入里面&#xff0c;选择.git&#xff0c;要上传的内容&#xff08;资料或代码复制到该目录下&#xff09;&#xff1a;…

界面组件DevExpress .NET MAUI中文教程 - 如何优化手机屏幕空间?

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。 获取DevExpress v23.2正式版下载 Bottom Sheet是一个组件&#xff0c;它显示固定在屏幕底部的…

LeetCode:376.摆动序列

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;算法_仍有未知等待探索的博客-CSDN博客 题目链接&#xff1a;376. 摆动序列 - 力扣&#xff08;LeetCode&#xff09; 一、题目 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称…

【排序5】基数排序:数字的组织与整理艺术

&#x1f3a1;基数排序 &#x1f38a;1、基本思想&#x1f38a;2、基本步骤&#x1f38a;3、代码示例&#x1f38a;4、特性总结 &#x1f38a;1、基本思想 基数排序&#xff08;Radix Sort&#xff09;是一种非比较排序算法&#xff0c;它根据数字的每一位来对元素进行排序。它…

提示unzip :commad not found; 安装unzip教程

1.当使用unzip解压时 提示&#xff1a; unzip :commad not found; 2.安装命令 sudo yum install unzip 3.输入 y 确认 4.提示&#xff1a;完成 5.输入 unzip 文件名 解压-验证 6.完成

34.基于51单片机的智能停车位计时收费系统设计

一、系统功能介绍&#xff1a; 本设计基于 RFID智能识别和高速的视频图像和存储比较相结合&#xff0c;通过计算机的图像处理和自动识别&#xff0c;对车辆进出停车场的收费、车牌识别和车位诱导等&#xff0c;以实现停车场全方位智能管理。 本设计是以AT89C51 型单片机为主控芯…

Kubernetes (十七) 资源监控

一. 资源监控 二. metrics-server资源下载配置 官网:资源下载&#xff1a;http…

搭建Mybatis环境

1.导入依赖 pom.xml <dependencies> <!-- Mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency> <!-- Mysql依…

Tonka Finance 测试网活动,开启新铭文时代财富之门

Tonka Finance 是铭文赛道首个借贷市场&#xff0c;通过搭建一套铭文资产借贷质押方案&#xff0c;为铭文资产以借贷的形式释放价值、捕获流动性等方面提供了基础。作为铭文赛道最重要的基建设施之一&#xff0c;Tonka Finance 在面向市场后备受关注&#xff0c;并迅速作为铭文…

【UE】在控件蓝图中通过时间轴控制材质参数变化

效果 步骤 1. 新建一个控件蓝图和一个材质 2. 打开材质&#xff0c;设置材质域为用户界面&#xff0c;混合模式设置为“半透明” 在材质图表中添加两个参数来控制材质的颜色和不透明度 3. 对材质创建材质实例 4. 打开控件蓝图&#xff0c;在画布面板中添加一个图像控件 将刚…

vue常用指令(v-html)

一、v-html 指令 作用: 获取文本数据设置元素的innerHTML&#xff0c;此为和v-text的区别 二、代码演示 1、获取普通文本数据 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewpor…

32个Java面试必考点-08高并发架构基石-缓存

本课时介绍缓存相关的知识点以及 Memcache 和 Redis 这两个最常使用的缓存。重点学习以下三个方面的内容&#xff1a; 1.使用缓存时常遇到的典型问题&#xff1b; 2.Memcache 的内存结构&#xff1b; 3.Redis 相关的知识点以及 Redis 常用结构的实现。 缓存知识点 类型 缓…