从船舶运输的发展史说起,容器何以与微服务成为「好搭档」【容器学习】

举报
叶一一 发表于 2023/12/28 10:20:35 2023/12/28
【摘要】 前言带着对技术学习的兴趣,打开了推荐的《容器入门》的课程,想对容器有一个基础的了解,一口气炫完课程。先简单说一下学习感受,内容通俗易懂,从容器历史出发,带着讲故事的趣味性,让我感受到学习的乐趣同时也逐渐进入学习的状态。这种渐入佳境的学习感觉还是很赞的。整个课程的内容不是特别多,但是关于容器的基础知识点、特定技术和在微服务架构中的重要性,讲的很明白。课程介绍图课程介绍中对课程内容归纳的很好。容...

前言

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

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

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

课程介绍图

课程介绍中对课程内容归纳的很好。

4-1.png


容器

接下来分享我再学习过程中,产出的学习笔记。三个标题,带着三个问题,我们一起来探索一下容器世界里有哪些知识点。

什么是容器?

历史的演变

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

从船舶运输货物讲起,早起盛放货物的容器,船员在完全装满船只之前无法得知到底能装下多少货物。这使得效率低下,运输成本增加。

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

通过现实世界中容器的演变历史,来总结一下计算平台中的容器。

容器简介

容器是一种标准化软件单元。它可在运行容器化平台的任何计算环境中快速可靠的运行。是操作系统级别实施的一种形式的虚拟化。

容器内容图

4-2.png

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

容器是独立的轻量级软件包,包括运行应用程序所需要的一切。例如代码、系统 工具、系统库和设置等。

容器可以是在大型企业应用程序中的服务,也可以是在隔离环境中运行的独立应用程序。

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

虚拟化分类

课程中列举的其他形式的虚拟化主要有裸机服务器和虚拟机,如下图是三者的对比:

4-3.png

虚拟化分类对比

三者的优缺点对比如下:

类型

缺点

优点

裸机服务器

1.所有应用程序需要保持同步,不一致时会导致报错;

2.物理空间占用较多、利用率低。

复杂性低

虚拟机

1.虚拟化层较多,导致更新和补丁数量增多;

2.冗余增加,相似的操作系统需要多次安装。

利用率较高,且物理空间占用较少

容器

1.轻量级、高效;

2.启动和关闭速度快;

3.按需共享库,更加灵活;

4.可移植度高

复杂性增加

这个对比,是跟着课程讲解总结的,如果有不正确的地方欢迎指正。


容器化

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

4-4.png

Docker

Docker 容器,一种轻量级容器虚拟化平台。可以提供创建、存储、管理和运行容器的工具。

轻松与自动构建、测试和部署管道相集成。

Docker 优势

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

Docker 代码示例

简单示例

容器启动后会回显 "Hello world"

FROM ubuntu:latest 
CMD echo "Hello world"


复杂示例

下面这段代码演示如何运行 Java 应用程序。从使用OpenJDK 8映像开始,将包含代码的.jar文件从系统复制到容器中,对此容器进行实例化后,它将运行该 Java 应用程序。

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

Dockerfile 示例

下面这段代码是一个更为真实的 Dockerfile 示例,从 CentOS 7 映像开始,进入更新操作系统并安装 Apache的步骤,最后复制应用程序的 Shell 脚本并授予它可执行权限。

实例化容器后,命令会运行该 Shell 脚本。

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"]

这里展示了分层形式,Dockerfile 中的每条指令都会创建一个层。这些层都是只读的,因此容器映像是不可变对象。与其他虚拟技术相比,这也是帮助容器映像实现轻量化小型和快速的因素之一。

4-5.png

OpenJDK相关知识点可以看这篇文章

Docker 镜像与容器

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

容器是映射的示例,可以基于该映像启动一个或多个容器。每个容器在其现有映像之上都用一个精简的读/写层。这使得快速启动容器成为可能。

多个容器可以共享对同一底层映像的访问,但同时仍具有独立的数据状态。

删除容器后,该可写层也会被删除。

容器的读/写层使您的应用程序能够在运行时保持正常运行状态。

4-6.png

为什么说容器在微服务架构中是重要的?

什么是微服务?

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

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

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

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

4-7.png

先来看传统架构。

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

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

现在来看微服务架构。

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

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

微服务特性

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


微服务架构中容器的重要性

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

容器是支持现代微服务架构的基础技术。

微服务放置到容器中。容器占用的空间更少,启动速度也更快。借助微服务架构,开发人员可以充分利用容器。

去中心化的革新设计,每个容器都使用最适合服务运行的语言和技术,而不是要求用户使用特点的语言或特定的技术。

总结

先来对今天的笔记做个小结:

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

对容器的学习暂时告一段落,希望未来有机会可以通过学习提升更多有关容器的技能。

将收获转化成知识进行传播,也希望能够每一个阅读者带去帮助。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。