被弃用的 Docker 会被 Podman 取代吗

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 会被 Podman 取代吗?的文章就介绍到这了,更多相关Docker替代Podman内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • docker内网搭建dns使用域名访问替代ip:port的操作

    比如我内网有个jenkins,我如果要访问它我得牢牢记住它的ip和端口,一个服务我还能记住,多个的话我可能需要一个方便记忆的域名记录一些内网服务 第1步: 准备好docker环境 第2步:下载好镜像 docker pull andyshinn/dnsmasq:2.75 第3步:运行dnsmasq #后台启动 docker run -d -p 53:53/tcp -p 53:53/udp --cap-add=NET_ADMIN --name dns-server andyshinn/dnsmasq

  • 用Docker作为PaaS的替代方案是否完美无缺

    随着数字技术的普及,越来越多的企业面临着海量数据.虽然企业都希望用大数据掘金,然而数字化能力的缺失也使企业极易淹没在这片无边无际的数据海洋里.互联网使得数据的流动和共享成为了可能,云计算技术的发展使数据分析向更加全面的方向迈进. 作为云计算的三种服务形式之一,PaaS似乎一直不温不火,裹足不前.Docker的出现似乎又带来了一种新的选择,而且对于开发者来说更加灵活.便捷.易用.既然用户可以直接在Docker上运行,PaaS是否还有应用场景?面对企业繁杂的应用环境,用Docker作为PaaS的替代

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

    Kubernetes 团队近日宣布将在最新版本中弃用 Docker 支持的功能,后续版本会陆续删除这些功能. 近日,Kubernetes 团队发布了最新的 1.20 版本,新版本更新了许多内容: 存储卷快照功能趋于稳定:Kubectl Debug 进入 Beta:Beta:API 优先级和公平性:IPV4/IPV6 Alpha 功能更新:GA:限制进程 PID:Dockershim 弃用:Exec 探针超时处理等等(详情可查看:https://kubernetes.io/blog/2020/12

  • docker镜像的拉取登陆上传及保存等相关使用命令

    目录 docker 中的三大基本概念 镜像 容器 仓库 docker 镜像相关命令 常用镜像仓库 搜索镜像 拉取镜像 查看当前系统上的有哪些镜像 获取镜像的详细信息 登录镜像仓库 为镜像标签 镜像上传 镜像的删除 清空镜像 查看镜像历史(镜像的构建历史) 保存镜像(commit) 保存镜像(import/export) 保存镜像(save/load) 保存镜像三种方式的区别 docker 中的三大基本概念 镜像 镜像就是启动一个容器的模板. 容器 容器就是对外提供服务的进程.或者容器就是镜像启动

  • 详解docker国内镜像拉取和镜像加速registry-mirrors配置修改

    由于国内访问直接访问Docker hub网速比较慢,拉取镜像的时间就会比较长.一般我们会使用镜像加速或者直接从国内的一些平台镜像仓库上拉取. 我比较常用的是网易的镜像中心和daocloud镜像市场. 网易镜像中心:https://c.163.com/hub#/m/home/ daocloud镜像市场:https://hub.daocloud.io/ 我们可以先查看下自己的镜像,使用命令: [root@localhost docker]# docker images [root@localhost

  • 继docker之后podman容器技术崛起

    一.什么是podman与OCI Podman是一个无守护进程.开源的原生容器工具,旨在基于 Open Containers Initiative ( OCI )组织及规范,让镜像容器能够轻松查找.运行.构建.共享和部署应用程序. 提到podman就不能不说说OCI,这个组织有点意思.Docker容器技术出现并且迅速风靡全球,为传统的持续集成与持续发布领域带来了革命性的变化. 这个时候各个大佬们(谷歌,Redhat.微软.IBM.Intel.思科)就有点坐不住了,大家一起喝喝茶聊聊天就决定要成立一

  • Docker镜像发布到Docker Hub的实现方法

    目录 一.Docker 官网注册一个账号,新建仓库 二.制作镜像,保存修改后的容器镜像为例 三.镜像上传 四.镜像下载 在使用docker过程中,往往会用到镜像仓库,方便管理的同时也方便在其他环境下快速下载镜像,本文讲解如何将镜像传入docker官方仓库.操作系统以CentOS 8 为例讲解如何将自己的镜像上传到docker hub. 一.Docker 官网注册一个账号,新建仓库 二.制作镜像,保存修改后的容器镜像为例 # 本次不以docker build 为例 # docker ps -a E

  • 详解ASP.NET Core Docker部署

    前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行ASP.NET Core应用程序. ASP.NET Nginx 发布和部署 :http://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html. Asp.Net Jexus 发布和部署:http://www.cnblogs.com/savorboard/p/dot-n

  • 详解Docker下搭建Jenkins构建环境

    首先需要搭建好docker环境的linux系统,这个教程多如牛毛,在此不再赘述. 然后编写一个dockerfile来生成一个镜像,dockerfile其实就是一系列命令的集合,有点像windows的批处理文件, 搭建Jenkins构建环境需要安装jdk.maven.tomcat.jenkins,另外还安装了GIT,用来构建GIT来源的代码,内容如下: FROM centos:7 # author info MAINTAINER xulijian 514045152@qq.com # instal

  • Docker push镜像失败解决方法

    Docker push镜像失败的问题. 以下是输入push自己的tomcat后出现了失败 [root@slave3 ~]# docker push lekkoliu/tomcat8:latest The push refers to a repository [docker.io/lekkoliu/tomcat8] cefee3f6c961: Preparing 82f021d9c2b9: Preparing 4f91f02b4e49: Preparing a4b3ce7e1d4a: Prepa

  • Docker 学习文档(知识结构整理)

    一.Docker 简介 Docker 两个主要部件: Docker: 开源的容器虚拟化平台Docker Hub: 用于分享.管理 Docker 容器的 Docker SaaS 平台 -- Docker Hub Docker 使用客户端-服务器 (C/S) 架构模式.Docker 客户端会与 Docker 守护进程进行通信.Docker 守护进程会处理复杂繁重的任务,例如建立.运行.发布你的 Docker 容器.Docker 客户端和守护进程可以运行在同一个系统上,当然你也可以使用 Docker

  • 搭建一个私有的Docker registry教程

    为什么需要搭建一个私有的registry呢?嗯,对于新手来说,Docker Hub(一个Docker公共仓库)只允许你拥有一个免费的私有版本库(repo).其他的公司也开始提供类似服务,但是价格可不便宜.另外,如果你需要用Docker部署一个用于生产环境的应用,恐怕你不希望将这些镜像放在公开的Docker Hub上吧! 这篇文章提供了一个非常务实的方法来处理搭建私有Docker registry时出现的各种错综复杂的情况.我们将会使用一个运行于DigitalOcean(之后简称为DO)的非常小巧

随机推荐