Docker 犯下的三个致命错误:一号员工十周年的反思

2023-11-30 15:44

本文主要是介绍Docker 犯下的三个致命错误:一号员工十周年的反思,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接:https://thenewstack.io/docker-at-10-3-things-we-got-right-3-things-we-got-wrong/

作者:Sam Alba,Dagger 联合创始人兼工程副总裁,曾任 Docker 的工程副总裁。2010 年作为一号员工加入 Docker,带领工程团队并将其规模从 3 人扩大到 100 人。

file

Docker 最近庆祝了 10 岁生日。我为我们在 Docker 取得的成就感到非常自豪,团队也持续取得的惊人成就。如果「容器」没能成为新的计算单位,现在许多我们周围的东西都不会存在了:微服务架构,Kubernetes 等等。当你回顾你生活中重大转折点时,相信你会看到你做对了和没做对的事情,至少对我来说是的。

话不多说,让我们来看下 Docker 十年的对与错。

三件做对的事

容器改变世界

我 2010 年加入 Solomon Hykes 一起建立 DotCloud(后来更名为 Docker)时,我很快就清楚地意识到,如果只使用当时已有的工具,将永远无法实现我们的愿景。DotCloud 是第一个支持所有语言的平台即服务(PaaS),而 Heroku 和其他平台仍然局限于单一语言堆栈。在构建 DotCloud 时,我们面临的一个挑战是缺乏虚拟机(VM)替代品,作为关键基础设施的构建模块。虚拟机相对于裸机是一个巨大的进步,但它们未能提供迈进云原生时代所需的灵活性。我们需要某种足够轻量的东西,在单个机器上打包数百个开发者的应用之际可以将每个用户隔离在自己的独立命名空间中(计算、网络、存储)。

这标志着微服务模式的开始。虚拟机仍然是基础设施可重复性方面最先进技术,并且容器仍然是少数爱好者专用技术(记得 LXC 要求内核补丁才能连接到正在运行的容器吗?)。也有人认为解决方案是让虚拟机进行零碳饮食(记得 JeOS 吗?)。对我们来说很明显,尽管面临诸多挑战,但围绕容器构建一切的努力是值得的。最终,我们证明了自己是正确的。

几年后,我们从 DotCloud 平台中提取出一个核心组件:容器运行时(Container Runtime)。我们对其进行了重写并开源,这就是 Docker 的第一个版本。最初的目标是让 Docker 成为从 DotCloud 中提取出来的众多开放组件之一。容器编排器和网络层将很快随之而来。但由于 Docker 在早期就受到了极大关注,计划发生了很大变化。

开发者,开发者,开发者

Steve Ballmer 是对的。在 VMware 主要关注解决 IT 问题时,我们已经意识到改变世界的方法是从全球的开发者开始。你必须改变软件构建的方式,而不仅仅是如何使用,这意味着首先满足开发者的需求。作为管理数千名开发者的人,我深知软件开发人员每天面临的挑战。这可能是世界上最棒的工作之一,充满了具有挑战性的问题和创造美好事物所带来的满足感,但也可能无聊,沮丧,有时还会令人愤怒。

基础设施和工具都有了巨大进步,但标准也提高了。Docker 当时的北极星指标是减少干扰、降低成本,并使开发者能够高效合作。其中一个我们最早收购(并)的产品叫做 Fig,最初由 Ben Firshman(Replicate 创始人)和 Anand Prasad 打造,后来整合进 Docker 成为了 Docker Compose。有趣的是,Fig 实现的 YAML 模型(compose.yml)直接受到了我们多年前构建 DotCloud 服务组合(dotcloud.yml)的启发。虽然我们取得了很大进展,但还有更多工作要做,特别是超越容器作为唯一单元,并编排容器流水线。这就是为什么我们在 2018 年开始打造 Dagger 的原因之一,它是一个可编程的 CI/CD 引擎,在容器中运行你的工作流。

投资建设活力的社区

我们最初专注于建立一个优秀的社区。从第一天开始,我们就深信我们无法独自实现所追求的目标。这需要赢得许多人的心和思想,并且实现这一点的关键是放弃对很多事物的所有权。DockerCon 成为了这个行业中最优秀聪明的人们聚集在一起的地方,他们分享事物如何发展,并愿意付出努力来构建共同愿景。在 Docker 早期,我们考虑自己组织开发者大会时,听起来甚至有点离谱。这要么是大公司才会准备,要么是针对更成熟的开发者社区(例如 PyCon)。

