“推出 Swarm”,“被 K8s 弃用”。Docker 曾两次被断言死亡,如今生态逐渐恢复,正式推出付费商业版 Docker Desktop。
美国当地时间 8 月 31 日下午,Docker 宣布推出 Business (商业)版本的 Docker Desktop(Docker 桌面),为大型企业提供更丰富的组件/功能。商业版 Docker 桌面沿用订阅模式收费,定价为 21 美元/月。
Docker 首席执行官斯科特·琼森(Scott Johnston)表示,“短期来看,我们需要解决供应链安全的挑战。而长期来看,今天全球开发者有大约 1800 万人,而到 2030 年,这一数量将上涨到 4500 万,庞大的开发者市场处于持续增长中。在这一背景下,Docker 如今已成为业界标准,我们要持续扩展业务,就必须有一个可持续的商业模式,因此我们推出了新的收费版本。”
强制大规模企业付费,新版本有哪些亮点
据悉,推出商业版 Docker Desktop 后,原先的免费版本改名为“个人版”(Personal)。而收费版(包括 Pro、Team 和 Business)针对大规模企业,其要求公司员工数量超过 250 人或者年收入超过 1000 万美金的企业如果使用桌面版,必须支付订阅费。
Docker Desktop 是一个 GUI 工具,用于管理各种 Docker 组件和功能,包括容器、图像、卷(附加到容器的存储)、本地 Kubernetes、容器内的开发环境等。大多数 Docker 组件可用于 Windows、Mac 和 Linux,但 Docker 仅适用于 Windows 和 Mac。相比较而言,商业版的 Docker Desktop 增强了包括集中管理、单点登录和增强安全性在内的功能。
对于新版本的特性来说,琼森提到 “使用商业版用户 Docker Desktop 的用户可以在统一的控制平面中设置开发人员的内容访问权限。而后根据内容会根据权限分发到相应的开发人员的 Docker 桌面,同时,该桌面能够在开发环境中使用。”除此外,琼森还提到“我们还提供基于 SaaS 的集中管理,以控制 CPU 的使用率、内存、端口和防火墙访问权限的配置。例如为了解决业务层的安全和用户管理问题,我们推出了单点登录功能”。
Docker Desktop 新版本的局限性
有亮点就会有局限性,Docker Desktop 推出的新版本亦如是。Docker Desktop 新版本发布时,Docker CEO 琼森提到此次新版本发布不涉及 Docker 的命令行引擎。其实,虽然 Docker 有 20%~25%的开发环境使用的是 Linux 系统,但 Docker Desktop 一直不支持 Linux 版本。对此,琼森提到,我们一直希望 Docker Desktop 能统一管理一致的开发环境,但目前时机还不成熟。
除了不支持 Linux 开发环境外,Docker Desktop 在远程开发方面也有不完善之处,如 GitHub Codespaces 或 Gitpod。使用本地计算机搭载 Mac/Windows/Linux 是当下大部分用户的选择,但也有用户对本地和远程的开发环境一致性有需求。琼森提到,这一问题需要时间,未来会逐步得到解决,而当下,如果对此需求强烈的用户,可使用 Linux 环境进行开发,以解决本地和远程开发体验的一致性问题。
Docker 平台作为业界标准,拥有众多组件,上述 Docker Desktop 仅仅是其中一部分。那么,整个 Docker 平台是什么样的呢?
Docker 平台架构图解
Docker 是一个容器平台,其用于构建,保护和管理从开发到生产在内部和云端的应用程序。总体来说,Docker 平台有很多组件,除了 Docker Desktop 外,还包括 Docker 镜像,Docker 容器,Docker 守护进程,Docker 客户端,Docker 注册表和 Docker Hub。他们的之前互相联系,形成如今的 Docker 平台:Docker 镜像定义了容器的内容。Docker 容器是可运行的镜像实例。Docker 守护进程是一个后台应用程序,用于管理和运行 Docker 镜像和容器。Docker 客户端是一个命令行实用程序,它调用 Docker 守护进程的 API。Docker 注册表包含镜像,Docker Hub 是一个广泛使用的公共注册表。大部分 Docker(但不是桌面)在Apache v2 许可下是开源的。
而从其架构和运行流程来看,Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,众多模块各司其职。
Docker 运行的基本流程为:
用户是使用 Docker Client 与 Docker Daemon 建立通信,并发送请求给后者。
Docker Daemon 作为 Docker 架构中的主体部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的请求。
Docker Engine 执行 Docker 内部的一系列工作,每一项工作都是以一个 Job 的形式的存在。
Job 的运行过程中,当需要容器镜像时,则从 Docker Registry 中下载镜像,并通过镜像管理驱动 Graphdriver 将下载镜像以 Graph 的形式存储。
当需要为 Docker 创建网络环境时,通过网络管理驱动 Networkdriver 创建并配置 Docker 容器网络环境。
当需要限制 Docker 容器运行资源或执行用户指令等操作时,则通过 Execdriver 来完成。
Libcontainer 是一项独立的容器管理包,Networkdriver 以及 Execdriver 都是通过 Libcontainer 来实现具体对容器进行的操作。
可见,Docker 平台是一个工程复杂度很高的应用,每一次收费模式调整的背后,都牵涉到众多工程问题。而在 Docker 收费模式之外,其技术路径的成长可谓一波三折,甚至曾经历了两次死亡。
两次死亡的 Docker,一波三折的成长之路
2013 年,当时名叫 dotCloud 的 Docker 公司,开源出来了自己的容器项目 Docker。Docker 通过镜像打包的方式保持了本地环境和云端环境的高度一致,解决了运维人员的一大心病,将运维人员从一遍遍的重复劳动中解放了出来。同时友好简洁的封装,对开发人员十分具有亲和力,这让 Docker 一举走红。很多后端和云计算领域的优秀的开发力量都汇集在了 Docker 的周围,生态一时间变得异常繁荣。
然而,随着社区不断壮大,Docker 意识到,作为开源生态的一部分,他们还缺少有效的商业模式,他们将眼光放到了容器编排领域,推出了 Swarm,但遗憾的是,Swarm 并未真正流行起来。这一事件后来还被称为“Doker 的第一次死亡”。
不只是网友的玩笑,作为 Docker 项目早期的重要贡献者,RedHat 对 Docker 公司推出 Swarm 的平台化战略表示很不满并愤愤退出该项目。
之后,RedHat 联合 Google,共同牵头发起了如今大名鼎鼎的 CNCF(Cloud Native Computing Foundation),推动 Kubernetes 的发展(K8s)。由于 K8s 极其开放的生态,以及 Docker 自身盈利和技术的问题,K8s 不断发展壮大,成为主流。
甚至到 2016 年 9 月,Google 和 RedHat联合宣布了“fork Docker”,也就是后来的 CRI-O 项目,用产品表达对 Docker 价值取向的不满。并在 2020 年 12 月弃用 Docker 支持,宣告竞争结束。这一事件被网友戏称为“Docker 的二次死亡”。
在此之后,Docker 痛定思痛,开始了自救与革新之路。首要目标便是推广社区版项目,增加生态系统健康度。2020 年,经过一年的努力后,Docker 成功将社区版项目中一小部分用户转化为付费客户,直接导致其 2020 年年度经常性收入 (ARR) 同比增长 170%。并于 2021 年 3 月获得 2300 万美元 B 轮融资,开始发力产品创新,提升用户做容器化应用开发的生产力。
如今,半年时间过去,Docker 推出了 Docker Desktop 商业版,并将免费版本统一为个人版。分不同梯度收取订阅费,正式开启商业化之路。
在不久的将来,随着 Docker 在产品、社区推广和商业模式上不断迭代进步,或许我们能看到 Docker 再次作为容器领导者归来。
评论