Docker 安全中的一些技术工具
为了避免由 Docker 命令引发的安全风险,可以使用一些专门的技术工具脱离对 docker daemon 的依赖,这些技术工具有 BuildKit、Podman、Bazel 等。
1、BuildKit
BuildKit 是 Docker 官方社区推出的下一代镜像构建工具,官方宣称通过 BuildKit 可以更加快速、有效、安全地构建容器镜像。
BuildKit 的项目地址为https://github.com/moby/buildkit。
BuildKit 由 Docker 公司推出,对 Dockerfile 有天然较好的支持。它内置高效缓存,支持并行构建操作能力,相比较 Docker 构建方式,其在执行效率上有明显的优势。另外,BuildKit 的安全也较为便捷,仅需要容器运行时就能运行。当前 BuildKit 所支持的容器运行时有 containerd 和 runc,这两个容器运行时也是云原生平台首推的两个主流选择。
BuildKit 由 buildkitd daemon 和 buildctl 两个进程组成,buildkitd 需要在平台中预先安装 runc 或 containerd。buildkitd 支持非 root 用户模式运行,可以通过非 root 用户来运行 BuildKit 的守护进程,避免了 docker daemon 的安全问题。
2、Podman
Podman 是 Redhat 推出的一个无守护容器引擎,通过 Podman 在 Linux 系统上开发、管理和运行 OCI 容器。项目地址为https://podman.io/。
Podman 的设计理念是完全按照 Docker 命令的模式来操作的,官方甚至推荐直接使用“alias Docker=podman”命令来替换 Docker 命令行。在 Podman 的架构设计中,没有采用 Docker 所采用的客户端/服务器模式,而是采用本地 fork/exec 模式,在运行的时候主动 fork 一个进程,所以 Podman 没有守护进程。通过这种方式,大大提升了容器生命周期中的安全性控制。
3、Bazel
Bazel 是一个功能强大的多语言编译器,可以编译 Java、C++、Android、iOS、Golang 应用程序,同样也支持容器镜像的编译构建。其原理是通过扩展插件机制,来添加对新语言及新平台的支持。项目地址为https://github.com/bazelbuild/bazel。
使用 Bazel 分为两个步骤,首先是创建一个工作空间,Bazel 从这个工作空间里查找编译文件和 Bazel 运行时所需要的配置文件。之后,创建 Bazel 所需要的 BUILD 文件,在 BUILD 文件中定义了编译构建的执行过程。当 Bazel 执行构建时,先加载与构建相关的文件,分析其输入和依赖关系,根据指定的规则生成动作图。再根据动作图执行构建操作,直至生产最终的容器镜像。Bazel 由谷歌公司开源,在谷歌内部有广泛的使用。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/0a137dc002b546aa6aa39f470】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论