Docker 和 Kubernetes:容器化时代的崛起与演变

news2024/12/23 3:42:05

在过去的十年间,容器化技术彻底改变了软件开发和部署的面貌。
Docker 的登场无疑是这场变革的催化剂,它将应用和服务的打包、分发、部署流程标准化,让开发者的生活变得更加简单。
紧随其后,Kubernetes 作为容器编排的领军者,它不仅极大地增强了容器的管理能力,更成为了云原生理念下不可或缺的组成部分。
本文将探讨 Docker 和 Kubernetes 的前世今生,它们之间的紧密联系,以及随着时间演进这两大技术所经历的演变。

容器化的崛起

背景和影响:

在理解 Kubernetes 弃用 Docker 之前,我们需要先回溯到容器化技术的发展历程。

  • 容器技术允许开发者打包应用及其依赖项到一个轻量级的、可移植的容器中,并在任何支持容器的系统上以一致的方式运行它们。
  • Docker 到来之前,虚拟机(如 VMware 和 VirtualBox)是主要的隔离手段,但容器化提供了更高效的资源利用率,因为它不需要为每个应用提供一个完整的操作系统。

容器化技术的鼻祖是 Linux 容器(LXC),它提供了一种轻量级的隔离方式,使得应用可以在隔离的环境中运行。
然而,LXC 的使用并不友好,直到 Docker 的出现,容器化才真正进入了主流视野。

Docker 提供了易于理解的接口,隐藏了容器管理的复杂性,使得打包、分发、运行应用程序变得前所未有的简单。
Docker 的出现,不仅推动了开发和运维(DevOps)文化的发展,而且催生了一系列基于容器的工具和服务。

 

根据 2021 年的 Sysdig 报告,93% 的容器化实例运行在 Docker 上,这显示了 Docker 在容器运行时的主导地位。

案例研究:

Netflix 是容器化技术的早期采用者,他们使用容器来支持其全球流媒体服务的快速部署和伸缩需求。
Netflix 的经验表明,容器化可以帮助企业在全球范围内快速扩展服务。

Kubernetes 的诞生

Google 有着丰富的容器管理经验,它内部的 Borg 系统可以说是 Kubernetes 的前身。
Borg 系统极大地影响了 Kubernetes 的设计,特别是在大规模集群管理、自动修复和部署方面。

2014 年,Google 发布了 Kubernetes,一个开源的容器编排平台,旨在解决在生产环境中自动部署、扩展和操作容器化应用的问题。
随着 2015 年 Kubernetes 1.0 版本的发布,它很快成为了业界领先的容器编排平台。

 

Docker 和 Kubernetes 的结合

初期的 Kubernetes 是围绕 Docker 构建的,因为当时 Docker 已经成为了业界容器格式和平台的事实标准。

早期版本的 Kubernetes 直接调用 Docker 作为其容器运行时,依赖 Docker 来创建、启动和停止容器等。
这种深度集成确保了 Kubernetes 能够利用 Docker 提供的强大能力,如镜像管理和容器生命周期管理,同时也使得在 Kubernetes 上部署基于 Docker 的应用变得简单方便。

互补关系:

  • Docker 提供了一个方便的容器格式和运行时,而 Kubernetes 提供了容器编排。两者配合,能够提供一个完整的解决方案来管理容器化应用。

转折点:

  • Kubernetes 的一个关键转折点是在 1.2 版本引入的 Deployment 对象,它简化了滚动更新和回滚策略的实施。

Kubernetes 的发展和对多运行时的支持

技术转变:

  • CRI 的引入使得 Kubernetes 能够支持多种容器运行时,这包括 Docker、containerd、CRI-O 等。

随着 Kubernetes 的不断成熟和社区的迅速壮大,它开始支持更多的容器运行时,不再仅限于 Docker。