但 2014 年 6 月我们在旧金山组织了第一届 DockerCon,并将一些才华横溢的开发者聚集在同一个地方时,显然它只是某个变革之始而已,将改变 Docker 和整个行业。这种精神至今仍然深入人心,在数十个(甚至是数百个)开源项目和社区中都可看到。云原生计算基金会(CNCF)如今是其中许多活动的主办方,而且每天还在不断涌现更多新的活动。

三件做错的事

用户 vs. 客户

把社区放第一的背面是,我们花了太长时间才建立起一个可持续发展的业务。我们的偏见是要在公开透明的环境中尽力倾听社区需求,并努力满足他们。这个策略的根基是开源项目和商业专有解决方案可以很好地共存,并成为同一客户旅程的一部分。我今天仍然相信这种模式,但它需要一个微妙的平衡。

首先,你必须接受一些开源贡献者和用户永远不会成为客户。这没关系,因为他们参与构建了强大的社区、强大品牌,进而促进商业渠道增长。其次,产品架构必须允许在核心开源基础上构建企业级功能。这通常伴随着复杂的支持和发布流程。我们当然可以在创造稳固业务路径时更加战略性一些。最终我们实现了目标,但花费了太长时间,并且经常感到害怕。

明确文化

我们没有在早期明确定义团队文化和核心价值观,它们后来被社区和后来加入公司的人所定义。这导致我们的团队文化发生了很大变化,虽然一开始并不明显。Docker 的文化最终反映了社区的风格和价值观,而不是反之。

一个具体的例子是,在我们公司内有两个独立群体:一个专注于开源和社区,另一个专注于商业,这是我最大的遗憾之一。它演变成为内部工具、产品和项目管理以及团队文化本身上出现不同的思维方式。对任何人来说,平衡这些竞争利益都很难,但当你把角色分开时,就会产生内部斗争、不一致性和难以有定论的辩论(每个人都从自己的角度认为自己是正确的)。很多优秀的人在社区工作,但在和商业侧的许多合作中,还是经常会有微妙(或直接)的评判。有时候感觉是「开源信仰者」与「企业赚钱者」的对抗。这只会导致低效。

同时拥有一个充满活力的社区和可持续发展的商业模式所需要的,是一支无时都因这个模式而挣扎,但又能融合在一起的团队。它还能创造更好的团队文化。无论在公司的哪个部门工作,只有一个目标值得关注。

容器作为宇宙中心

退后一步看时,我意识到我们过于依赖容器:我们将容器视为大多数问题的核心解决方案,这使我们对开发供应链的其他需求变得盲目。Docker 之所以诞生,是因为我们看到容器将在行业内引发一系列必要的变革,但随着发展,我们没有关注后续需求,这就为他人留下了许多进入并开拓疆土的空间。一方面,这留下了很棒的机会,但也意味着社区的分裂。一个例子是在 Docker 中未能解决的挑战之一就是软件供应链完全自动化。虽然在那个供应链末端释放了很多价值,但却没有充分满足开发人员编码和合作的需求,直至今天 CI/CD 仍然混乱不堪。但它是可以解决的混乱局面。

像 Solomon Hykes,Andrea Luzzardi 和我许多同代人一样,在回顾 Docker 的期间时,意识到我们所推动的革命还不完整,因此找到了未来十年的目标。


💡 更多资讯,请关注 Bytebase 公号:Bytebase

这篇关于Docker 犯下的三个致命错误:一号员工十周年的反思的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/437599

相关文章

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

无线路由器哪个品牌好用信号强? 口碑最好的三个路由器大比拼

《无线路由器哪个品牌好用信号强?口碑最好的三个路由器大比拼》不同品牌在信号覆盖、稳定性和易用性等方面各有特色,如何在众多选择中找到最适合自己的那款无线路由器呢?今天推荐三款路由器让你的网速起飞... 今天我们来聊聊那些让网速飞起来的路由器。在这个信息爆炸的时代,一个好路由器简直就是家庭网编程络的心脏。无论你

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

禅道Docker安装包发布

禅道Docker安装包发布 大家好, 禅道Docker安装包发布。 一、下载地址 禅道开源版:   /dl/zentao/docker/docker_zentao.zip  备用下载地址:https://download.csdn.net/download/u013490585/16271485 数据库用户名: root,默认密码: 123456。运行时,可以设置 MYSQL_ROOT_P

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne