NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Dockerless 系列文章(一):为什么我们要替换 Docker?

  • 2019-08-16
  • 本文字数:2896 字

    阅读完需:约 10 分钟

Dockerless系列文章(一):为什么我们要替换Docker?

声明:我并不会在本系列中重复已有的主题,如容器以及容器标准化的内容,之前已经有很多也很棒的文章和视频,我会链接一些个人觉得最有用的内容。如果你不理解本文的某些部分,那么就参照文章中放置的链接。如果你仍然不理解某些东西,那就在文章下面留言,我会在回复中详细解答你的问题,或者会重新扩展这篇文章。

为什么选择 Dockerless?

首先,我需要解释一下这个系列的标题:”Dokerless”。我们为什么不用 Docker 呢?或者我们为什么要用 Docker 呢?难道就没有别的选择了吗?IT 社区在 2013 年第一次尝试容器的时候是否就已经提出了一个完美的解决方案呢?


答案并不完全是肯定的。容器工业界竭尽全力避免虚拟化技术出现的情形,尽管拥有libvirt这样出色的工具,但我们并没有一套每个虚拟化供应商都会遵循的标准。我们应该认可 Docker 公司的努力,作为一家公司它发起并积极支持了许多围绕容器技术标准化的倡议。


自 2015 年以来,我们有了开放容器计划(OCI)以及容器运行和容器镜像管理的规范。此外,我们还有容器运行时接口(CRI)和容器网络接口(CNI)。如果你很难理解所有新的容器标准是如何在一起工作的,那么就看一下 Scott McCarty 的理解容器标准,他甚至演示了如何在不同容器引擎之间转换这些借口,并且没有丢失任何功能。


如果你可以在 Kubernetes 集群中用 CRI-O 或其它引擎来替换 Docker Daemon,而且作为开发人员又不会注意到其中的差异,那么究竟哪个引擎在运行又有什么关系呢?就像容器让你不再关心主机服务器一样,容器标准也让你可以不用关心容器本身的管理。毕竟,你是否真地关心过 AWS EC2 究竟是在 Xen 还是 KVM 上运行呢?你只是需要一个虚拟机或者一个容器而已。


但是,那些负责 Kubernetes 集群维护、扩展和升级的工程师就非常关心这些选项了。例如,他们可能会担心使用Docker的一些安全问题。另外,他们可能认为没有必要在集群的每个节点上运行额外的守护进程。Docker 可能已经使容器非常流行,但这并不意味着它是最好的容器技术。如果你对各种容器引擎之间的差异很感兴趣,可以从这个对比入手:Kubernetes Container Runtimes


作为一个开发者,如果你开始依赖一些标准或者一些公司(以免这些公司搞砸标准的开发和支持),那么你可以为本地开发自由地选择开发工具。如果所有工具最终都使用相同的 API,那么你就没有必要局限于某种特定的工具了。那么,”为什么不用 Docker 呢?”,答案是因为我们没有必要再使用 Docker。那么我们该用什么来代替它呢?

Buildah 和 Podman

我们将会分别使用BuildahPodman来管理容器镜像和容器本身。这两个工具都是由 RedHat 开发,大多数 RedHat 的 Linux 发行版都搭载了这些安装包。更重要的是,从 RedHat Enterprise Linux 8 开始,将不会再有直接使用Docker的安装包。当然,你仍然可以选择从 Docker 库中直接来安装 Docker。


注意,当我说”由 RedHat 开发”时,我并不是说这些工具只是由 RedHat 开发的。Buildah 和 Podman 都是开源项目,源代码托管在 Github 上的容器组织中。的确,Redhat 雇佣员工来开发这些工具,但其实还有一个更大的开发者社区来维护和扩展这两个项目。

使用 Buildah 和 Podman 的弊端

在我们开始讨论为什么使用 Buildan 和 Podman 之前,让我先明确指出与 Docker 相比使用 Buildah 和 Podman 的明显的缺点:


  1. 目前它们只能在 Linux 上运行。对于 Windows 和 MacOS,没有像 Docker 那样方便的包装器。在 Windows 下可以使用wsl2,所以问题可能会好一些。

  2. Podman 没有 Docker Compose 的替代品。有一种方法可以在本地运行兼容 kubernetes 的 Pod YAMLs,但还不成熟。不过,这种情况可能会改变。我们将在本系列的最后一篇文章中研究 Pod YAML。

  3. 它们仍然非常新,还在快速开发中!


如果你是 Windows 或 MacOS 用户,你肯定会怀念 Docker 客户端工具的舒适,因为你可能不得不手动启动一个 Linux 虚拟机来运行 Buildah 和 Podman。


如果你有一个非常复杂的 Docker Compose 设置,或者你使用 Docker Compose 来部署生产环境,那么你就没有新工具集来替换它了。


但是,除了这两点,你几乎不会注意到从 Docker 转换后的差异。你会得到什么样的回报么?

从 Docker 转向 Buildah 和 Podman 的原因

Docker 的替代品

当你开始使用一组新的工具来管理容器时,你很快就会意识到 Docker 只是一个工具。你会看到没有”Docker 容器”,只有”容器”,没有”Docker 镜像”,只有”容器镜像”。能够思考技术和原则的根本,并避免将你的思想锁定在单一的技术中是很重要的。


就像一个优秀的程序员能够意识到他最喜欢的语言只是众多编程语言中的一种,我们应该能意识到 Docker 只是与容器交互的一种方式而已。了解并尝试其他选择是很重要的,它会给你一个不同的视角,丰富你的知识。

了解真正的容器是什么

一旦你停止思考”Docker”并开始思考”容器”,你将不可避免地要学习容器到底是什么,并获得更深层次的知识,也能理解诸如“docker run”或”podman exec”等命令真正做了什么。如果你是一个网页开发者,那么这些知识可能对你的日常工作没有帮助。是否想更深入地挖掘事物运作的底层知识,完全取决于个人。我的观点是,理解所有事物的工作原理和整合对每个工程师来说都是一项非常重要的技能。

为未来做准备

当你试图在大脑中将”Docker”替换为”容器”时,整个行业也在做同样的事情。正如前面提到的,CRI-O 逐渐成为 Kubernetes 的默认运行时,不同的公司也推出了针对容器的不同工具集。Redhat 发起 Buildah,而谷歌推动了Kaniko,总是有一些不太知名的工具会在某个时候成为主流。


你可以在 Docker 身上下大赌注,并且只使用这一个工具。或者,你可以了解行业中正在发生的情况,并做好 Docker 不再是默认工具的准备,它将会被下一代容器技术工具取代。

关于底层工具

你可以越过 Podman 直接使用 runc。就学习容器技术而言,这将会更加有趣,收获也会更大。当你实际上希望将应用程序包装起来并在本地运行时,这也会导致生产效率的下降。Podman 的目标是成为一个用户友好的 CLI,一个 Docker CLI 的完全替代品,所以在实际工作中,使用 Podman 会更好一些。如果你想看一篇关于使用 runc 和其他底层工具来处理容器的文章,请在评论中告诉我!

前瞻

在下一篇文章中,我们将学习如何使用 Buildah 为 Ruby on Rails 应用程序构建容器镜像。我们还将学习容器镜像究竟是什么,也会研究一下 OCI 镜像规格。在最后一篇文章中,我们将使用 Podman 按照类似于 Docker compose 的方式来完全自动化开发环境。


我们不会在这里使用一些虚构的开发实例。通过使用 Buildah 和 Podman,mkdev.me 将核心 Web 应用以及所有的支持服务都转移到了本地开发环境下的容器中。mkdev.me 就是一个很好的例子:我们有一个中等规模的 Ruby on Rails 应用程序,它使用 PostgreSQL 数据库作为主存储,Redis 用于缓存和后台作业。我们还有 Mattermost 作为消息传递平台的核心,它需要自己的数据库。整个项目不像一个 web 应用程序和一个数据库那样枯燥和简单,又不像一个包含十几个应用程序的微服务程序那样复杂。


