Kaniko在containerd中无特权快速构建并推送容器镜像

news2025/1/19 7:03:16

目录

一、kaniko是什么

二、kaniko工作原理

三、kanijo工作在Containerd上

基于serverless的考虑,我们选择了kaniko作为镜像打包工具,它是google提供了一种不需要特权就可以构建的docker镜像构建工具。

一、kaniko是什么

kaniko 是一种在容器或 Kubernetes 集群内从 Dockerfile 构建容器镜像的工具。kaniko 不依赖于 Docker 守护进程,而是完全在用户空间中执行 Dockerfile 中的每个命令。这使得在无法轻松或安全地运行 Docker 守护程序的环境中构建容器镜像成为可能,例如标准的 Kubernetes 集群。

二、kaniko工作原理

kaniko作为一个容器镜像运行,它接受三个参数:一个 Dockerfile ,一个构建上下文以及将镜像推送到的注册表。它在执行程序镜像中提取基本镜像的文件系统。然后,在Dockerfile中执行任何命令,快照用户空间中的文件系统。Kaniko在每个命令后都会将一层已更改的文件附加到基本镜像。最后,执行程序将新镜像推送到指定的注册表。由于Kaniko在执行程序镜像的用户空间中完全执行了这些操作,因此它完全避免了在用户计算机上需要任何特权访问。

1035234-20181020215539574-213176954.png

  • 读取并解析指定的Dockerfile
  • 提取基础镜像的文件系统(Dockerfile 中的 FROM 镜像)
  • 在独立的Dockerfile中分别运行每个命令
  • 每次运行后都会对用户空间文件系统的做快照
  • 每次运行时,将快照层附加到基础层并更新镜像元数据
  • 最后推送镜像

三、kanijo工作在Containerd上

我们的环境中只安装了containerd.io 容器运行时没有 Docker 或者 Kubernetes 环境时,我们也可以采用kaniko进行镜像构建与发布,具体操作流程步骤如下:

环境说明

操作系统版本:

root@testmachine:/# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.5 LTS
Release:	20.04
Codename:	focal
root@testmachine:/# 

containerd版本:

root@testmachine:/# containerd -v
containerd github.com/containerd/containerd v1.7.0 1fbd70374134b891f97ce19c70b6e50c7b9f4e0d
root@testmachine:/# 

ctr版本:

root@testmachine:/# ctr -v
ctr github.com/containerd/containerd v1.7.0
root@testmachine:/# 
1.提前拉取kaniko-executor镜像

可以提前拉取 kaniko-executor:latest 镜像以加快构建速度,此处将镜像拉到默认的名称空间下

官方镜像特殊原因国内无法访问,可以直接访问大神阿里云的镜像仓库拉取

拉取镜像

ctr -n default images pull registry.cn-hangzhou.aliyuncs.com/weiyigeek/kaniko-executor:latest

 查看本地镜像

ctr image list | grep "kaniko-executor"
root@testmachine:/# ctr image list | grep "kaniko-executor"
registry.cn-hangzhou.aliyuncs.com/weiyigeek/kaniko-executor:latest                  application/vnd.docker.distribution.manifest.v2+json      sha256:5aacba9599e8e112279e6e316f1164e584e9b59e5f159b275c6b482e0913c13e 24.6 MiB  linux/amd64                                                                                             -      
root@testmachine:/#
2.准备镜像仓库认证所需的凭据

需要推送的阿里云容器镜像仓库的账号以及密码,可以按照下述的流程进行生成config.json文件。

在linux环境运行下面命令得到账号密码是base64编码字符串

echo -n "username:password" | base64

 注意下述为格式为 你的容器镜像仓库账号:你的容器镜像密码

oot@testmachine:/# echo -n "username:password" | base64
dXNlcm5hbWU6cGFzc3dvcmQ=
root@testmachine:/#

这里就是BASE64 编码:dXNlcm5hbWU6cGFzc3dvcmQ=

生成认证所需的凭据

cat > config.json <<EOF
{
  "auths": {
    "https://index.docker.io/v1/": {
        "auth": "BASE64编码"
    }
  }
}
EOF

config.json文件内容:

 cat config.json 
{   
    "auths": {
        "registry.cn-hangzhou.aliyuncs.com": {
            "auth": "dXNlcm5hbWU6cGFzc3dvcmQ="
       }
    }
    
}
3.准备dockerfile文件
tee dockerfile <<'EOF'
FROM docker.io/library/busybox:1.35.0
LABEL MAINTAINER=Andy BUILDTOOLS=kaniko BUILDENV=containerd.io;
ENTRYPOINT ["/bin/sh", "-c", "echo hello,busybox"]
EOF

dockerfile文件内容

FROM docker.io/library/busybox:1.35.0
LABEL MAINTAINER=Andy BUILDTOOLS=kaniko BUILDENV=containerd.io;
ENTRYPOINT ["/bin/sh", "-c", "echo hello,busybox"]
工作目录和所有涉及到文件
[root@testmachine /]# tree 5  /data

/data
└── kaniko
    ├── config
    │   └── config.json
    └── demo1
        └── dockerfile

[root@testmachine /]#

4.ctr运行容器构建镜像

执行containerd.io提供的ctr客户端工具直接创建容器,例如如下命令:构建busybox镜像并推送

ctr -n default run --rm --net-host --env DOCKERHUB=docker.io \
--mount type=bind,src=/data/kaniko/config,dst=/kaniko/.docker,options=rbind:ro \
--mount type=bind,src=/data/kaniko/demo1,dst=/workspace,options=rbind:rw \
registry.cn-hangzhou.aliyuncs.com/weiyigeek/kaniko-executor:latest kaniko-executor \
/kaniko/executor --dockerfile=/workspace/dockerfile --context=dir://workspace \
--destination=registry.cn-hangzhou.aliyuncs.com/gmaaa123/busybox:1.999

运行结果

[root@testmachine /]# 
[root@testmachine /]# ctr -n default run --rm --net-host --env DOCKERHUB=docker.io \
> --mount type=bind,src=/data/kaniko/config,dst=/kaniko/.docker,options=rbind:ro \
> --mount type=bind,src=/data/kaniko/demo1,dst=/workspace,options=rbind:rw \
> registry.cn-hangzhou.aliyuncs.com/weiyigeek/kaniko-executor:latest kaniko-executor \
> /kaniko/executor --dockerfile=/workspace/dockerfile --context=dir://workspace \
> --destination=registry.cn-hangzhou.aliyuncs.com/gmaaa123/busybox:1.999
INFO[0001] Retrieving image manifest docker.io/library/busybox:1.35.0 
INFO[0001] Retrieving image docker.io/library/busybox:1.35.0 from registry index.docker.io 
INFO[0013] Built cross stage deps: map[]                
INFO[0013] Retrieving image manifest docker.io/library/busybox:1.35.0 
INFO[0013] Returning cached image manifest              
INFO[0013] Executing 0 build triggers                   
INFO[0013] Building stage 'docker.io/library/busybox:1.35.0' [idx: '0', base-idx: '-1'] 
INFO[0013] Skipping unpacking as no commands require it. 
INFO[0013] LABEL MAINTAINER=Andy BUILDTOOLS=kaniko BUILDENV=containerd.io; 
INFO[0013] Applying label MAINTAINER=Andy               
INFO[0013] Applying label BUILDTOOLS=kaniko             
INFO[0013] Applying label BUILDENV=containerd.io;       
INFO[0013] ENTRYPOINT ["/bin/sh", "-c", "echo hello,busybox"] 
INFO[0013] Pushing image to registry.cn-hangzhou.aliyuncs.com/gmaaa123/busybox:1.999 
INFO[0015] Pushed registry.cn-hangzhou.aliyuncs.com/gmaaa123/busybox@sha256:557cc2302c0ae328d99ca9f7ed8c96928034a5f94a7432f95dbc41a9740a123f 
[root@testmachine /]# 

上述参数定义:

-n 指定名称空间
--rm 在退出容器时删除容器
--net-host 使用主机网络
--env 指定容器内部shell变量
--mount 指定挂载到容器内部的本地文件,src是指定宿主机上文件目录路径,而dst是指定容器内部目录

--dockerfile 指定Dockerfile

--context 定义位置获取编排位置,即上下文

--destination 远端镜像仓库

--insecure=true 仓库为私有http仓库

--skip-tls-verify=true 跳过tls验证

在阿里云容器镜像站上查看 

https://cr.console.aliyun.com/repository/cn-hangzhou

5.测试

1.从仓库拉取刚刚构建好镜像

ctr -n default images pull --user 仓库账号:仓库密码 registry.cn-hangzhou.aliyuncs.com/gmaaa123/busybox:1.999

运行结果 

[root@localhost /]# ctr -n default images pull --user 仓库账号:仓库密码 registry.cn-hangzhou.aliyuncs.com/gmaaa123/busybox:1.999
registry.cn-hangzhou.aliyuncs.com/gmaaa123/busybox:1.999:                         resolved       |++++++++++++++++++++++++++++++++++++++| 
manifest-sha256:557cc2302c0ae328d99ca9f7ed8c96928034a5f94a7432f95dbc41a9740a123f: done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:ff69b8070e65ef902da17038ea9821d3bfaf74cd2afcf0ceb1b2df365930cecb:   done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:db2e1e3b46c0af1ae524f68073dccd02b5b10a0388a7b3a3f1617ee996376c34:    done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 18.7s                                                                    total:  2.1 Mi (115.6 KiB/s)                                     
unpacking linux/amd64 sha256:557cc2302c0ae328d99ca9f7ed8c96928034a5f94a7432f95dbc41a9740a123f...
done: 128.981892ms	
[root@localhost /]# 

2.查看本地镜像

ctr image list | grep "busybox"

运行结果

[root@testmachine/]# 
[root@testmachine/]# ctr image list | grep "busybox"
registry.cn-hangzhou.aliyuncs.com/gmaaa123/busybox:1.999           application/vnd.docker.distribution.manifest.v2+json      sha256:557cc2302c0ae328d99ca9f7ed8c96928034a5f94a7432f95dbc41a9740a123f 2.1 MiB  linux/amd64                                                                                             -      
[root@testmachine/]# 

3.运行容器,查看输出结果 (--rm运行后删除容器)

ctr -n default run --rm registry.cn-hangzhou.aliyuncs.com/gmaaa123/busybox:1.999 busybox

运行结果

[root@testmachine /]# 
[root@testmachine /]# ctr -n default run --rm registry.cn-hangzhou.aliyuncs.com/gmaaa123/busybox:1.999 busybox
hello,busybox
[root@testmachine /]# 

到此结束,在containerd.io 环境中,进行镜像构建并发布到镜像仓库中实战成功!

kaniko官方github页面 https://github.com/GoogleContainerTools/kaniko

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/925990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习基础11-算法比较(基于印第安糖尿病Pima Indians 数据集)

比较不同算法的准确度&#xff0c;选择合适的算法&#xff0c;在处理机器学习的问题时是非常重要的。本节将介绍一种模式&#xff0c;在scikit-learn中可以利用它比较不同的算法&#xff0c;并选择合适的算法。你可以将这种模式作为自己的模板&#xff0c;来处理机器学习的问题…

如何备份系统?很简单,2个方法教会你!

在计算机使用过程中&#xff0c;系统故障、病毒攻击、意外损坏等问题可能导致数据丢失和系统无法正常运行。为了保障数据安全和系统稳定&#xff0c;如何备份系统是至关重要的。本文将介绍备份系统的2个方法&#xff0c;帮助用户轻松备份系统&#xff0c;确保数据的安全和系统的…

什么是网络中的服务质量 (QoS),其相关技术和关键指标有哪些?

QoS&#xff08;Quality of Service&#xff0c;服务质量&#xff09;指一个网络能够利用各种基础技术&#xff0c;为指定的网络通信提供更好的服务能力&#xff0c;是网络的一种安全机制&#xff0c;是用来解决网络延迟和阻塞等问题的一种技术。QoS的保证对于容量有限的网络来…

MES管理系统解决方案,助力汽配企业打造透明化管理

随着汽车行业的不断发展&#xff0c;汽配行业面临着越来越严格的质量要求和生产效率提升挑战。为了满足这些需求&#xff0c;汽配企业需要实现生产过程的透明化和精细化。MES管理系统解决方案作为生产过程的核心管理系统&#xff0c;可以为汽配企业提供全面的解决方案&#xff…

ubuntu22.04安装搜狗输入法后始终无法输入中文

这次真的整我很久很久&#xff0c;我都不想用搜狗输入法了&#xff0c;结果无意间还是被我解决了。 ubuntu22.04安装搜狗输入法的步骤参考官网给的文档就行&#xff0c;这里我只说我的为啥输入不了中文 点击Fcitx配置 把搜狗输入法个人版放在第一位就行(我的系统语言是中文&am…

思维导图的作用有哪些?了解一下这几个作用

思维导图的作用有哪些&#xff1f;思维导图是一种以图形和颜色为主要表现形式的思维工具&#xff0c;它可以帮助人们更好地组织和表达思想。它的作用有很多&#xff0c;下面就给大家简单介绍一下。 1、帮助记忆 思维导图可以将大量信息整合到一个图形中&#xff0c;这有助于人…

一次由摔碎手机屏幕导致的急速搬家

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦midjourney 产品统筹 / bobo 想问问大家&#xff0c;都在什么情况下搬过家&#xff1f; 有的时候搬家是迫不得已&#xff0c;房东突然发难&#xff1b; 有的时候搬…

MyBatis分页插件PageHelper的使用及MyBatis的特殊符号---详细介绍

