Kaniko:无需高权限即可在Kubernetes与Google Container Builder中构建容器镜像

       Kaniko是Google发布的一款可以通过Dockerfile,容器或Kubernetes集群进行容器镜像构建的开源工具。通常我们在通过Dockerfile构建Docker镜像时,必须要有机器的root权限,这样在构建过程中才可以与Docker后台进程进行不断的交互访问。但在机器的Docker进程无法完全暴露的情况下(如Kubernetes集群),生成Docker镜像将是一种困难的事情。

      Kaniko应运而生,它不依赖于Docker守护程序,在没有root权限情况便可以完全在用户空间中执行Dockerfile中的每一条命令,轻松的生成Docker镜像并将其推送到镜像仓库。 因此,Kaniko可以应用于那些并不是很容易或者安全的条件下获取到ROOT权限的环境中进行构建容器镜像,如标准的Kubernetes集群、Google Kubernetes引擎以及其它无法访问Docker后台进程的环境。

工作原理

Kaniko在执行时需要三个输入:Dockerfile,构建上下文,最终上传镜像的镜像仓库名。最终生成的镜像仅包含一个静态的Go二进制文件以及与推送、拉取镜像相关的配置文件信息。

Kaniko构建原理图

        Docker镜像的生成是通过Kaniko执行器来构建生成的,Kaniko执行器首先根据Dockerfile中的FROM一行命令解析基础镜像,按照Dockerfile中的顺序来执行每一行命令,在每执行完一条命令之后,会在用户目录空间中产生一个文件系统的快照,并与存储于内存中的上一个状态进行对比,若有改变,则将其认为是对基础镜像进行的修改,并以新层级的形式对文件系统进行增加扩充,并将修改写入镜像的元数据中。在执行完Dockerfile中的每一条指令之后,Kaniko执行器将最终的镜像文件推送到指定的镜像仓库。

Kaniko可以在不具有ROOT权限的环境下,完全在用户空间中执行解压文件系统,执行构建命令以及生成文件系统的快照等一系列操作,以上构建的过程完全没有引入docker 守护进程以及CLI的操作。

与其它工具对比

        与Kaniko相似的工具有img,orca-build,buildah ,它们都需要通过Dockerfile来构建容器镜像,但采取不同的方法与安全权衡策略。在没有主机特权的条件下,img通过非特权身份在容器中构建镜像,Kaniko则是以ROOT用户身份在容器内构建生成镜像。orca-build通过包装runC(通过内核的命名空间技术来执行RUN命令)来执行构建,Kaniko可以实现同样的功能通过在容器内以ROOT身份来执行构建命令而不需要使用内核命名空间技术。buildah需要具有与Dokcer守护进程相同的权限,Kaniko则不需要任何特权与许可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,687评论 15 147
  • docker基本概念 1. Image Definition 镜像 Image 就是一堆只读层 read-only...
    慢清尘阅读 8,902评论 1 21
  • 今天参加女儿入园的第一次公开课,准时来到小6班,女儿看到我的到来很兴奋。 看着宝贝在学校的表现让我...
    雨后彩虹_5b33阅读 309评论 0 0
  • 今年的冬天,又到数九了。今年的雪来的晚了一点,户外温度没有因为雪花的爽约而温暖,相反在北风的相伴下似乎更冷了一些。...
    北门清阅读 763评论 2 4
  • 击剑运动是一项历史悠久的传统体育运动项目。早在远古时代,剑就是人类为了生存同野兽进行搏斗和猎食所使用的工具...
    沐沐沐沐沐先生阅读 856评论 0 0