热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

被弃用的Docker会被Podman取代吗_docker

Docker是一种以容器化的方式打包、分发和部署应用程序的方式。自2013年3月13日初始版本发布以来,Docker已成为容器业界的事实标准。而Kubernetes是一款由Goog

Kubernetes 团队近日宣布将在最新版本中弃用 Docker 支持的功能,后续版本会陆续删除这些功能。

近日,Kubernetes 团队发布了最新的 1.20 版本,新版本更新了许多内容:

存储卷快照功能趋于稳定;Kubectl Debug 进入 Beta;Beta:API 优先级和公平性;IPV4/IPV6 Alpha 功能更新;GA:限制进程 PID;Dockershim 弃用;Exec 探针超时处理等等(详情可查看:https://kubernetes.io/blog/2020/12/08/kubernetes-1-20-release-announcement/ )

其 中,有一项更新对于开发者社区来说无疑是一枚重磅炸弹: 正式宣布弃用 Docker 支持的功能。 那么,究竟 Kubernetes 为什么要这么做,以及这么做会有什么影响呢?

Docker 是一种以容器化的方式打包、分发和部署应用程序的方式。自 2013 年 3 月 13 日初始版本发布以来,Docker 已成为容器业界的事实标准。而Kubernetes 是一款由 Google 开发的开源容器编排系统。

Kubernetes 架构示意图,来自维基百科

Docker 与 OpenShift

在 2015 年的峰会上,红帽发布了 OpenShift V3.0,该新版本 OpenShift 底层采用 Docker 容器,同时开始使用 Kubernetes 来编排镜像。然而,在 2016 年的红帽峰会期间,Docker 对红帽的 OpenShift 展开了锋芒毕露的攻击。他们不仅发表了以下推文,还给与会者发放带有“我们不接受模仿”字样的T恤衫:

图片

显然左边的仿制鲸鱼就是在嘲讽红帽的 OpenShift。当时,OpenShift 采用了基于 Docker 的容器。红帽发布的 Docker 一般会比原版落后一点点,而且为了提供所谓的“企业支持”,红帽采取了给旧版本 Docker 打补丁的行为。但相比之下,Docker 总是在发布最新版。

当然,对于维护企业应用应该采用升级还是采用移植补丁的方式,到现在依然众说纷纭,所以对于这一点在此不做评论,但 Docker 在红帽自己的峰会上的这种行为确实有点出乎意料。不得不承认,在此之前 Docker 是一项伟大的技术,毕竟它是 RedShift 的重要组成部分,但从那天起,事情就开始变味了。

平台之争

早期的 PaaS 平台主要是 OpenShift,以及两家竞争对手 Docker 和Pivotal 。Docker 人所共知就不用多说了,Pivotal 是 EMC 和 VMware 于2013 年创建的公司,专注于开源 PaaS 的解决方案。他们的企业解决方案非常成功,原因非常简单:用户体验非常好,尤其是结合 Pivotal Labs 使用的时候。

而 Docker 是企业解决方案的后起之秀,他们的优势就是开发者们早已熟知Docker 引擎了。而当时 Kubernetes 还不知道在哪儿。然而,Docker 对OpenShift 的攻击行为,使红帽不得不将资源投入到了 Kubernetes 上。后来的结果大家都看到了,Kubernetes 大获成功,并且获得了整个行业的拥护。

此时 Docker 为了挽回败局而推出了 Docker Swarm,但为时已晚。2016 年后半年,Kubernetes 超过了 Docker Swarm,成了行业事实上的标准。最终,Docker Swarm 并没有给 Kubernetes 带来任何冲击。可以认为这是Docker 的第一次死亡,从此以后,Docker 不再是企业级的 PaaS 解决方案,只能作为云原生系统中的一部分存在,好在它一直是 Kubernetes 中的一个重要组成部分。

Kubernetes 宣布弃用 Docker

近日 Kubernetes 宣布弃用 Docker。

(官网博客链接:https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/):

图片

这无疑是第二次宣布了 Docker 的死亡。按照 Kubernetes 自己的说法,Docker 已不再是必须的技术,而是变成了技术债务。1.19 版以前的Kubernetes 需要通过一个名为 Dockershim 的模块连接到 Docker,然后由Docker 连接到 Containerd 来创建容器。从技术上来看,实际的容器运行时是 Containerd,而不是 Docker。Docker 的作用只不过是在 Containerd 上创建容器而已。作为人类用户,只需运行一个 Docker run 就可以创建一个容器,这一点非常方便;然而在方便的同时,Docker 也带来了许多无用的操作和技术债务,对于 Kubernetes 而言,这就是负担。Kubernetes 完全可以绕过Docker,自己在 Containerd 上创建容器,从而获得同样的效果。而Kubernetes 1.20 中就采用了这种做法。

尽管 Docker 公司的商业模式失败了,但我们必须承认 Docker 为整个行业做出的巨大贡献。Docker 公司带来的技术是业内最好的。时至今日,我们的CI/CD 系统还极其依赖 Docker。没有 Docker,也不可能有 Kubernetes 的成功,而且 Kubernetes 依然有 Docker 的影子。

不过也不用担心,Kubernetes 团队已经做了大量的努力,尽可能使升级过程平稳。即使你升级到 1.20,也只会收到一个关于 Docker 已被弃用的警告。目前Kubernetes 的计划是在 2021 年末期发布的 1.22 中彻底移除 Docker 支持,所以开发者必须在那之前切换到其他的容器运行时,比如 Containerd 或 CRI-O 等。

Docker的替代品

弃用 Docker 之后,开发者们对其替代品的讨论逐渐热烈,其中 Containerd 和 Podman 倍受期待。

Containerd 是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性。它可以管理容器的生命周期,可以被 Kubernets CRI 等项目使用,并为广泛的行业合作打下基础等。

Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。直接通过 OCI runtime(默认也是 runc)来启动容器,所以容器的进程是 Podman 的子进程。这比较像 Linux 的 fork/exec 模型,而 Docker 采用的是 C/S(客户端/服务器)模型。

虽然目前容器市场 Docker 还是占用很大的比例,但被弃用的结局已定,在这个过渡期中,不妨去拥抱 Containerd 和 Podman 吧!


推荐阅读
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 2017年软件开发领域的七大变革
    随着技术的不断进步,2017年对软件开发人员而言将充满挑战与机遇。本文探讨了开发人员需要适应的七个关键变化,包括人工智能、聊天机器人、容器技术、应用程序版本控制、云测试环境、大众开发者崛起以及系统管理的云迁移。 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • Kubernetes(k8s)基础简介
    Kubernetes(k8s)基础简介目录一、Kubernetes概述(一)、Kubernetes是什么(二& ... [详细]
  • k8shelm官网:https:helm.sh点击charts:https:artifacthub.iopackagessearch?sortrelevance&page11.1h ... [详细]
  • 本文详细介绍了 Node.js 中 OS 模块的 arch 方法,包括其功能、语法、参数以及返回值,并提供了具体的使用示例。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • 本文总结了近年来在实际项目中使用消息中间件的经验和常见问题,旨在为Java初学者和中级开发者提供实用的参考。文章详细介绍了消息中间件在分布式系统中的作用,以及如何通过消息中间件实现高可用性和可扩展性。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • k8s之Service介绍
    1、Service是什么?​Service是一种k8s集群中访问pod的一种策略。k8s中的pod具有生命周期,且不可复活。每个pod有着自己的IP地址,pod的销毁与创建都会创新 ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
author-avatar
_MIN_Y
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有