一&#xff0c;分页的概念 分页是一种将大量数据或内容分割成多个页面以便逐页显示的方式。在分页中&#xff0c;数据被分割成一定数量的页&#xff0c;每页显示一部分数据或内容&#xff0c;用户可以通过翻页或跳分页是一种将大量数据或内容分割成多个页面以便逐页显示的方式。…

深入浅出 RPC框架

RPC 框架分层设计 01 基本概念 1.1 本地函数调用 以上步骤只是为了说明原理。事实上编译器经常会做优化&#xff0c;对于参数和返回值少的情况会直接将其存放在寄存器&#xff0c;而不需要压栈弹栈的过程&#xff0c;甚至都不需要调用call&#xff0c;而直接做inline操作 1.2 远…

Forrester首次面向中国的开源报告:阿里云在云原生领域开源布局最全面

Forrester 于近期发布了《Navigate The Cloud-Native Ecosystem In China, 2023》&#xff0c;报告概述了中国云原生领域的开源项目对构建云原生生态的促进作用&#xff0c;这些开源项目正深刻影响着企业的技术决策者以何种策略拥抱云原生这一现代 IT 基础设施的核心。 报告表…

SMC状态机 讲解2 从模型到SMC

SMC状态机 讲解2 从模型到SMC 1、实例化有限状态机&#xff08;FSM)2、简单转换 Simple Transition3、外部环回转换 External Loopback Transition4、内部环回转换 Internal Loopback Transition5、转换动作6、转换Guard7、转换参数8、Entry 和 Exit动作9、Push 转换10、Pop转换…

AI加持,创意设计效率百倍提升,探秘背后的数字化魔法

在当今创新潮流不断涌现的时代&#xff0c;人工智能正以惊人的速度和深度赋能各行各业&#xff0c;食品包装设计界也已来到了一个“拼创意、拼二创和拼审美”的时代。有了AI的加入&#xff0c;设计界正迎来一股AI创意风暴&#xff0c;不仅颠覆了设计流程&#xff0c;更为食品包…

机器学习教程(非常详细)从零基础入门到精通,看完这一篇就够了

一、机器学习的定义 从广义上来说&#xff0c;机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义上来说&#xff0c;机器学习是一种通过利用数据&#xff0c;训练出模型&#xff0c;然后使用模型预测的一种方法。 “训练”与“…

在leangoo免费敏捷工具中如何批量设置成员权限

Leangoo领歌是一款永久免费的专业敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、缺陷管理、统计度量等。 包括小型团队敏捷开发&#xff0c;规模化敏捷SAFe&#xff0c;Scrum of Scrums大规模敏捷。其功能/解…

java包的package-info.java文件

Java包的下面可以放一个package-info.java文件&#xff0c;在这个文件中声明包&#xff0c;在注释中增加包的介绍信息。这样javadoc工具就可以优先从这个文件中获取包的介绍信息。 例如Java工程&#xff0c;在包com.thb下面有package-info.java文件&#xff1a; package-inf…

优秀产品奖!移远5G RedCap模组,让5G真正“轻”下来

8月24日&#xff0c;在通信世界全媒体主办的“5G RedCap技术与物联网应用创新研讨会”上&#xff0c;“5G RedCap优秀产品和解决方案”获奖名单发布&#xff0c;移远通信5G RedCap模组Rx255C系列以其在创新性、实用性、经济性、成熟性等方面的综合领先优势&#xff0c;获此殊荣…

Spring Boot进阶(58):集成PostgreSQL数据库及实战使用 | 万字长文,超级详细

1. 前言&#x1f525; PostgreSQL是一种广泛使用的开源关系型数据库&#xff0c;具有可靠性高、性能优异、拥有丰富的数据类型和扩展等优点&#xff0c;越来越多的企业和开发者开始使用它来存储和管理数据。而Spring Boot是一种快速开发的框架&#xff0c;可以简化开发过程并提…

照片怎么转换成pdf?几种照片转pdf方法看一看

照片怎么转换成pdf&#xff1f;照片转换成PDF是一个非常有用的技能&#xff0c;可以将多张照片合并为一个文件&#xff0c;方便保存和分享。现在也有很多方法可以将照片转换为PDF&#xff0c;下面就给大家介绍几种转换方法。 转换方法一&#xff1a;迅捷PDF转换器 这是一款功能…

GPT---1234

GPT:《Improving Language Understanding by Generative Pre-Training》 下载地址:https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdfhttps://cdn.openai.com/research-covers/language-unsupervised/language_understa…

前端遇到困扰怎么办?10年前端在线帮您解决问题,只需一杯下午茶

前端遇到困扰怎么办&#xff1f;10年前端在线帮您解决问题&#xff0c;只需一杯下午茶