无需特殊权限,在Kubernetes中构建Docker容器镜像!
没有Docker守护进程?在Kubernetes集群中工作?没问题。Kaniko是一种新的开源工具,它允许开发人员在容器中构建镜像,而不需要任何特殊权限。
通常,从标准Dockerfile构建镜像需要交互访问Docker守护进程。但是当你没有root权限时会发生什么?没有权限的工作使得构建容器镜像变得困难,特别是在无法轻松或安全地公开其Docker守护程序的环境中。比如,在Kubernetes集群中。
kaniko是一个开源工具,旨在帮助开发人员从容器或Kubernetes集群内的Dockerfile构建容器镜像。
Kaniko不依赖Docker守护进程。相反,它执行Dockerfile中的用户空间中的每个命令。该镜像是从头开始构建的,只包含一个静态的Go二进制文件以及推送和拖动镜像所需的配置文件。然后,kaniko将新建的镜像推送到注册表。瞧!你现在已经在标准Kubernetes集群或Google Kubernetes引擎中构建了一个容器镜像!
kaniko如何工作?
Kaniko执行镜像负责从Dockerfile构建镜像并将其推送到注册表。
以下是它的工作原理:kaniko作为一个容器镜像运行,它接受三个参数:一个Dockerfile,一个构建上下文以及将镜像推送到的注册表。它在执行程序镜像中提取基本镜像的文件系统。
然后,在Dockerfile中执行任何命令,快照用户空间中的文件系统。Kaniko在每个命令后都会将一层已更改的文件附加到基本镜像。最后,执行程序将新镜像推送到指定的注册表。
由于Kaniko在执行程序镜像的用户空间中完全执行了这些操作,因此它完全避免了在用户计算机上需要任何特权访问。没有Docker守护进程,没有CLI,没问题。
Kaniko类似于其他工具,如img和orca-build。虽然这两种工具都可以从Dockerfiles构建容器镜像,但它们的处理方式各不相同。例如,img将镜像作为非特权用户在容器内构建,与kaniko在非特权环境中作为root用户在容器内构建的方式相比。同样,orca-build使用内核命名空间技术来执行构建。Kaniko在容器内以root用户的身份执行构建。
获得kaniko
有兴趣尝试kaniko?这个开源工具仍在开发中,但你可以通过GitHub尝试。公平的警告,在Kubernetes集群中运行kaniko,开发者需要一个标准的运行Kubernetes集群和一个Kubernetes密钥!
GitHub库:https://github.com/GoogleCloudPlatform/kaniko