原文链接:


https://mkdev.me/en/posts/dockerless-part-1-which-tools-to-replace-docker-with-and-why


2019-08-16 09:0013548
用户头像

发布了 36 篇内容, 共 18.8 次阅读, 收获喜欢 55 次。

关注

评论

发布
暂无评论
发现更多内容

聚焦大企业创新与创投生态,2021 DEMO WORLD 世界创新峰会圆满成功!

创业邦

从零开始学习3D可视化之获取对象

ThingJS数字孪生引擎

物联网 可视化 大屏可视化 3D可视化 数字孪生

仅需1秒!快速查看海淀全区情况,一句话让“智慧屏”全搞定

百度大脑

智能

数字人民币有望为全球贸易结算开辟新视窗

CECBC

计算机视觉常用图像数据集标记平台

不脱发的程序猿

人工智能 计算机视觉 图像处理 图像数据集标记平台

六一限定,致每一个追光者

白洞计划

BoCloud博云微服务平台3.0正式发布:让微服务转型路径更清晰

BoCloud博云

微服务

Python3 Note 函数注解

awen

Python Function 函数注解

净筹6亿美元:微盟正在加速拉开差距

ToB行业头条

SaaS 微盟

工业制造业在数字化时代的三大发展方向

CECBC

webRTC探索音视频的录制的实现

云小梦

JavaScript WebRTC 浏览器API

Android studio 在外置硬盘运行项目报.lock 的错误

三爻

flutter android Mac Android Studio

个推CTO谈数据中台(上):从要求、方法论到应用实践

个推

大数据 数据中台 数字化转型 数据智能

Python3 Note 对象初始化

awen

Python 生命周期 对象初始化

智慧工厂VR拆解零件——3D虚实现实可视化系统

一只数据鲸鱼

数据可视化 工业互联网 vr 智慧工厂 零件拆解

从VMWare安装到Nginx配置

wildpig

nginx vmware Centos 7

实现接口幂等性的四种方案!

李阿柯

面试 编程之路 幂等性

【LeetCode】包含min函数的栈Java题解

Albert

算法 LeetCode 6月日更

模块五总结

竹林七贤

NUCLEO-L432KC实现GPIO控制(STM32L432KC)

不脱发的程序猿

嵌入式 stm32 单片机 NUCLEO-L432KC STM32L432KC

“图发展”与“保安全”:大数据今后怎么玩?

CECBC

全球案例 | 一家财富500强公司利用 Jira 和 Jira Align 将万人级团队的生产力提高了 30%

Atlassian

管理 DevOps 敏捷 Jira 协同办公

新思科技推出Intelligent Orchestration解决方案 优化DevOps管道的速度和效率

InfoQ_434670063458

新思科技

Python3 Note __slots__

awen

Python slots

百度智能云亮相CCBN2021,云智一体智媒产业智能化解决方案受关注

百度大脑

云智一体 CCBN

《原则》(一)

Changing Lin

6月日更

GitHub上收录400余篇任正非的讲话稿

不脱发的程序猿

GitHub 开源 程序人生 任正非讲话

☕️【Java技术之旅】深入学习JIT编译器实现机制(原理篇)

洛神灬殇

Java 编译器 JIT 6月日更

六一儿童节,看我用ModelArts让8090梦回童年

华为云开发者联盟

AI 美食 童年 modelarts 六一

mPaaS 月度小报 | 应用上线前都应该检查哪些指标?CodeHub#5回顾:小程序容器加持下的技术架构“提质增效”

蚂蚁集团移动开发平台 mPaaS

小程序 移动开发 mPaaS

环信MQTT消息云正式发布,覆盖4大核心场景

环信

mqtt

Dockerless系列文章(一):为什么我们要替换Docker?_服务革新_KIRILL SHIRINKIN_InfoQ精选文章