容器技术发展史

在互联网行业,我们必然会接触到 “容器技化技术” 的,尤其是在 “应用部署” 这一块(一般会使用 docker-swarm k8s 去管理),而这些工作都由相关的运维人员去操作。但是作为开发者,我认为还是很有必要去学习运维相关的知识的,特别是 “容器化技术” 这一块,本文来简单的闲聊一下。

容器技术发展史
容器化技术

02 容器化由来

也许我们都会想,为啥会有 容器化 这个概念呢?下面我们来看看是怎么衍生这个概念的。

2.1 物理机时代

以 Windows 为代表的时代:很久以前,在物理机时代,如果我们要部署一个应用,在一开始,会在 PC 物理机上搭建环境(如:java的环境、maven环境等),然后手动打包应用,再手动启动应用,这一系列的操作都是手动的,相当麻烦。

容器技术发展史
以Windows为代表的时代

2.2 虚拟机时代

以 VMWare 为代表的时代:为了节省时间,提高效率,聪明的项目经理就提出了一些需求,他们希望能做到如下的一款软件,需求如下:

  • 这是一款虚拟机软件,搭载在物理机上的;
  • 虚拟机软件的功能就是跟物理机的功能一模一样,包括环境;
  • 跟物理机一样,可以在虚拟机上安装操作系统,然后在操作系统安装相应的应用部署环境,比如:安装 Windows环境,然后在 Windows 环境安装 maven 、 jdk 等;
  • 虚拟软件里面装的系统镜像可以随意的克隆,相当于复制一套环境了。

上述的描述,我们可以看到如果使用了虚拟机,我们可以快速复制虚拟机里面的镜像,直接在另外一套虚拟机软件就能使用了,确实提高了效率,但是!这是很耗资源的,因为这款虚拟机里安装的是一整套操作系统软件

容器技术发展史
以vmware为代表的时代

2.3 容器化时代

以 Docker 为代表的时代 :可以看出虚拟机是很 “” 的,为了解决这个问题,聪明的攻城狮提出了容器化的概念,那么容器化要做到什么地步?

  • 当然要比虚拟机做得更“轻”
  • 也要比虚拟机做得更“快”
  • 功能也要更强,比如:有 标准化的迁移方式、统一的参数配置、自动化部署、应用集群监控、开发与运维之间的沟通桥梁 等等。

下图是 “虚拟化技术” 与 “容器化技术” 的对比:

特性 虚拟机 容器
隔离级别 操作系统级 进程级别
隔离策略 Hypervisor CGroups
系统资源 5%~15% 0%~5%
启动时间 分钟级 秒级
镜像存储 GB-TB KB-MB
集群规模 上百 上万
高可用策略 备份、容灾、迁移 弹性、负载、动态

虚拟化技术:

容器技术发展史

容器化技术:

容器技术发展史

03 容器化发展

说到 容器化,必然会联系到 云原生,他们的关系是彼此依赖的。

容器技术催生了云原生思潮,云原生生态推动了容器技术发展

云原生技术

  • 云原生技术有利于各组织在 公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用
  • 云原生的代表技术包括 容器、服务网格、微服务、不可变基础设施和声明式API

借用百度的一张图来说明容器技术和云原生诞生的历史背景:

容器技术发展史
容器技术和云原生诞生的历史背景

可以看到在 2013 年的 Docker,到 2014 年 Kubernetes 的项目发布,直接让容器技术逐步席卷天下,容器技术开始和编排系统起头并进。

有了容器化技术的技术支撑,2015年由 Google,Redhat、Microsoft 及一些大型云厂商共同创立了CNCF,云原生浪潮启动。

到现在的 202x 年,可以看到容器服务商业化,容器引擎技术飞速发展,新技术不断涌现,不断的升级,Kata Containers 开始2.0架构,阿里云发布沙箱容器2.0….

容器化技术的发展大致可以分为如下几个历史阶段(借用百度图片):

容器技术发展史
容器化技术的发展

