5

不用 Docker 也能构建容器的 4 种方法

 3 years ago
source link: https://www.infoq.cn/article/11kBhvolz77Z9zIgMrOJ
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在本文,我将介绍几种不用 Docker 就可以构建容器的方法。我将以 OpenFaaS 作为参考案例,它的工作负载使用了 OCI 格式的容器镜像。OpenFaaS 是 Kubernetes 的一个 CaaS 平台,可以运行微服务和添加 FaaS 及事件驱动工具。

第一个示例将展示如何使用 Docker CLI 内置的 buildkit 选项,然后是单独使用 buildkit ,最后是谷歌的容器构建器 Kaniko

本文涉及的工具都是基于 Dockerfile 文件来构建镜像的,因此,任何限制用户只能使用 Java (jib)或 Go (ko)的工具都不在讨论范围之内。

Docker 有什么问题?

Docker 在 armhf、arm64 和 x86_64 平台上运行良好。Docker CLI 不仅用于构建/发布/运行镜像,多年来它还背负了太多的东西,现在还与 Docker Swarm 和 Docker EE 特性捆绑在一起。

Docker 之外的选择

有一些项目试图让“docker”回到它原本的组件身份,也就是我们最初都喜爱的用户体验:

  • Docker——Docker现在使用containerd来运行容器,并且支持使用buildkit进行高效的缓存式构建。

  • Podman和buildah组合——由RedHat/IBM使用他们自己的OSS工具链来生成OCI镜像。Podman是无守护进程和无根的,但最后仍然需要挂载文件系统以及使用UNIX套接字。

  • pouch——来自阿里巴巴,被标榜为“高效的企业级容器引擎”。它像Docker一样,使用了containerd,并支持容器级别的隔离(runc)和“轻量级虚拟机”(如runV)。

  • 独立版本的buildkit——buildkit是由Docker公司的Tonis Tiigi创建的,一个全新的具有缓存和并发支持的容器构建器。buildkit目前仅作为守护进程运行,但你可能会听到有人说不是这样的。实际上,它会派生守护进程,然后在构建后将其终止。

  • img——img由Jess Frazelle开发,对buildkit进行了封装。与其他工具相比,它并没有更大的吸引力。在2018年下半年之前,这个项目一直很活跃,但之后只发布了几个补丁。img声称自己是无守护进程的,但它使用的是buildkit,所以这里有值得商榷的地方。我听说img提供了比buildkit的CLI buildctr更好的用户体验,但需要注意的是,img只针对 x86_64 平台发布了二进制文件,不支持armhf/arm64。

  • k3c——使用containerd和buildkit重建初始Docker原始、经典、朴素、轻量级的体验。

在所有的选项中,我最喜欢 k3c,但它使用起来比较繁琐,它把所有东西都捆绑在一个二进制文件中,这很可能会与其他软件发生冲突。它运行的是自己的嵌入式 containerd 和 buildkit 二进制文件。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK