前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >容器学习 | 从船舶运输的发展史说起,容器何以与微服务成为「好搭档」

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

作者头像
叶一一
发布2023-03-31 15:21:53
2980
发布2023-03-31 15:21:53
举报
文章被收录于专栏:趣学前端趣学前端

前言

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

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

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

课程介绍图

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

容器

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

什么是容器?

历史的演变

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

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

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

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

容器简介

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

容器内容图

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

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

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

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

虚拟化分类

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

虚拟化分类对比

三者的优缺点对比如下:

类型

缺点

优点

裸机服务器

1.所有应用程序需要保持同步,不一致时会导致报错; 2.物理空间占用较多、利用率低。

复杂性低

虚拟机

1.虚拟化层较多,导致更新和补丁数量增多; 2.冗余增加,相似的操作系统需要多次安装。

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

容器

1.轻量级、高效; 2.启动和关闭速度快; 3.按需共享库,更加灵活; 4.可移植度高

复杂性增加

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

容器化

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

Docker

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

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

Docker 优势

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

Docker 代码示例

简单示例

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

代码语言:javascript
复制
FROM ubuntu:latest 
CMD echo "Hello world"

复杂示例

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

代码语言:javascript
复制
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 脚本。

代码语言:javascript
复制
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 中的每条指令都会创建一个层。这些层都是只读的,因此容器映像是不可变对象。与其他虚拟技术相比,这也是帮助容器映像实现轻量化小型和快速的因素之一。

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

Docker 镜像与容器

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

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

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

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

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

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

什么是微服务?

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

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

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

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

先来看传统架构。

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

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

现在来看微服务架构。

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

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

微服务特性

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

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

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

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

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

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

总结

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

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

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

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


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 课程介绍图
    • 容器
      • 什么是容器?
        • 历史的演变
        • 容器简介
      • 容器与其他形式的虚拟化的区别?
        • 虚拟化分类
        • 虚拟化分类对比
      • 容器化
        • Docker
        • Docker 优势
        • Docker 代码示例
        • Docker 镜像与容器
      • 为什么说容器在微服务架构中是重要的?
        • 什么是微服务?
        • 微服务特性
        • 微服务架构中容器的重要性
    • 总结
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档