这种变化始于 Kubernetes 1.5 版本,其中引入了多个关键特性,增强了系统的可扩展性和灵活性。
Kubernetes 开始支持如 rkt 这样的其他容器运行时,这是通过新增的容器运行时接口(Container Runtime Interface, CRI)实现的。
CRI 定义了一个标准的接口,使得 Kubernetes 可以插拔式地支持不同的容器运行时。

CRI 的引入是一个重要的转折点,因为它标志着 Kubernetes 从一个只支持 Docker 到支持多种容器运行时的过渡。
这个新的架构抽象允许 Kubernetes 不必知道底层容器是如何运行的,而只需要与符合 CRI 的运行时进行交互。
这不仅为 Kubernetes 的未来发展打开了新的可能性,也为整个容器生态系统的多样性铺平了道路。

Kubernetes 引入 CRI 后,持续吸引了更多的贡献者,体现了其不断增长的社区活力,GitHub 上 Kubernetes 相关项目的 Star 数量也在稳步上升,这表明了社区的活跃度和项目的流行度。

Kubernetes 弃用 Docker 的真相

进入 1.20 版本后,Kubernetes 宣布弃用对 Docker 的支持,这引发了广泛的关注和讨论。需要强调的是,Kubernetes 并没有弃用容器本身,而是弃用了 Docker 作为容器运行时的中间层,即 Docker shim。

这一决定背后有多方面的原因,首先是 Docker shim 在设计上存在局限性,它不直接实现 CRI,而是通过另一个适配层与 Kubernetes 通信,这增加了额外的复杂性和维护成本。此外,其他如 containerd 和 CRI-O 这样的容器运行时更为轻量级,更直接地实现了 CRI,它们被视为更适合 Kubernetes 的选择。

Kubernetes 社区对于去除 Docker shim 的反应是复杂的。一方面,这被视为 Kubernetes 向更高效、更标准化的未来迈进的必要步骤;另一方面,也引发了对 Docker 已被“抛弃”误解的担忧。然而,实际上 Docker 依旧是开发者构建和分享容器镜像的首选工具,只是在运行容器的时候,Kubernetes 选择使用其他更适合其架构的运行时。

代码示例:

如果你是 Kubernetes 集群的管理员,您可能需要切换到使用 containerd 作为容器运行时,以下是一个配置 Kubernetes 使用 containerd 的简单示例:

# 以下命令在 Kubernetes 节点上执行
# 安装 containerd
sudo apt-get update
sudo apt-get install -y containerd

# 配置 Kubernetes 使用 containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

# 重启 containerd
sudo systemctl restart containerd

# 告诉 kubelet 使用 containerd
sudo kubeadm init --cri-socket /run/containerd/containerd.sock

Docker 的挑战与机遇

面对 Kubernetes 的这一决定,Docker 遇到了新的挑战与机遇。

挑战在于,Docker 不再是 Kubernetes 集群中的容器运行时的唯一选择,这可能会影响其在容器运行时市场的地位。
然而,机遇也同样明显,Docker 可以集中精力优化自身的核心优势:作为容器镜像的创建和分发的平台。
通过专注于开发者体验和集成 CI/CD 工具链,Docker 有机会继续在容器化生态系统中扮演关键角色。

使用 Docker 构建和推送镜像到 Docker Hub 的示例:

# 登录 Docker Hub
docker login --username your-dockerhub-username

# 构建镜像
docker build -t your-dockerhub-username/your-image-name .

# 推送镜像到 Docker Hub
docker push your-dockerhub-username/your-image-name

推荐一个学习 Docker 教程专栏

  • 01、什么是 Docker
  • 02、为什么要用 Docker
  • 03、CentOS 安装Docker
  • 04、Docker如何获取镜像
  • 05、Docker 创建镜像
  • 06、Docker镜像的实现原理
  • 07、启动Docker容器
  • 08、Docker 备份、恢复、迁移数据卷
  • 09、Docker外部访问容器
  • 10、Docker快速配置指南

