容器技术的发展
近年来,随着计算机硬件、网络以及云计算等技术的迅速发展,云原生的概念也越来越受到业界人士的广泛关注,越来越多的应用场景开始拥抱云原生,其中容器技术的发展起着至关重要的作用。本章将介绍容器技术的基础知识,为后续章节的学习做好基础铺垫。
本章主要涉及到的知识点有:
- 什么是容器:了解容器技术与虚拟技术的区别。
- 为什么需要容器:介绍容器技术解决的问题。
- 容器技术的发展历程:了解容器技术的发展历史。
- 容器是如何工作的:了解容器技术的工作原理。
容器作为一种先进的虚拟化技术,已然成为了云原生时代软件开发和运维的标准基础设施。在了解容器技术之前,我们先来了解一下虚拟化技术。
什么是虚拟化技术?
计算机历史上首个虚拟化技术实现于1961年,IBM709计算机首次将CPU占用切分为多个极短(1/100sec)的时间片,每一个时间片都用来执行不同的任务。通过对这些时间片的轮询,这样就可以将一个CPU虚拟化或者伪装成为多个CPU,并且让每一颗虚拟CPU看起来都是在同时运行的。这就是虚拟机的雏形。
计算机系统对于大部分软件开发者来说可以分为以下层级结构,如图1-1所示,自底向上分为硬件层、操作系统层、函数库层、应用程序层,每一层都向上层提供接口,同时每一层也只需要知道下一层的接口即可调用底层功能来实现上层操作,而不需要详细了解下一层的具体运作机制。

图1-1 计算机层级结构示意
简单地说,所谓虚拟化是将计算机的各种硬件资源,例如CPU、内存、磁盘以及网络等,都看作是一种资源池,系统管理员可以将这些资源池进行重新分配,提供给其他的虚拟计算机使用。对于管理员来说,底层物理硬件完全是透明的,即完全不用考虑不同的物理架构,在需要各种硬件资源的时候,只要从这个资源池中划出一部分即可。
虚拟化是使用逻辑来表示资源,从而摆脱物理限制的约束,提高物理资源的利用率。虚拟化就是在上下两层之间,创造出一个新的抽象层,使得上层软件可以直接运行在新的虚拟环境上。简单来说,虚拟化就是通过模访下层原有的功能模块创造接口,来服务于上层,从而达到跨平台开发的目的。如图1-2所示,虚拟机可以理解为存在于硬件层和操作系统层间的虚拟化技术(硬件抽象层),JVM是存在于函数库层和应用程序之间的虚拟化技术。

图1-2 计算机层级间的抽象
从上面的描述可以得知,虚拟化技术至少给计算机行业带来两个巨大的改变,其一就是解决了当前高性能的计算机硬件的产能过剩的问题,其二是可以把老旧的计算机硬件重新组合起来,作为一个整体的资源来重新使用。
此前,市场上面主流的虚拟化产品有Linux平台上面的KVM、Xen、VMWare以及VirualBox等,运行在Windows平台上面的虚拟化产品主要有Hyper V、VMWare以及VirtualBox等。对于这些产品来说,其支持的宿主操作系统是非常广泛的,可以包括Linux、OpenBSD、FreeBSD以及各种Windows等。
在传统的虚拟化技术中,虚拟化系统会虚拟出一套完整的硬件基础设施,包括CPU、内存、显卡、磁盘以及主板等。因此,所有的虚拟机之间是相互隔离的,每个虚拟机都不会受到其他虚拟机的影响,如同多台物理计算机一样。
尽管传统的虚拟化技术通过虚拟出一套完整的计算机硬件,实现了各个虚拟机之间的完全隔离,从而给用户带来了极大的灵活性,并降低了硬件成本。但是,越来越多的用户发现,这种技术方案实际上同时也给自己制造了许多麻烦。例如,在这种环境中,每个虚拟机实例都需要运行客户端操作系统的完整副本以及其中包含的大量应用程序。从实际运行的角度来说,由此产生的沉重负载将会影响其工作效率及性能表现。
容器技术的出现,为虚拟化技术带来了新的生机和革命性的变化。它既拥有虚拟化技术的灵活性,又避免了传统的虚拟化技术的上述缺点。
所谓容器,是一种轻量级的操作系统级虚拟化,可以让用户在一个资源隔离的进程中运行应用及其依赖项。运行应用程序所必需的组件都将打包成一个镜像并可以复用。执行镜像时,它运行在一个隔离环境中,并且不会共享宿主机的内存、CPU以及磁盘,这就保证了容器内进程不能监控容器外的任何进程。图1-3显示了容器的基本架构。

图1-3 容器架构
容器的功能其实和虚拟机类似,无论容器还是虚拟机,其实都是在计算机不同的层面进行虚拟化,即使用逻辑来表示资源,从而摆脱物理限制的约束,提高物理资源的利用率。容器技术已经引起了业内的广泛关注。通过应用容器技术,可以大大地提升应用开发、测试和部署的工作效率。
虚拟化技术已经成为一种被大家广泛认可的服务器硬件资源共享方式。实际上,与传统的虚拟机相比,容器有着明显的区别。
虚拟机管理系统通常需要为虚拟机虚拟出一套完整的硬件环境,此外,在虚拟机中,通常包含整个操作系统及其应用程序。从这些特点来看,虚拟机与真实的物理计算机非常相似。因为虚拟机包含完整的操作系统,所以虚拟机所占磁盘容量一般都比较大,一般为几个GB。如果安装的软件比较多,则可以占用几十,甚至上百GB的磁盘空间。虚拟机的启动相对也比较慢,一般为数分钟。
图1-4 虚拟机
容器作为一种轻量级的虚拟化方案,其所占磁盘空间一般为几个MB字节。在性能方面,与虚拟机相比,容器表现得更加出色,并且其启动速度非常快,一般为几秒。

图1-5 容器
图1-4和图1-5显示了虚拟机和容器之间的区别。从图1-4可以看出,客户机和宿主机之间有个虚拟机管理器来管理虚拟机。每个虚拟机都有操作系统,应用程序运行在客户机操作系统中。从图1-5可以看出,宿主机和容器之间为容器引擎,容器并不包含操作系统,应用程序运行在容器中。
容器的产生为虚拟化技术带来革命性的变化。然而,许多人并不理解,容器的出现到底解决了什么问题?
在虚拟化系统中,大多数问题都是在应用系统的运行环境改变时才突显出来。例如,开发者在Windows操作系统里面编写应用代码,但是实际生产环境却是Linux系统。在这种情况下,应用系统的某些功能就极有可能出现问题。也就是说,当配套软件环境不一样的时候,应用系统出现故障的几率就会大大增加。
Docker创始人Solomon Hykes曾经说过,“如果测试环境使用Python 2.7,但是生产环境使用Python 3,那么一些奇怪的使用就会发生。或者你依赖某个特定版本的SSL库,但是却安装了另外一个版本。或者在Debian上面运行测试环境,但是生产环境使用Red Hat,那么任何奇怪的事情都可能发生。”
除了运行环境之外,发生改变的还有可能是网络或者其他方面。例如,测试环境和生产环境的网络拓扑可能不同,安全策略和存储也有可能不同。用户开发的应用系统需要在这些基础设施上面运行。
当用户将应用系统部署在容器中之后,它们的迁移变得非常容易。容器的初衷也就是将各种应用程序和它们所依赖的运行环境打包成标准的镜像文件,进而发布到不同的平台上运行。这一点与现实生活中货物的运行非常相似。为了解决各种型号、规格、尺寸的货物在各种运输工具上进行运输的问题,我们发明了集装箱。把货物放进集装箱之后,物流公司只负责集装箱的运输就可以了,而不用再去关心集装箱里面的货物到底该如何包装、以及提供多大规格的包装箱。他们面对的就是一个个简单的集装箱。而应用容器之后,部署人员面对的不再是具体的应用系统,不用再关心如何为应用系统准备运行环境及其依赖的其他组件,他们面对的就是一个个镜像,只要把镜像部署好就可以了。
从上面的描述可以得知,容器主要的特性之一就是进程隔离,容器非常适合于在当前的云环境快速迁移和部署应用系统。
----------------------------------------------------
本文节选自《Docker快速入门》
本次内容发布,获得作者和出版社授权,供读者个人非商业目的使用。

相关文章:
容器技术的发展
容器技术的发展 近年来,随着计算机硬件、网络以及云计算等技术的迅速发展,云原生的概念也越来越受到业界人士的广泛关注,越来越多的应用场景开始拥抱云原生,其中容器技术的发展起着至关重要的作用。本章将介绍容器技术的基础知识…...
Python Flask request中常见存储参数的介绍
Python Flask request中常见存储参数的介绍 首先从flask模块中导入请求对象: from flask import requestrequest.form 通过method属性可以操作当前请求方法,通过使用form属性处理表单数据(本质也是得到一个字典,如果传输的是字…...
php+vue网盘系统的设计与实现
该网盘系统的开发和设计根据用户的实际情况出发,对系统的需求进行了详细的分析,然后进行系统的整体设计,最后通过测试使得系统设计的更加完整,可以实现系统中所有的功能,在开始编写论文之前亲自到图书馆借阅php书籍&am…...
[前端]深浅拷贝
一、回顾变量类型 基础类型 boolean(bool) number string null undefined 引用类型 object function array 基本类型与引用类型的存储 基本类型一般存储在 栈 (栈小) 栈一旦确认 大小就固定 可能会造成溢出栈一般是先进后出用于存储…...
文章纠错免费软件-文字校对软件免费下载
自动校对稿件的软件 自动校对稿件的软件是一种基于自然语言处理(Natural Language Processing, NLP)和机器学习(Machine Learning)技术的工具,可以较为准确地检测和纠正文本中出现的语法、拼写、标点符号以及其他笔误…...
【Redis】Redis缓存雪崩、缓存穿透、缓存击穿(热key问题)
目录 一、缓存穿透 1、概念 2、解决办法 1.缓存空对象 2.布隆过滤 二、缓存雪崩 1、概念 2、解决办法 1.给key设置随机的过期时间TTL 2.业务添加多级缓存 3.利用集群提供服务可用性 4.缓存业务添加降级限流 三、缓存击穿 1、概念 2、解决办法 1.互斥锁 2.逻辑…...
为什么很多程序员喜欢linux系统?
a> Linux哪些行业在运用? Linux系统运用极其广泛,不少用户只知道windows,是因为,Linux的运用主要是在企业端。现在科技极其发达,我们手机在手,就能干很多事情,只需点一点屏幕,轻松…...
Bean 作用域和生命周期
✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录 lombok的使用案例引入作用域定义singleton单例作用域prototype原型作用域(多例作用域)request请求作用域session会话作用域ap…...
PMP考试常见13个固定套路
一、变更批准之后 变更批准后要做三件事: 1、在变更日志中记录 2、通知相关干系人 3、更新项目管理计划 二、风险的情景题 1、先判断风险识别了,还是风险发生了。 2、若是风险识别,按风险管理程序走; 3、若是风险发生,则应采取应急措施…...
Leecode101 ——对称二叉树
对称二叉树:Leecode 101 leecode 101 对称二叉树 根据题目描述,首先想清楚,对称二叉树要比较的是哪两个节点。对于二叉树是否对称,要比较的是根节点的左子树与根节点的右子树是不是相互翻转的,其实也就是比较两个树,…...
JVM学习随笔03——Java堆中new一个对象的步骤
目录 一、进行类加载 二、堆中分配内存 1、怎么输出GC日志: 2、内存分配的两种方式: 3、内存分配过程中并发控制的两种方式: 三、内存空间初始化 四、对象头初始化(对象头包含哪些信息?) 五、执行构…...
虹科方案 | CEMEX 使用HK-Edgility 智能边缘计算平台简化其企业 WAN 管理和运营
一、应对价值 130 亿美元的跨国企业的网络挑战 “我们选择 Edgility 是因为其卓越的管理和协调功能,它为我们提供了一个端到端的工具集,可以经济高效地部署和管理我们边缘设备的生命周期。” —— Fernando Garcia -Villaraco Casero, CEMEX 全球IT 战略…...
rk3568 系统移植和编译
1。 硬件问题 尽量根据原版 evb 开发版 pcb 进行布线和移植,切记不可自行走线。 emmc 和 ddr4 选型都有要求的,按照硬件手册进行设计 2。软件问题 2.1 目前固件系统选用1.3.2 版本进行设计 解压后运行 .repo/repo/repo sync -c 更新代码 2.2 ubo…...
深度解析C++异常处理机制:分类、处理方式、常见错误及11新增功能
C 基础知识 八 异常处理 上篇 一、基础1. 异常的概念2. 异常的分类2.1 内置异常2.2 自定义异常 3. 异常的处理方式3.1 try-catch 语句3.2 throw 语句3.3 noexcept 修饰符3.4 finally 语句块 二、 异常处理机制1 try-catch 语句块2 异常处理流程3 标准异常类 三、 抛出异常1 thr…...
FPGA时序约束(四)主时钟、虚拟时钟和时钟特性的约束
系列文章目录 FPGA时序约束(一)基本概念入门及简单语法 FPGA时序约束(二)利用Quartus18对Altera进行时序约束 FPGA时序约束(三)时序约束基本路径的深入分析 文章目录 系列文章目录前言主时钟约束跨时钟域…...
JNI开发
文件结构(选中的为生成的) CMake构建不需要执行命令,会自动生成so文件打包进apk Android mk构建需要执行命令生成so文件,再打包进apk。命令如下。 # 在jni目录下执行 # 生成com_demo_cppproject_OtherNdkTest.h头文件 javac -h .…...
JAVA有哪些特点?
JAVA有以下特点: 综上所述,Java作为一种先进的面向对象编程语言,具有简单、可移植、健壮、高性能、多线程、动态性、跨平台、开放性和安全性等众多特点,已经成为广泛使用的编程语言之一。 简单易学:JAVA语言的语法与C语…...
使用读写锁提高并发
我们想要的是:允许多个线程同时读,但只要有一个线程在写,其他线程就必须等待。 ReadWriteLock ReadWriteLock的作用: 只允许一个线程写入(其他线程既不能写入也不能读取);没有写入时…...
使用@PropertySource加载配置文件
1.PropertySource和PropertySources注解 1.1.PropertySource注解概述 PropertySource注解是Spring 3.1开始引入的配置类注解。通过**PropertySource注解可以将properties配置文件中的key/value存储到Spring的Environment中,Environment接口提供了方法去读取配置文…...
事务及分布式事务解决方案
基础概念 1.1.事务 事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。 1.2.本地事务 在计算机系统中,更多的是通过关系型数据库来控制事务,利用数据库本身的事务特性来实现&a…...
Unity Il2CppDumper原理与实战:解析元数据与二进制对齐
1. 这不是“破解工具”,而是Unity开发者该懂的二进制真相课 你刚在Unity Asset Store下载了一个功能惊艳的插件,却在打包iOS后发现部分逻辑失效;或者接手一个没有源码的旧项目,只有一堆 .dll 和 .so 文件,连主入口…...
Hitboxer:开源SOCD清理工具,3分钟提升游戏操作精准度
Hitboxer:开源SOCD清理工具,3分钟提升游戏操作精准度 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 你是否在激烈的游戏对抗中经历过这样的挫败:同时按下左右方向键时角色卡…...
C语言双端队列完整实现:一行代码吃透头尾操作,算法效率拉满
一、为什么C语言实现双端队列,是数据结构的必学天花板?在C语言数据结构里,队列、栈都是基础中的基础,但真正能把灵活度、效率、内存管理三者揉到一起的,还得是双端队列(deque)。普通队列只能一头…...
为什么视频代剪辑会影响你的内容传播效果
为什么你精心拍的视频,发出去却没人看? 你有没有过这样的经历:花了一整天拍Vlog,素材画质高清、内容真实,可一剪出来就显得平淡无奇,点赞寥寥?或者婚礼当天感动全场,回看成片却像流水…...
CentOS服务器上VNC连接失败?手把手教你排查并修复个人端口问题(附重启命令)
CentOS服务器VNC连接故障深度排查指南:从原理到实战当你在深夜赶项目时,突然发现VNC连接不上服务器,那种焦虑感我深有体会。去年参与半导体器件仿真项目时,我也曾被这个问题困扰整整两天。本文将分享一套经过实战检验的排查方法论…...
阿波罗登月,不可能:读心术与影子叙事 ——不是向全世界展示登月,而是向全世界注射登月
阿波罗登月,不可能:读心术与影子叙事 ——不是向全世界展示登月,而是向全世界注射登月 Jianbing Zhu 1^{1}1 1^{1}1 ECT-OS-JiuHuaShan 文明实验室 ORCID: 0009-0006-8591-1891 DOI: 10.5281/zenodo.20373157 Email: ect-os-jiuhuashanzoho…...
双稳健机器学习:用正交性与交叉拟合解决因果推断中的ML偏差
1. 项目概述:当机器学习遇见因果推断的“干扰”难题在实证研究的日常工作中,我们常常面临一个核心矛盾:我们真正关心的,往往只是一个或几个关键参数——比如一项政策对就业率的平均影响(平均处理效应,ATE&a…...
终极键盘重映射解决方案:3分钟实现职业级游戏操作精度
终极键盘重映射解决方案:3分钟实现职业级游戏操作精度 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在激烈的游戏对抗中,你是否曾因键盘按键冲突而错失关键操作?当同时按下…...
手把手教你用Mind+和Blynk,让手机轻松遥控掌控板(含自建服务器避坑指南)
从零搭建物联网控制平台:Mind与Blynk深度整合实战 当你第一次尝试用手机控制硬件设备时,那种"隔空取物"的奇妙感总会让人兴奋不已。想象一下,躺在沙发上就能调节书桌上的智能台灯亮度,或者在外出时随时查看家中的温湿度…...
约束感知图缩减算法在量子优化中的应用
1. 约束感知图缩减算法概述在量子计算领域,资源受限一直是制约算法实际应用的主要瓶颈。以当前主流的超导量子计算机为例,其量子比特数通常在50-100个之间,且存在显著的噪声干扰。这种硬件限制使得许多经典优化问题难以直接映射到量子设备上求…...