04 容器化技术

说到容器化技术,最贴近我们日常开发运维的便是 “docker”、“docker-compose”、“docker-swarm”、“Kubernetes(k8s)这几个概念,下面我们看看这几个技术的含义,以及他们之间的关系。

4.1 docker

docker 是容器化的一个工具,它的思想是“集装箱”,何为集装箱?(下图是在百度图片搜的一张图)

容器技术发展史
Docker架构

在上图,我们可以看到在 docker 守护进程即 docker daemon 里面,有一个 containers 容器,容器里面有很多个“集装箱”,我们只要把我们的 Images 镜像放入“集装箱”里,然后用户只要在客户端 client 里运行 docker 命令即可操作我们的镜像了,而这些镜像可以放到仓库 registry,以供其他用户使用,非常方便移植。

对于用户来说,可以看到 docker 有如下的功能:

  • 更加关注容器能做什么,无需关心里面有什么;
  • 有一套工具(如上图的client) 来管理:打包 -> 运输 -> 运行
  • 减少了部署单元的数量,从而减少了花销:即多个工具(集装箱)聚集在一个“容器”内;
  • 多个环境管理与隔离:以“容器”为单位进行部署和管理。

总结:可以说大部分容器技术都是以Docker为基础,它是我们使用其他容器技术的核心

4.2 docker-compose

既然有了 docker 为基础,我们就可以使用容器化技术了,但是现在很多的线上环境都不是单机的了,大多数会分布式或集群,那么我们需要部署多个容器,比如docker中有成百上千的容器需要启动,如果我们一个一个容器的手动去启动,那该多耗时间。

这个时候,docker-compose 就出来了,它只要配置一个文件,在文件里声明好要启动的容器,docker 就会按照声明的配置去把所有的容器启动起来。

比如使用 docker-compose up 命令 即可以启动所有的容器

总结:docker-compose 就是一个容器管家,负责帮你启动所有配置的容器

容器技术发展史
docker-compose

4.3 docker-swarm

其实docker-compose 有一个缺陷,就是只能管理当前主机上的 docker,而不能去启动其他主机上的 docker 容器,那该怎么办呢?

这个时候 docker-swarm 出现了,它可以管理 多主机 上的 docker,而这些东西是 docker-compose 做不到的。

docker-swam 可以启动容器、监听容器状态、保证容器的高可用,同时也保证服务间的负载均衡。

总结:docker-swarm 就是一个 docker-compose 的升级版,支持多主机并增添和很多的多主机场景下的功能。

容器技术发展史
docker-swarm

4.3 k8s

Kubernetes简称 k8s ,它的功能与 docker-swarm 差不多,都是一个 跨主机的容器管理平台 ,我们日常的运维开发,可以使用 k8s 或者 docker-swarm 。

他们之间的主要区别就是研发的公司不同。

– docker-swarm 是 docker 公司研发的

– k8sGoogle公司根据自身的多年的运维经验研发的一款容器管理平台

总结:k8s 与 docker-swarm的功能差不多,主流比较推荐使用 k8s ,毕竟是大公司研发的,但是使用docker-swarm也是没问题的。

容器技术发展史
k8s

05 小结

通过阅读本文,我们可以了解到:

– 容器化概念的产生经历了:物理机 -> 虚拟机 -> 容器化的发展;

– 容器化与云原生的关系:容器技术催生了云原生思潮,云原生生态推动了容器技术发展;

– 容器化技术的核心是 docker ,在 docker 的基础上发展了容器管理平台:单机版的 docker-compose -> 跨主机的 docker-compose -> 跨主机的 k8s

主要从一个浅层的角度去漫谈容器化技术的相关概念,从而让我们有一个感性的认知。接下来博主打算继续编写相关的实操文章,文章内容涉及 docker 基础、docker-swarmk8s的搭建与使用

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/292140.html

(0)
上一篇 2022年10月30日 10:56
下一篇 2022年10月30日 11:03

相关推荐

发表回复

登录后才能评论