容器入门:一文了解容器的发展历史、技术和术语

news2025/7/27 21:51:52

学习目标

本文为Amazon容器入门课程笔记,内容是容器化背后的发展历史和概念,介绍容器生态系统中使用的特定技术,并讨论容器在微服务架构中的重要性。

本篇文章仅做前两个小结的梳理和总结。看完这篇文章之后应该掌握容器背后的发展历史、技术和术语


什么是容器?

现实世界中容器是一种标准化的存储单元,以前运输货物是一件非常困难的事情,因为货物的形状各异,有的放得住,有的放不住,有的站得住,有的站不住,你是没有办法船上运输某些东西的。

在这里插入图片描述

到了18世纪,集装箱出现并沿用至今,持续200多年。后来有两个人把集装箱申请专利了。集装箱的出现改善了货物的装卸,同时还为货物提供了一致可预测的存储单元,可以方便的将集装箱再转运到卡车或者开运输工具上。将重点放到了集装箱,而不是单件货物上,我们提高了效率,提高了生产力,同时降低了消费者的成本。这就是使用抽象来提高敏捷性的一个很好的例子。

现在让我们回到计算机的世界当中。 在计算平台中,容器是一种标准化的软件单元,可在运行容器化平台的任何计算环境中快速可靠的运行。容器是在操作系统级别实施的一种形式的虚拟化。容器是独立的轻量级软件包,其中包括运行应用程序所需的一切,例如代码,运行时,系统工具,系统库和设置。
在这里插入图片描述

一台服务器可以托管多个容器,而且所有容器共享底层主机系统的操作系统内核。这些容器可以是大型企业应用程序中的服务,也可以是在隔离环境中运行的独立应用程序。
在这里插入图片描述

容器与其他形式的虚拟化的区别

技术的成熟度水平通常伴随着抽象水平的提高。

裸机服务器时代

使用裸机服务器,人们可以构建架构层,例如基础设施和应用程序软件层。例如在服务器硬件上安装操作系统,在该操作系统上安装所有共享库。然后再安装使用这些库的应用程序。这种运行方式持续了很长一段时间。

这种架构的问题在于效率极低。 无论是以0%的利用率还是100%的利用率运行,硬件成本都是相同的。所有应用程序都需要争夺相同的资源,并且你必须使库的版本与所有应用程序保持同步。如果一个应用程序需要库的更新版本,但主机上运行的其他应用程序不兼容这个版本。这时就会遇到问题。
在这里插入图片描述

虚拟机

你可以通过在操作系统上放置虚拟化平台来提高敏捷性。现在你已经使用虚拟机自带的完整操作系统隔离了应用程序及其库,这样你就可以使用现有的硬件运行更多的虚拟机,从而提高了利用率,并大大减少了物理占用空间。虚拟机的缺点是含有非常多的虚拟化层。 在下图的例子中,主机上现在有四个操作系统,而不是一个,这意味着需要更多的补丁和更新,同时在物理主机上占用了更多的空间,此外还有很严重的冗余,比如你可能把相同的操作系统安装了四次,还可能将相同的库安装了三次。
在这里插入图片描述

容器他来了

为了解决虚拟机的问题,我们引入了容器。容器运行时共享操作系统内核,让您能够使用文件系统层创建容器镜像。

容器具有轻量级、高效、快速的特点,与虚拟机相比,容器的启动和关闭速度更快,从而可以更好的利用基础硬件。你可以按需共享库,也可以为不同的应用程序提供不同的库,彼此互不影响。而且容器高度可移植。由于容器将软件与其他层隔离开来,因此各软件的代码可以在不同的环境中无差别的运行。从开发一直到生产的各个阶段。

在这里插入图片描述

总结两句

裸机服务器虚拟机容器
存在的问题效率低下1.含有过多虚拟化层
2.造成冗余
优点提高敏捷性1.轻量级、高效、快速。
2.高度可移植

容器化并不新奇!!!

容器化不是一个全新的概念。操作系统层面的虚拟化是一个相当成熟的思路:

  • 2004 年 - Solaris Zones
  • 2000年 -FreeBSD jails
  • 1982 年 - Unix chroot

操作系统层虚拟化是指通过划分一个宿主操作系统的特定部分,产生一个个隔离的操作执行环境。操作系统层的虚拟化是操作系统内核直接提供的虚拟化,虚拟出的操作系统之间共享底层宿主操作系统内核和底层的硬件资源。操作系统虚拟化的关键点在于将操作系统与上层应用隔离开,将对操作系统资源的访问进行虚拟化,使上层应用觉得自己独占操作系统。

为什么现在容器如此流行?

原因之一是docker作为虚拟化平台的兴起。2013年三月发布的docker是一个轻量级容器虚拟化平台,提供用于创建存储,管理和运行容器的工具,并且可轻松与自动构建测试和部署管道相集成。

Docker只是小鲸鱼?🐳

在这里插入图片描述

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker的优缺点

在课程中简述了docker的几大优势:

  • 可移植的运行时应用程序环境
  • 可将应用程序和依赖项打包进单一的不可变构件中
  • 能够同时运行具有不同依赖项的不同应用程序版本
  • 更快的开发和部署周期
  • 提高资源利用率和效率

映像,容器的模板

映像是一个包含容器创建说明的只读模板。正在运行的容器是映像的实例。

你可以有两条路:

从头开始创建映像使用由其他人创建并发布到公有或私有注册表的映像
在这里插入图片描述在这里插入图片描述

一个映象通常在另一个映像的基础上进行了一些自定义。

例如,你可以继续注册表中的Linux印象构建新的映像,但是除了基本配置之外,为使你的应用程序运行,它还会安装web服务器和你所要用到的一些应用程序。

在这里插入图片描述

若要构建新映像,你可以使用简单的语法创建一个docker file,对于定义如何创建并运行印象。docker file中的每条指令都会在印象中创建一个只读层。

代码示例

我们来看几个例子:

  • 例子1

    FROM ubuntu:latest 
    CMD echo "Hello world"
    

    在第一个简单的事例中,你首先使用现有的映像。映像托管在docker hub或其他站点上,您只需添加一个命令容器在启动后输出hello world

  • 例子2

    FROM openjdk:8
    COPY/hello.jar/usr/src/hello.jar 
    CMD java-cp/usr/src/hello.jar o
    rg.example.App
    

    第二段代码是运行JAVA的应用程序。你使用openjdk 8映像开始。将包含代码的jar文件从系统复制到容器中,然调用JAVA来运行代码。对此,容器进行实例化后,它将运行该JAVA应用程序。

  • 例子3

    FROM centos:7
    
    RUN yum-y update && yum -y install httpd 
    
    EXPOSE 80
    
    ADD run-httpd.sh/run-httpd.sh 
    RUN chmod-v +x/run-httpd.sh 
    
    CMD["/run-httpd.sh"]
    

    这是一个更真实的docker flie的例子。你从centos 7映像开始,接下来更新操作系统并安装apache。然后开放端口80。最后复制你的应用程序的shell脚本,并授予他可执行权限。初始化容器后命令会运行该shell脚本。

    补充:
    在这里插入图片描述

    FROM centos:7
    # 我们有软件更新和apache安装的基本层
    RUN yum-y update && yum -y install httpd 
    # 有打开并开放端口80的层
    EXPOSE 80
    # 有复制shell脚本的层
    ADD run-httpd.sh/run-httpd.sh 
    # 还有使shell脚本可执行的层。
    RUN chmod-v +x/run-httpd.sh 
    
    CMD["/run-httpd.sh"]
    

    Docker flie中的每条指令都会创建一个层:

    • 我们有软件更新和apache安装的基本层。
    • 有打开并开放端口80的层。
    • 有复制shell脚本的层。
    • 还有使shell脚本可执行的层。

这些层都是只读的,因此容印象是不可变对象。 如果更改docker file并重建印象,则仅会重建以更改的那些层。与其他虚拟化技术相比,这也是帮助容器印象实现轻量化,小型和快速的因素之一。

  • 在docker的网站上提到了docker的典型场景
    • Automating the packaging and deployment of applications(使应用的打包与部署自动化)
    • Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)
    • Automated testing and continuous integration/deployment(实现自动化测试和持续的集成/部署)
    • Deploying and scaling web apps, databases and backend services(部署与扩展webapp、数据库和后台服务)

Docker镜像操作:

启动docker:systemctl start docker

停止docker:systemctl stop docker

重启docker:systemctl restart docker

查看docker状态:systemctl status docker

相关术语

我们来了解一下相关术语:

容器映像是高度可移植的不可变只读模板,可以将其移植到支持docker的任何环境,也可将其存储在注册表中,以便重复使用。

容器是映像的实例,你可以基于该映像启动一个或多个容器容器。
在这里插入图片描述

对容器进行实例化时,每个容器在其现有映像之上都有一个精简的读/写层。这使得快速启动容器成为可能。

在这里插入图片描述

由于文件系统层的原因,大多数实际工作中其实都是只读的。Docker使用其“写时复制”系统,可以将更改后的文件写入容器的读/写层。底层映像不会发生更改,因此多个容器可以共享对同一底层印象的访问,但同时仍然具有独立的数据状态。删除容器后,该可写层也会被删除。容器的的读写层保证你的应用程序能够在运行时保持正常运行状态,但他并不适用于长期存储数据。要永久保留数据,应将其存储在某处的卷中。也就是说应将容器视为离散计算单元,而不是存储单元。

课后测验

容器和虚拟机之间有什么区别?

A.容器共享底层主机系统的操作系统内核。
B.每个容器都经历一个完整的操作系统启动周期。
C.容器可能需要很长时间才能启动。
D.以上皆是。

答案:A

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

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

相关文章

webpack使用详解

什么是webpack 官方定义:从本质上来说,webpack是一个现代的JavaScript的静态模块打包工具。 webpack是前端工程化的一个解决方案。 主要功能: 提供了前端模块化功能支持,模块混淆,代码压缩,处理浏览器JS兼…

腾格尔发新歌《遥远的地方》,成都邓秀菊自发红包朋友圈寻歌词

随着卡特尔世界杯拉开帷幕,著名音乐人腾格尔,再一次走进大家的视野当中,不过这次却不是因为唱歌。腾格尔是一个音乐人,他更是一个出色的球迷,为了表达对世界杯的喜爱,他还专门拍摄了段子上传网络。 说起音乐…

C++ :Symbol:符号

1:符号的概念 符号(symbol)是在 ELF格式中会遇到的概念,也就是在写汇编代码时候会遇到的,而在更高级语言(C或者C)中不会直接遇到这个概念,我们把讨论的范围限制在 Linux上的ELF格式…

python多分支选择结构实例讲解

多分支选择结构的语法格式如下: if 条件表达式 1 : 语句 1/语句块 1 elif 条件表达式 2: 语句 2/语句块 2 elif 条件表达式 n : 语句 n/语句块 n [else: 语句 n1/语句块 n1 ] 【注】计算机行业,描述语法格式时,使用中…

Word处理控件Aspose.Words功能演示:使用 C# 在 Word 文档中创建条形码

条形码是具有编码数据/信息的平行线、点或矩形形式的图像。行业专业人士使用条形码嵌入和访问产品信息、跟踪产品移动并跟上库存。在某些情况下,我们可能需要在 MS Word 文档中生成和添加条形码。MS Word 是最流行和广泛使用的图形文字处理程序。它用于创建带有文本…

总结:从实模式到保护模式的流程和相关寄存器,相关数据结构之间的联系

总结:从实模式到保护模式的相关寄存器和相关数据结构之间的联系 1.怎么进入保护模式 段描述符 段描述符: 实模式下的用户可以破坏存储代码的内存区域 ,用段描述符来对某一段进行描述内存段类型属性来阻止这种行为。8个字节大小 全局描述…

[附源码]java毕业设计朋辈帮扶系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

HTML基础

文章目录一、HTML结构1、认识HTML标签2、HTML文件基本结构3、标签层次结构二、HTML常见标签1、注释标签2、标题标签3、段落标签4、换行标签5、格式化标签6、图片标签7、超链接标签8、表格标签9、列表标签10、表单标签12、 div & span一、HTML结构 1、认识HTML标签 HTML 代…

光点高校数据中台,助力高校信息化迎来发展新格局_光点科技

