博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GCP发布Kaniko:在非特权容器和Kubernetes中构建容器镜像的工具
阅读量:6590 次
发布时间:2019-06-24

本文共 1595 字,大约阅读时间需要 5 分钟。

\

看新闻很累?看技术新闻更累?试试,每天上下班路上听新闻,有趣还有料!

\
\\

Google发布了“”,一种用于在未授权容器或Kubernetes集群中构建容器镜像的开源工具。虽然Kaniko也是根据用户给定的Dockerfile构建镜像,但是并不依赖于Docker守护进程,而是在用户空间中完全执行每个命令,并对所导致的文件系统更改做快照。

\\

要从一个标准Dockerfile构建镜像,通常依赖于对Docker守护进程的交互访问,这需要具有运行Docker守护进程主机的root访问权限。在宣布的GCP(Google Cloud Platform)官方博客帖子中指出,对于等环境,不方便甚至是不能安全地暴露Docker守护进程,这使得容器镜像难以构建。

\\

解决了上述挑战,它无需授权root访问权限,即可从Dockerfile构建容器镜像。Kaniko支持通过Docker和,运行在标准(使用,其中只包括向Docker仓库推送最终镜像所需的认证信息)、中,或是在本地运行。

\\

Kaniko以容器镜像方式运行,它需要指定三个参数:Dockerfile、构建上下文,以及推送最终镜像的仓库(registry)名。所使用的镜像是从开始构建的。空白镜像中只包括了静态的Go二进制文件,以及推送和拉取镜像所需配置文件。Kaniko执行器可获取并抽取给定基础镜像中的文件系统,并将其置于容器的根文件系统。这里所说的“基础镜像”,就是在给定的Dockerfile中由FROM指令所指定的镜像。

\\

之后,Kaniko按Dockerfile定义的顺序,依次执行Dockerfile中的每个指令,并在执行完一个指令后,对文件系统做一次快照。快照创建于用户空间中,在文件系统中按层次组织,并依次将当前快照与先前存储在内存中的状态进行对比。快照将文件系统的任何更改存储为基础镜像的一个新层,并将任何相关的更改反映到镜像元数据中。在Dockerfile中所有指令执行完成后,新构建的镜像将由Kaniko执行器推送到指定的Docker仓库。所有上述步骤,完全是在执行器镜像的用户空间中完成的。这就是为什么Kaniko能避免授权主机访问,因为“Docker守护进程和CLI并未参与其中”。

\\

\\

Kaniko容器镜像构建流程图(图片来源:)

\\

Kaniko支持执行大部分,但目前尚不支持SHELL、HEALTHCHECK、STOPSIGNAL和ARG指令,也未支持多阶段构建(Multi-Stage)Dockerfile。据Kaniko团队称,解决这些局限的相关工作正在开展中。

\\

目前还有一些类似于Kaniko的,其中包括、、、和。img支持在容器内以非root用户运行,但是需要容器具有“RawProc访问权限”,这样才能创建嵌套容器(与之相对比,Kaniko并不需要创建嵌套容器,因此也不需要具有)。orca-build依赖runC环境实现从Dockerfile构建镜像,但是runC本身不能运行在容器中。buildah需要具有运行Docker守护进程同样的权限。

\\

FTL和Bazel的目的在于对一小部分镜像实现尽可能最快速的Docker镜像创建。Kankio的README文件指出,“它们可以看成是‘快速路径’的一种特殊情况,可与Kaniko提供的对通用Dockerfile的支持联合使用”。

\\

对于如何将镜像构建融合到容器开发构建和部署的整个生命周期中,感兴趣的读者可以参阅InfoQ的前期报道“”。文中总结了适用于此过程的多种工具,并给出了推荐的过程。

\\

据Kaniko GitHub代码库的文件所述,该工具目前尚不能用于生产环境,欢迎对项目给出贡献、特性请求和软件缺陷报告。关于Kaniko发布的更多信息,参见GCP官方博客帖子“”。

\\

查看英文原文:

转载地址:http://jwuio.baihongyu.com/

你可能感兴趣的文章
分享11个超棒的移动应用(mobile apps)开发解决方案
查看>>
C/C++获取文件大小
查看>>
深入理解Java内存模型(五)——锁
查看>>
Chalubo僵尸网络来袭 IOT设备或将受到DDoS攻击
查看>>
如何实现百万TPS?详解JMQ4的存储设计
查看>>
这么说吧,NIO很简单,其实就是个牛逼IO
查看>>
使用Python快速获取公众号文章定制电子书(二)
查看>>
iOS下JS与OC互相调用(七)--Cordova 基础
查看>>
Three.js 关于立方体贴图产生边缘锯齿问题
查看>>
Nacos v0.7.0:对接CMDB,实现基于标签的服务发现能力
查看>>
【开发问题记录①】关于滑动CollectionView时ContentSize变化的问题
查看>>
java中GC的基本概念
查看>>
building xxx gradle project info的解决办法
查看>>
Vagrant (一) - 基本知识
查看>>
在 CentOS 7 上搭建 Jenkins + Maven + Git 持续集成环境
查看>>
数据结构与算法 | Leetcode 19. Remove Nth Node From End of List
查看>>
一起来读you don't know javascript(一)
查看>>
[LeetCode] 862. Shortest Subarray with Sum at Least K
查看>>
【分享】终端命令工具 自动生成vue组件文件以及修改router.js
查看>>
[LeetCode] Student Attendance Record I
查看>>