Docker、Kubernetes、Containers解读


【编者的话】每个开发者对于容器的入门都有自己的经历,本文讲述了私人作家、机器人技术爱好者保罗·米勒对于Docker和容器的认识过程和想法。

关于容器,你了解多少?

不久前,我在一家创业公司工作,该公司正在寻找一种“Dockerize”的后端基础架构方案。团队里的程序员来问我是否知道Docker,此时我告诉他:

“当然,它像一艘船一样”。

后来这就成为了一个笑话。我的这个回答让程序员非常沮丧。他们会因为我的错误而大吼大叫,说我错的那么离谱。他们甚至无法冷静下来并给我详细解释一下Docker并不像一艘船。

当然,因为当时我对Docker的理解完全停留在Docker的Logo上,Docker的Logo是一个鲸鱼和船的混合体,上面充满了集装箱。

因此,我向那些被我曾经伤害过的程序员做迟到的道歉,现在我想尝试重新理解下Docker。

Docker就像一艘船,Linux服务器就像是海洋,Docker的内部是可以承载应用程序集合的容器。

你是否经历过要安装一个Minecraft,但是电脑显示一个错误提示:“应用程序需要安装Java 1.6.0的运行时环境”;或者你要安装某个应用程序到Windows上,你会得到一个这样的错误:".NET Framework缺失";或者一个更常见的例子,你是否曾经花费几个小时来设置你的电脑的偏好配置?

这些都是Docker和更广泛的容器的概念要解决的。 Docker可以轻松地在服务器上安装Linux应用程序,以及它们所需的依赖关系和您可能对这些应用程序的任何首选项。 而且,Docker还善于解决应用程序之间的冲突依赖关系(可能一个应用程序依赖于Python 2,而另一个应用程序依赖于Python 3),因为所有内容都被隔离在不同的容器中。

如果这听起来好像对桌面计算(desktop computing)来说很方便,那么你是对的。 但它首先出现在开发者世界中,因为:
  1. 开发人员喜欢从自身角度出发解决问题
  2. 开发人员花费大量时间轮换新服务器来运行相同的应用程序集,他们厌倦了一遍又一遍地执行所有这些繁琐的安装。


现在,后端开发人员已经开始解决更复杂的问题,而通常使用Docker或其他容器技术作为抽象单元。 例如,Kubernetes是Google为帮助“容器编排”而制作的软件。Kubernetes标识实际上是一艘船的方向盘,但我认为它应该是海军上将的帽子,因为Kubernetes帮助您组织一个Docker舰队,而不仅仅是一艘。

所以,你为什么要告诉我这个?

和我最初对这种类似于船的技术感兴趣的原因一样:spite。

在这种情况下,我只是在试探Nilay,他把我从前几天的Vergecast上的Docker话题上移走了。Nilay喜欢船,所以他真的不知道自己错过了什么。

如果我们假装从这些事情中学到了宝贵的一课,一般来说,我认为Docker和容器是与我们所有人都必须面对的技术复杂性进行斗争的一个重要因素。我们使系统变得复杂和脆弱,所以我们构建新的抽象方法来管理这种复杂性。抽象并不总是正确的,所以我们根据具体情况来确定。有时我们不能安全地隐藏复杂性,所以我们必须扔掉一些东西,编写全新的系统。不管怎样,在我们偿还技术债之前,我们很难继续前进解决新的问题。

它永远不会结束。

我相信在Docker出现在开发人员面前大概五秒钟时,他可能会说:“如果有一个系统来管理我所有的Docker容器就好了!”因此,Kubernetes诞生了。我梦想会有人很快会发现一个将会编排多个Kuberneti的元Kubernetes。

也许他们已经有了。他们应该称之为“船民之王”,但他们可能会把它称为简单的东西,像“kops”这样的Unix。

原文链接:Living in a Docker world(翻译:ylzhang)

0 个评论

要回复文章请先登录注册