数据是教育信息化改革创新过程中的核心资产。从大数据的角度构建高校数据治理体系,支持高校管理信息向智能化服务和教育数字化转型,已成为必然趋势。 然而,高校拥有更大的数据规模、更复杂的数据类型、更密集的数据交换和对数据治理的需求。因…

从各大论坛收集整理的八股文手册,肝完横躺95%的Java面试岗位

今年的秋招很多小伙伴收获不错,拿到了心仪的offer。也有很多小伙伴屡屡碰壁,选择待在舒适区,不过没关系,错过了今年的金九银十,来年的春招再战呗! 最近在各大论坛和社区里看见不少小伙伴慷慨地分享了常见的…

JS正则表达式

文章目录1、创建正则表达式的方式1.1、字面量形式1.2、对象2、正则方法2.1、exec()2.2、test()2.3、可以用于正则的string方法2.3.1、match()2.3.2、replace()补充:$在正则替换中的使用2.3.3、search()2.3.4、split()2.3.5、matchAll()3、边界量词4、模式修饰符5、原…

拷贝构造函数详解

拷贝构造函数详解1.概念与特征2.浅拷贝3.深拷贝4.拷贝构造函数典型调用场景:如果一个类中什么成员都没有,那么该类简称为空类。而空类中其实并不是真的什么都没有,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。构造…

对GROUP BY的增强

使用ROLLUP操作产生求和值使用CUBE操作产生使用GROUPING函数确定该行值是由ROLLUP或者CUBE创建的使用GROUPING SETS生成一个简单的结果集[oracleoracle-db-19c ~]$ [oracleoracle-db-19c ~]$ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Fri Nov 18 10:…

idea2022.2.3版本下载安装配置(包含运行第一个java程序教程)详细步骤

目录 一、下载idea 1.去浏览器搜索idea官网,找到官网 2.选择Download 3.点击左边的Download下载就好了 4.在本地磁盘建一个文件夹,专门用来存放idea软件的 二、安装idea 5.在本地磁盘中的下载里面找到下载的idea并双击打开 6.选择Next ​编辑 7…

【无标题】PCIe收发卡设计资料原理图:611-基于VU9P的2路4Gsps AD 2路5G DA PCIe收发卡

基于VU9P的2路4Gsps AD 2路5G DA PCIe收发卡一、板卡概述 基于XCVU9P的5Gsps AD DA收发PCIe板卡。北京太速科技该板卡要求符合PCIe 3.0标准,包含一片XCVU9P-2FLGA2014I、2组64-bit/8GB DDR4、2路高速AD, 2路高速DA,支持外触发&#xff…

基于单片机的学生视力保护仪

目录 摘 要 1 ABSTRACT 2 第一章 绪论 4 1.1课题的选题背景 4 1.2国内外发展现状 5 1.3本论文主要研究内容 6 1.3.1主要内容 6 1.3.2基本要求 7 第二章 学生视力保护仪总系统设计 8 2.1系统总框图 8 2.2单片机的选择 8 2.3传感器的选择 9 2.4编程语言的选择 9 第三章 系统硬件…

CentOS 7 源码制作ngnx-1.22.1-ipv6 rpm —— 筑梦之路

源码包:http://nginx.org/packages/centos/7/SRPMS/nginx-1.22.1-1.el7.ngx.src.rpm # 安装依赖包yum install http://mirror.centos.org/centos/7/os/x86_64/Packages/pcre2-devel-10.23-2.el7.x86_64.rpm# 安装源码包 初始化项目rpm -ivh nginx-1.22.1-1.el7.ngx…

5G无线技术基础自学系列 | 物理下行控制信道

素材来源:《5G无线网络优化实践》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 2.4.1 PDCCH位置定义 在LTE中&#xff0…

ESP32的AP模式使用

WifiClient 和WebServe有啥区别? (14 封私信 / 1 条消息) httpclient 和webservice有啥区别? - 知乎 (zhihu.com) 1.Webservice两大核心:soap(理解为要传输的数据)、wsdl(理解为传输数据xml的说明) soap xml ht…

Java类变量和类方法(static)

文章目录类变量-提出问题类变量内存布局如何定义类变量如何访问类变量类变量使用细节类方法介绍类变量-提出问题 提出问题的主要目的就是让大家思考解决之道,从而引出我要讲的知识点. 说:有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在共有…