亚马逊云科技--《容器入门》学习笔记|从现实世界走进虚拟世界//容器何以与微服务成为「好搭档」

前言

带着对技术学习的兴趣,打开了推荐的《容器入门》的课程,想对容器有一个基础的了解,一口气炫完课程。

先简单说一下学习感受,内容通俗易懂,从容器历史出发,带着讲故事的趣味性,让我感受到学习的乐趣同时也逐渐进入学习的状态。这种渐入佳境的学习感觉还是很赞的。

整个课程的内容不是特别多,但是关于容器的基础知识点、特定技术和在微服务架构中的重要性,讲的很明白。

课程介绍

6ce1d3bb628b4934a2996830011cd85f.png课程讲解的十分通俗易懂 课程归纳的也很好


正文:

接下来分享我再学习过程中和产出的学习笔记

首先什么是容器?

当我们将某个东西称之为容器时这代表什么意思?

虽然容器听起来像是一个通用术语但要知道它对航运业有着巨大的影响

7e6ca955908e48948e0cb94840d89c21.png

历史的演变--现实世界

相似的事物通过归纳总结,总能找出规律,容器也不例外。

举个例子:

不久前,将实际货物从 A 点运到 B 点还是一项挑战,货物可能奇形怪状有些能放稳,有些放不稳。通常,人们必须用人力将货物装载到这些器皿中,在器皿中装满货物之前,人们不知道其中能装下多少货物。货物的运输速度慢,效率低下,成本高昂。然后就出现了集装箱。集装箱的标准化始于 18 实际,并持续了 200 年一直到 1958 年当时 Malcolm Mclean 和 Keith Tentlinger 为目前的国际航运集装箱申请了专利`。标准化集装箱改善了船舶上的货物装卸,此外,他还提供了一致,可预测的存储单元可以方便地转移到卡车或铁路运输。将重点放在集装箱而不是单件货物上,我们提高了效率,提高了生产力同时还大大降低了消费者的成本。

随着历史的演进,集装箱的出现,改善了船舶上货物的装卸。提高了效率降低了成本。

7d1dfb15ba094122ae2f3315e89de533.png

随着历史的演进,集装箱的出现,改善了船舶上货物的装卸。

使用集装箱的好处有

  • 提供了可预测的存储单元
  • 将重点放在集装箱而不是单件货物上,不仅提高了效率还提高了生产力同时还降低了消费者的成本

aa78ee15ab4147d98da5f2a967e66e55.png 755cc079acd24a4aae32a213384c322e.png

现在从现实世界回到虚拟世界


回到虚拟世界

在计算平台中,容器时一种标准化的软件单元可在运行容器化平台的任何计算环境中快速可靠地运行,容器是在操作系统级别实施的一种形式的虚拟化,容器是独立的轻量级软件包其中包括运行应用程序所需的一切。

例如:代码,系统工具,系统库和设置。

 

一台服务器可以托管多个容器,这些容器可以是大型企业应用程序中的服务也可以是隔离环境中运行的独立应用程序。

 这种图片可以更加具象的了解容器所包含的内容


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

  虚拟化分类

 ​​​​​​​

 随着技术的成就水平通常伴随着抽象水平的提高使用裸机服务器,人们可以构建架构层

例如:

  • 基础设施的应用程序软件层
  • 在服务器硬件上安装操作系统在该操作系统上安装所有共享库然后再安装使用这些库的应用程序,然后再安装使用这些库的应用程序

这种方式持续了很长一段时间这种架构的问题在于效率极低,无论你是以 0% 的利用率还是以 100% 的利用率运行硬件成本都是相同的并且您必须使所有应用程序保持同步如果一个应用程序需要库的更新版本但主机上运行的其他应用程序不兼容这个版本这是就会遇到问题。您可以通过在操作系统上放置虚拟化平台来提高敏捷性。现在您已经使用虚拟机自带的完整操作系统隔离了应用程序及其库这样你可以使用现在的硬件运行更多的虚拟机从而大大减少了物理占用空间不过虚拟机的坏处就是含有非常多的虚拟化层。在虚拟机实例中,主机上现在有四个操作系统而不是一个这意味着需要更多的补丁和更新同时在物理主机上占用了更多的空间。此外,还有很严重的宂余,可能将相同的操作系统安装了四次,也可能将相同的库安装了三次。我们可以做的更好然后我们就引入了容器。

容器运行时共享操作系统内核让您能够使用文件系统层创建容器镜。容器具有轻量级,高效,快捷的特点与虚拟机相比,容器的启动和关闭速度更快  从而可以更好的利用基础硬件您可以按需共享库也可以为不同的应用程序提供不同的库彼此互不影响而且容器高度可移值 由于容器将软件与其他层隔离开来因此各软件的代码可以在不同的环境中无差别地进行


容器化不是一个全新的概念!,它经历了一系列的演变。

 ​​​​​​​

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

为什么容器现在如此受欢迎?

原因之一:就是将 Docker 作为虚拟化平台的兴起

为什么将 Docker 作为虚拟化平台 ?

28d80a520901401b807c454d29cddf3b.jpg

Docker 于 2013 年 3 月发布

  • Docker 是一种轻量化容器虚拟化平台
  • 可提供用于创建,存储,管理和运行容器的工具
  • 轻松与自动构建,测试和部署管道相集合

Docker 具有以下一些最重要的优势

  • Docker 可移植的运行时应用程序环境
  • 可将应用程序和依赖项打包进单一的不可变构件中(称为映像)创建容器映像后,可以将其用于支持 Docker 的任何地方
  • 能够同时运行具有不同依赖的不同应用程序版本
  • 更快的开发和部署周期
  • 提高资源利用率和效率

这其中许多功能都是开发者梦寐以求的所有这一切的一切回归到了敏捷性


容器背后的许多工作都来自容器映像这一概念,映像是一个包含容器创建说明的只读模板,您可以从头开始创建映像或使用由其他人创建并发布到共有或私有注册表的映像一个映像通常在另一个映像的基础上进行了一些自定义。

例如:

你可以基于注册表中的 Ubuntu Linux 映像构建新的映像。但是,除了基本配置之外为了使您的应用程序运行它还会安装 web 服务器和您的应用程序若要构建新映像,您可以使用简单的语法创建一个 Dockerfile 用于定义如何创建并运行映像。Dockerfile 中的每条指令都会在映像中创建一个只读层。

示例:Dockerfile

简单示例 :---输出结果为“Hello world”

FROM ubuntu:latest
CMD echo "Hello world"

复杂示例 :

FROM openjdk:8
COPY /hello.jar /usr/str/hello.jar
CMD java -cp /usr/src/hello.jar
org.exemple.App

Docker 示例:

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

 这些层都是只读的因此容器映像是不可变对象,这也是帮助容器映像实现轻量化小型和快速的因素之一


相关术语:
Docker 镜像与容器

  • 容器映象是高度可移植的不可变只读模板,可以将其移植到支持 Docker 的任何环境,也可将其存储在注册表中以便重复使用。
  • 容器是映射的示例,可以基于该映像启动一个或多个容器。每个容器在其现有映像之上都用一个精简的读/写层。这使得快速启动容器成为可能。
  • 多个容器可以共享对同一底层映像的访问,但同时仍具有独立的数据状态。
  • 删除容器后,该可写层也会被删除。
  • 容器的读/写层使您的应用程序能够在运行时保持正常运行状态。

dbb4c02e8ef24fe08e31a69b756576dc.png

 44dd3af2bcf149be88a2e65dee5404fe.png

使用“写时复制”系统将更改后的文件写入容器的读/写层。

因此,多个容器可以共享对同一底层映像的访问但同时仍然具有独立的数据状态删除容器后,该可写层也会被删除。容器的读/写层使您的应用程序能够在运行时保持正常运行状态但它并不适用于长期存储数据要永久保留数据,应将其存储在某处的卷中,应将容器视为离散计算单元,而不是存储单元。


什么是微服务?

这几年微服务一词逐渐引起开发者们的兴趣和探讨,那么什么是微服务呢?

微服务是一种软件开发的架构和组织方法,旨在加快部署周期。

微服务相较传统架构,可以促进创新和所有权,提高软件应用程序的可维护性和可扩展性。

如图,传统架构和微服务架构的对比:

2669412052cf4338bd6f530540c29aa3.png

97b18785f4e14f9aada513f74f6a63a8.png

先来看传统架构

对于每个应用程序,所有进程紧密耦合,这意味着,如果应用程序的一个进程遇到需求峰值,则必须扩展整个结构。随着代码库的增长,添加或改进功能变得更加复杂。这不仅限制了实验,还让实现创意变得困难

整体架构还增加了应用程序可用性的风险。因为许多相互依赖和紧密耦合的进程,扩大了单个进程失败的影响。而且不难看出不同应用程序之间,在功能上有很多 冗余之处

现在来看微服务架构

如图,一共运行了三个相同的应用程序。每个应用程序都构建成为一个可作为服务运行的独立组件。并使用轻量级 API 操作进行通信。每个服务执行一个可支持多个应用程序的功能。所用服务都独立运行。因此可以对服务进行更新、部署和扩展以便满足对特定应用程序功能的需求

还可以从专业服务器迁移到抽象硬件层,在抽象硬件层可以根据性能和弹性等需求智能地放置微服务。所有这些分解带来了更快的迭代、自动化和整体敏捷性。支持快速启动、快速失败和快速恢复


微服务环境有哪些优势?

容器通常与微服务环境相关

推动容器发展的最强有力的因素之一时微服务架构的兴起,微服务是一种软件开发的架构和组织方法旨在加快部署周期这种方法能够促进创新和所有权提高软件应用程序的可维修性和扩展性

  • 每个应用程序都构建成为一个可作为服务运行的独立组件并使用轻量级 API 操作进行通信
  • 每个服务执行一个可支持多个应用程序的功能,使用服务都独立运行

 微服务的特征

  • 采用分散式的革新设计
  • 智能终端节点,哑管道
  • 采用独立产品形式,而不是项目形式
  • 面向故障的设计
  • 可弃性
  • 兼顾开发与生产


微服务架构中容器的重要性,在做了上面的了解之后,我们就明白为什么容器和微服务是「好搭档」

  • 容器是支持现代微服务架构的基础技术。
  • 将微服务放置到容器中。容器占用的空间更少,启动速度也更快。借助微服务架构,开发人员可以充分利用容器。
  • 去中心化的革新设计,每个容器都使用最适合服务运行的语言和技术,而不是要求用户使用特点的语言或特定的技术。

总结

小结:

  • 容器是是一种标准化软件单元。它可在运行容器化平台的任何计算环境中快速可靠的运行。是操作系统级别实施的一种形式的虚拟化。
  • 相较于其他虚拟化的方式,容器拥有轻量级、高效,启动和关闭速度快,按需共享库、更加灵活,可移植度高等优点。
  • Docker 容器,一种轻量级容器虚拟化平台。可以提供创建、存储、管理和运行容器的工具。具有高效移植、同时运行不同依赖不同版本的应用、缩短开发周期、提升资源利用率等优点。
  • 微服务是一种软件开发的架构和组织方法,旨在加快部署周期。
  • 容器和微服务是「好搭档」。容器是支持现代微服务架构的基础技术。将微服务放置到容器中。容器占用的空间更少,启动速度也更快。借助微服务架构,开发人员可以充分利用容器。
     

个人感受:

通过这次亚马逊云科技云原生课程的学习,我认识到了容器,知道了容器的重要性以及它的作用性多么大,以及学习到了微服务架构的特点,以及它和单体架构的区别在哪,以及为什么说容器是支持现代微服务架构使用的基础技术。

内容通俗易懂,从容器历史出发,带着讲故事的趣味性,让我感受到学习的乐趣同时也逐渐进入学习的状态。

猜你喜欢

转载自blog.csdn.net/weixin_73636162/article/details/127927065
今日推荐