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

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 容器类似于物理运输容器。

总结

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

剑指offer——删除链表的节点

题目描述&#xff1a;给定单向链表的头指针和一个要删除的节点的值&#xff0c;定义一个函数删除该节点。返回删除后的链表的头节点。 数据范围&#xff1a; 0 <链表节点值 < 10000 0 <链表长度 < 10000 示例1&#xff1a; 输入&#xff1a;{2,5,1,9}&#xff…

1.28寒假集训

A: 解题思路&#xff1a; 移项就好v mv / (M - m) 下面是c代码&#xff1a; #include<iostream> using namespace std; int main() {int t;double M,m,v;cin >> t;while(t ! 0){cin >> M >> m >> v;printf("%.2lf\n",(m * v) / (M…

数据库之 基础概念、安装mysql、sql语句基础

数据库之 基础概念、安装mysql、sql语句基础 【一】存储数据的演变过程&#xff1a; 文件存储&#xff1a; 初始阶段随意存放数据到文件&#xff0c;格式任意。目录规范引入&#xff1a; 软件开发使用目录规范&#xff0c;限制数据位置&#xff0c;建立专门文件夹。本地数据存…

Linux报 “no route to host” 异常 ping: sendmsg: No route to host

公司有台服务器迁移机房后跟另一台服务器相互ping不通&#xff0c;但是两台服务器都能上网能ping其他机器&#xff0c;其他机器都能ping通这两台服务器。检查两台服务器没有防火墙规则拦截&#xff0c;交换机上也没检查到acl过滤。 下图是迁移机房的服务器ping截图 下图是nfs服…

分布式空间索引了解与扩展

目录 一、空间索引快速理解 &#xff08;一&#xff09;区域编码 &#xff08;二&#xff09;区域编码检索 &#xff08;三&#xff09;Geohash 编码 &#xff08;四&#xff09;RTree及其变体 二、业内方案选取 三、分布式空间索引架构 &#xff08;一&#xff09;PG数…

腾讯云幻兽帕鲁4核16G14M服务器性能测评和价格

腾讯云幻兽帕鲁服务器4核16G14M配置&#xff0c;14M公网带宽&#xff0c;限制2500GB月流量&#xff0c;系统盘为220GB SSD盘&#xff0c;优惠价格66元1个月&#xff0c;277元3个月&#xff0c;支持4到8个玩家畅玩&#xff0c;地域可选择上海/北京/成都/南京/广州&#xff0c;腾…

通讯录项目(终)

Start And Stick 上一期我们将通讯录的项目的基本功能已经实现&#xff0c;这一篇文章我们将对通讯录进行完善。 目录 Start And Stick 上期回顾&#xff1a; 上期必要代码&#xff1a; 数据打印&#xff1a; 代码讲解&#xff1a; 头部插入数据&#xff1a; 代码讲解&…

27.1K Star,优雅的JSON 数据可视化工具

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 想自己之前做 APP 开发会访问后端数据&#xff0c;这个数据就是 JSON …

【网络基础】网络协议传输层UDP和TCP

UDP 解包和分用 解包&#xff08;解析数据包&#xff09; 捕获数据包&#xff1a;首先&#xff0c;接收端的网络栈捕获UDP数据包。检查目的端口&#xff1a;接收端检查数据包头部的目的端口&#xff0c;以确定哪个应用程序应该接收该数据包。验证校验和&#xff1a;接收端可能…

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

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

2024年数学建模美赛C题(预测 Wordle)——思路、程序总结分享

1: 问题描述与要求 《纽约时报》要求您对本文件中的结果进行分析&#xff0c;以回答几个问题。 问题1&#xff1a;报告结果的数量每天都在变化。开发一个模型来解释这种变化&#xff0c;并使用您的模型为2023年3月1日报告的结果数量创建一个预测区间。这个词的任何属性是否会…

Java TemporalAdjusters 时间调节器

提供了非常多处理日期相关的函数&#xff1a; 使用示例&#xff1a; /*** JCccc* param args*/public static void main(String[] args) {DateTimeFormatter pattern DateTimeFormatter.ofPattern("yyyy-MM-dd");LocalDateTime now LocalDateTime.now();//获取当月…

web前端项目-实现录音功能【附源码】

录音功能 运行效果&#xff1a;本项目可实现录音软件的录音、存储、播放等功能 HTML源码&#xff1a; &#xff08;1&#xff09;index.html&#xff1a; <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/h…

java日志框架总结(三 、Log4j日志框架)

一、简介 Log4j ( Logger For Java ) , Java 日志的记录包。 官方网站 。Log4j 是 Apache 的一个开源项目&#xff0c; 为Java提供了日志记录功能。能够让程序员非常方便的记录日志&#xff0c; 并且提供了多种适配方式&#xff0c;能满足各种需求。 使用Log4j 只需要导入一个…

【时序预测】2、prophet:Forecasting at Scale | Python 文档教程

文章目录 一、Quick Start二、饱和预测2.1 Forecasting Growth 预测增长2.2 Saturating Minimum 饱和最小值 三、Trend Changepoints 趋势变化点3.1 Automatic changepoint detection in Prophet 自动检测变化点3.2 Adjusting trend flexibility 调整趋势灵活性3.3 Specifying …

从零开始做题:逆向 ret2shellcode orw

1.题目信息 BUUCTF在线评测 下载orw时防病毒要关闭 2.题目分析 orw是open、read、write的简写。有时候binary会通过prctl、seccomp进行沙箱保护&#xff0c;并不能getshell。只能通过orw的方式拿到flag。 fdopen&#xff08;‘./flag’); # 打开flag文件&#xff0c;得到fd…

线程调度(Java Android)

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览2.1、线程的属性 三、…

HTTP服务器基础认识(复习)

鉴于曾经写过相关文章&#xff0c;这里就不再详细介绍了&#xff0c;关于详细的介绍可以参考我之前的文章 HTTP协议初识中篇-CSDN博客 一个简单的设置套接字的过程&#xff0c;也当成是复习一下下了 代码 #include <iostream> #include <cstdio> #include <…

Redis的数据类型

目录 string 1.编码方式 2.应用场景 3.常用命令 hash 1.编码方式 2.应用场景 3.常用命令 list 1.编码方式 2.应用场景 3.常用命令 set 1.编码方式 2.应用场景 3.常用命令 zset 1.编码方式 2.应用场景 3.常用命令 如何理解Redis的编码方式 embs…

2024三掌柜赠书活动第七期:一本书读懂AIGC:探索AI商业化新时代

目录 前言AI商业化的背景和挑战关于《一本书读懂AIGC&#xff1a;探索AI商业化新时代》编辑推荐内容简介作者简介图书目录书中前言/序言《一本书读懂AIGC&#xff1a;探索AI商业化新时代》全书速览结束语 前言 不用多讲&#xff0c;想必大家也都知道&#xff0c;人工智能在过…