10 月,开发者不可错过的开源大数据大会-2021 WeDataSphere 社区大会深圳站 了解详情
写点什么

GCP 发布 Kaniko:在非特权容器和 Kubernetes 中构建容器镜像的工具

2018 年 4 月 25 日

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

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

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

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

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

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

Kaniko 容器镜像构建流程图(图片来源: GCP 官方博客

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

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

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

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

据 Kaniko GitHub 代码库的 README.md 文件所述,该工具目前尚不能用于生产环境,欢迎对项目给出贡献、特性请求和软件缺陷报告。关于 Kaniko 发布的更多信息,参见 GCP 官方博客帖子“ Kaniko 介绍:无需授权在 Kubernetes 和 GCP 中构建容器镜像”。

查看英文原文: GCP Release “kaniko”, a Tool to Build Container Images Inside Unprivileged Containers or Kubernetes

2018 年 4 月 25 日 19:001359
用户头像

发布了 381 篇内容, 共 100.7 次阅读, 收获喜欢 233 次。

关注

评论

发布
暂无评论
发现更多内容

你真的懂 MP4 格式吗?

阿里云视频云

音视频 视频

Flink 如何实时分析 Iceberg 数据湖的 CDC 数据

Apache Flink

flink

中小公司开展NPS的好处

Geek_459987

网络编程入门从未如此简单(二):假如你来设计TCP协议,会怎么做?

JackJiang

TCP 网络编程

狂补计算机基础知识,让我上了瘾

沉默王二

计算机基础 计算机

立足智能化发展,风电能源产业互联网平台加快建设

一只数据鲸鱼

物联网 数据可视化 3D可视化 能源管理 风力发电

2021年,是时候把技术债务管理提上日程了

禅道项目管理

效率 产品 创新 技术债

资深大牛带你了解源码!分析Android未来几年的发展前景,快来收藏!

欢喜学安卓

android 程序员 面试 移动开发

神操作:就靠这份“Java核心技能精讲”,竟收割了22个Offer

比伯

Java 编程 架构 面试 计算机

Agora 实时音视频调查工具水晶球

john

Kafka 是怎么存储的?为什么速度那么快?

码农架构

Java kafka 架构·

新时代计算机技术

MT马特量化机器人软件开发|MT马特量化机器人APP系统开发

系统开发

安卓软件开发文献!阿里P8架构师的Android大厂面试题总结,建议收藏

欢喜学安卓

android 程序员 面试 移动开发

拒绝知识碎片化!阿里大牛亲码Java核心技能精讲笔记,系统梳理Java知识体系,金三银四面试必备!

程序员小毕

Java 程序员 架构 面试 分布式

LeetCode题解:152. 乘积最大子数组,动态规划,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

连接AI与用户,京东云推出视音频通信技术方案

京东科技开发者

IoT 通信 视频会议

大数据时代

Mr.cool

API策略量化机器人系统开发|API策略量化机器人APP软件开发

系统开发

MySQL索引原理,一篇从头到尾讲清楚

云流

数据库 架构

细节完美炸裂!GtiHub上点赞已破百万的并发编程四套全彩手册

Java架构追梦

Java 阿里巴巴 架构 面试 并发

iOS开发前景

ios

BML CodeLab发布重磅更新 一键配好Windows WSL2 AI开发环境

百度大脑

抖音春晚红包互动为啥全程无宕机?看完字节内部高并发速成笔记我悟了!

程序员小毕

Java 程序员 高并发 秒杀 字节

一周信创舆情观察(2.8~2.21)

统小信uos

华为大神珍藏版:SpringBoot全优笔记,面面俱到太全了

互联网架构师小马

Java 架构 微服务 Spring Boot Spring Boot 2

程序员需要搞理财吗?

三石

理财 话题讨论

架构设计篇之微服务实战笔记(五)

小诚信驿站

架构师 刘晓成 小诚信驿站 成长笔记 28天写作

使用PG_STAT_REPLICATION监视复制

PostgreSQLChina

数据库 postgresql 开源 软件 开源社区

Serverless 如何在阿里巴巴实现规模化落地?

Serverless Devs

阿里云 Serverless 云原生 前端

第五周作业-流程图及时序图

Au revoir

GCP发布Kaniko:在非特权容器和Kubernetes中构建容器镜像的工具-InfoQ