结论

Docker 和 Kubernetes 在容器化生态系统中各自扮演着不可或缺的角色。
Kubernetes 的选择,抛弃 Docker shim,是向着更加标准化和专业化发展的一步。
尽管这一决定引起了广泛讨论,但这反映了一个健康且成熟的开源社区应有的演变过程。
就像生物进化一样,技术领域的变革往往是为了适应环境,优化生存策略。

本文已收录于,我的技术网站 小郑说编程,有大厂完整面经,工作技术,架构师成长之路,等经验分享

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注我会非常感激!@小郑说编程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1419311.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java 数据结构】二叉树

二叉树 1. 树型结构(了解)1.1 概念1.2 概念(重要)1.3 树的表示形式(了解)1.4 树的应用 2. 二叉树(重点)2.1 概念2.2 两种特殊的二叉树2.3 二叉树的性质2.4 二叉树的存储2.5 二叉树的…

026-安全开发-PHP应用模版引用Smarty渲染MVC模型数据联动RCE安全

026-安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全 #知识点: 1、PHP新闻显示-数据库操作读取显示 2、PHP模版引用-自写模版&Smarty渲染 3、PHP模版安全-RCE代码执行&三方漏洞 演示案例: ➢新闻列表&…

详解OpenHarmony各部分文件在XR806上的编译顺序

大家好,今天我们来谈一谈编程时一个很有趣的话题——编译顺序。我知道,一提到编译可能大家会感到有点儿头疼,但请放心,我不会让大家头疼的。我们要明白,在开始写代码之前,了解整个程序的编译路径是十分有必…

1.24CNN(基本框架),RNN(简单RNN,LSTM,GRU简要)两个参考论文

目录 CNN RNN 3种RNN模型 简单RNN LSTM (长短期记忆模型) GRU 参考论文 CNN CNN是卷积神经网络 提取图片特征 、 在输出阶段可以使用sigmoid函数返回01值 RNN 3种RNN模型 简单RNN H就是每层神经元所产生的一个输出信号,输出…

【AI视野·今日NLP 自然语言处理论文速览 第七十六期】Fri, 12 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Fri, 12 Jan 2024 Totally 60 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Axis Tour: Word Tour Determines the Order of Axes in ICA-transformed Embeddings Authors Hiroaki Yamagi…

STM32学习笔记(三) —— GPIO点亮LED

1.GPIO简介 GPIO,全称是General-purpose input/output(通用输入输出)。在单片机中是表示能被控制的引脚,能检测输入信号的高低电平,也能输出高低电平控制外部设备。STM32F103RCT6一共有64个引脚,其中有51个…

【国产MCU】-认识CH32V307及开发环境搭建

认识CH32V307及开发环境搭建 文章目录 认识CH32V307及开发环境搭建1、CH32V307介绍2、开发环境搭建3、程序固件下载1、CH32V307介绍 CH32V307是沁恒推出的一款基于32位RISC-V设计的互联型微控制器,配备了硬件堆栈区、快速中断入口,在标准RISC-V基础上大大提高了中断响应速度…

Matlab进阶绘图第40期—堆叠蝴蝶图

堆叠蝴蝶图是蝴蝶图的一种变形。 堆叠蝴蝶图一般由左右两个横向堆叠图组合而成,可以很直观地展示两种数据各组分之间的差异。 本文使用自制的Butterfly小工具进行堆叠蝴蝶图的绘制,先来看一下成品效果: 特别提示:本期内容『数据…

密码加密——MD5与BCryptPasswordEncoder

目录 一、问题 二、密码加密 1、MD5密码加密 2、BCryptPasswordEncoder加密(推荐) 2.1 特点 2.2 使用步骤 一、问题 在数据库表中的密码都是明文存储的,安全性太低 需求: 将密码加密后存储,提高安全性 二、密码加密…

Shell中正则表达式

1.正则表达式介绍 1、正则表达式---通常用于判断语句中,用来检查某一字符串是否满足某一格式 2、正则表达式是由普通字符与元字符组成 3、普通字符包括大小写字母、数字、标点符号及一些其他符号 4、元字符是指在正则表达式中具有特殊意义的专用字符&#xff0c…

翻译: GPT-4 Vision通过量身定制的推荐来增强应用的用户体验 升级Streamlit五

GPT-4 Vision 系列: 翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式一翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式二翻译: GPT-4 Vision静态图表转换为动态数据可视化 升级Streamlit 三翻译: GPT-4 Vision从图像转换为完全可编辑的表格 升级St…

游戏开发丨基于Panda3D的迷宫小球游戏

文章目录 写在前面Panda3D程序设计程序分析运行结果系列文章写在后面 写在前面 本期内容 基于panda3d的迷宫中的小球游戏 所需环境 pythonpycharm或anacondapanda3d 下载地址 https://download.csdn.net/download/m0_68111267/88792121 Panda3D Panda3D是一种开放源代码…

JUC并发编程-四大函数式接口、Stream 流式计算、ForkJoin并行执行任务

12. 四大函数式接口 新时代的程序员:lambda表达式、链式编程、函数式接口、Stream流式计算 函数式接口:只有一个方法的接口,可以有一些默认的方法 如:Runnable接口函数 1)Function 函数型接口 public class Functio…

SpringBoot项目实现热部署的配置方法

SpringBoot项目实现热部署的配置方法 1、什么是热部署? 热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。 2、什么是SpringBoot热部署? SpringBoot热部署就是在项目正在运行的时候修改代码, 却不需要重新启动…

QT 使用XML保存操作记录

文章目录 1 实现程序保存操作记录的思路2 XML文档基本结构3 QDomDocument实现XML读写3.1 QDomDocument实现生成XML文件3.2 QDomDocument实现读取XML文件 4 QXmlStreamWriter实现读写4.1 QXmlStreamWriter实现生成XML4.2 QXmlStreamWriter实现读取XML 1 实现程序保存操作记录的思…

(五)MySQL的备份及恢复

1、MySQL日志管理 在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这样情况下,我们必须保证数据的安全性和完整性,就需要使用日志来查看或者恢复数据了 数据库中数据丢失或被破坏可能原因: 误删除数据…

二进制安全虚拟机Protostar靶场(6)堆的简单介绍以及实战 heap1

前言 这是一个系列文章&#xff0c;之前已经介绍过一些二进制安全的基础知识&#xff0c;这里就不过多重复提及&#xff0c;不熟悉的同学可以去看看我之前写的文章 程序静态分析 https://exploit.education/protostar/heap-one/#include <stdlib.h> #include <unis…

笔记本键盘卸载或自动跳出字符故障或按键无效修复办法

首先&#xff0c;在Windows 10操作系统中&#xff0c;您可以在笔记本电脑桌面上找到"计算机"图标&#xff0c;并使用鼠标右键点击它。然后选择"属性"选项。 打开系统属性后&#xff0c;您会看到右上角有一个"设备管理器"选项。请点击它来打开设…

Vim实战:使用Vim实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构编译安装Vim环境环境安装过程安装库文件 计算mean和std生成数据集 摘要 论文&#xff1a;https://arxiv.org/pdf/2401.09417v1.pdf 翻译&#xff1a; 近年来&#xff0c;随着深度学习的发展&#xff0c;视觉模型…

适用于 Mac 的 9 款最佳数据恢复软件列表

查看 2024 年 Mac 最佳数据恢复软件的完整列表&#xff0c;并随时恢复您想要的任何类型的数据。 “我们只是人类&#xff0c;我们应该犯错误”。这句话适用于生活的各个方面。错误是会发生的&#xff0c;正是错误使你成为人。 您可以使用 Mac 在线传输内容、上网、工作、玩游…