浅谈容器技术 - 为什么需要容器技术,它解决了什么问题?

我们在谈的容器到底是什么

  • Docker 官网
    我们先来看一下一张来自docker官方网站的载图:
    点击Docker Guide可进入官方指南。
    Docker Container
  • Containerd 官网
    下面是一张来自于ContainerD官网的载图:
    Containerd官网
    Containerd首页
    这两张图,或者说这两个网站,有一个共同的特点:他们都有提到一个英文单词:container,翻译过来也就是“容器”。

我们今天要探讨的就是“容器”这个东西。

what is a container?

我们先来看一下来自于剑桥英-英词典的解释:
container
noun [ C ]
UK /kənˈteɪ.nər/ US /kənˈteɪ.nɚ/

  • a hollow object, such as a box or a bottle, that can be used for holding something, especially to carry or store it

  • 一个空心的东西,比如一个箱子或瓶子,它可以用来装载东西,尤其是用来携带或存放它。

  • a very large metal box used for transporting goods

  • 一个用于运输货物的非常大的金属盒子

翻译为中文,就是“容器”或“集装箱”了。

container-cambridge.org
从词典的解释我们知道了以下两个核心的点:

  • 装载东西(holding something)
  • 运输东西(carry or transport)

我们用两个现实生活中的例子,来讲一下容器的几个好处:

  • 方便
    救火车去救火的时候,需要装一大水箱的水,并且将车开到失火现场,也就是将水运输到失火现场,然后开展救援行动。没有一个大水箱,我们就无法将水方便的运输到失火现场。所以使用大水箱,是为了方便。
  • 打包
    试想一下,我们去大型超市买新鲜的水果,比如像葡萄,奇异果,水蜜桃,我们会发现通常他们都是被箱子装好,堆叠起来,我们几乎不会看到几十个散装水蜜桃堆在一起的情况。

这些水果比较脆弱,所以会将他们用包装盒包装好,一是起到了保护的作用,二是容易搬运和整理。

为什么需要容器技术

作为一个软件工程师,或者说从事软件相关工作的小伙伴,我们每天都会和我们自己开发、设计的应用软件打交道。

  1. 编写代码
  2. 编译构建
  3. 部署到开发、测试环境
  4. 进行联调或测试
  5. 部署到生产环境

这只是列出了几个核心的步骤,但这里涉及几个关键点:

  • 我们编译好的应用需要部署
  • 需要部署到不同的环境

应用就好比是需要运输的货物,而不同的环境就好比是不同的目的地。
而在这个运输(部署)过程中,我们需要保证环境的一致性,才能确保我们的应用程序在不同的环境中的行为是一致的。

为什么开发环境没问题,上了生产就有问题了?

开发的小伙伴们可能经常遇到这样的场景,我开发好好的呀,为什么生产就出问题?
究其原因,就是开发环境和生产环境不一致造成的。
不一致体现在很多的方面:

  • 数据不一致
  • 配置不一致
  • 流量、负载不一致
  • 运行时环境不一致

数据不一致,特殊的场景,可能需要从生产环境导出相关数据(必要情况下需要数据脱敏),在UAT环境进行难。
配置不一致,可能是某个开关,参数,接口地址。
流量、负载不一致,一般需要通过压力测试来验证。
运行时环境不一致,比如开发、测试使用的是JDK21,而生产环境可能是JDK 8。

像上面提到的配置不一致,运行时环境不一致,都可以通过容器技术来解决。

容器技术怎么解决不一致问题?

一个应用,从开发到部署,一般大致经过以下几个环节
编码->构建->准备服务器->安装操作系统->安装JRE环境->安装依赖组件->部署应用->修改配置->开能防火墙->启动->功能验证。

当我们申请到服务器后,是不是得安装操作系统?安装什么样的操作系统?操作系统上是不是得配置基本的系统监控,是不是得做好权限控制?是不是还有内核参数的调整?安装好操作系统后,是不是得安装运行时环境,比如说Java运行时环境,Python运行时环境。后面还有配置修改,连通性测试等等。这一切都需要人为操作,而但凡有人为操作的地方,就必然会出现纰漏,就会导致问题。

而容器技术,可以将操作系统、运行时环境、配置、内核参数统一起来,打包为一个镜像,就能保证应用,环境的一致性了。

我们可以简单的理解为:操作系统安装,运行时环境的准备、配置、内核参数的调整,这些人为的操作,在不同的环境我们只需要做一次,然后将这些操作打包成一个整体,而不同的环境,拿到的都是同一个整体的副本,自然就保证了一致性。

我们可以把容器(镜像)比作为XBox 360的游戏CD,而不同环境比作是不同家庭的XBox360主机,每一们玩家手中的游戏CD都是一样的,这个CD就是方便分发游戏的载体。

容器和CD
简单来讲,针对不同的环境,只需要进行一次操作,并打包为一个整体,传播副本,就能保证环境的一致性。

容器技术的好处

文章写到这里,我们已经对容器技术有了一个非常初步的认识,他解决了我们应用开发部署的一个痛点:环境一致性问题。

容器技术现在之所以这么受欢迎,还有其它的几个原因:

  • 轻量级:相比虚拟机,容器更轻量级,因为它们共享主机操作系统的内核,而不是每个容器都有自己的操作系统。
  • 快速部署:容器可以快速启动和停止,使开发人员能够更快速地部署和测试应用程序。
  • 环境一致性:容器提供了一个一致的运行环境,确保在开发、测试和生产环境之间的应用程序行为一致。
  • 资源利用率高:由于容器共享主机内核和其他系统资源,因此它们可以更有效地利用硬件资源,使得在一台物理主机上运行更多的容器成为可能。
  • 隔离性:容器提供了一定程度的进程隔离,使得在同一台主机上运行的容器之间相互隔离,从而降低了安全风险。

搞清楚为什么之后,我们后面将带大家一起来探究容器技术背后的原理。希望感兴趣的小伙伴一起交流和沟通。

关注我的公众号

欢迎大家关注我的公众号,一起交流软件开发、架构设计、云原生技术
TXZQ聊IT技术与架构

猜你喜欢

转载自blog.csdn.net/u011278722/article/details/138299995