Sign inSign up

weiyigeek/kaniko-executor

By weiyigeek

Updated almost 3 years ago

kaniko 是一个在容器或 Kubernetes 集群内从 Dockerfile 构建容器镜像的工具 ( Build Container Images In Kubernetes )

Image
1

176

weiyigeek/kaniko-executor repository overview

关注「WeiyiGeek」公众号

设为「特别关注」每天带你玩转网络安全运维、应用开发、物联网IOT学习!

希望各位看友【关注、点赞、评论、收藏、投币】,助力每一个梦想。

[-] 作者主页:https://www.weiyigeek.top

[-] 作者博客:https://blog.weiyigeek.top


0x00 前言简述

快速介绍

什么是Kaniko?

kaniko 是一个在容器或 Kubernetes 集群内从 Dockerfile 构建容器镜像的工具 ( Build Container Images In Kubernetes )。

温馨提示: kaniko不是谷歌官方发布支持的产品.

为啥用Kaniko?

由于 kaniko 不依赖于 Docker 守护进程,并且完全在用户空间中执行 Dockerfile 中的每个命令。这使得能够在轻松或安全地运行在无Docker守护程序的环境(如标准Kubernetes集群 V1.24.x)中构建容器映像。

Kaniko是如何工作的? kaniko 执行器镜像负责从 Dockerfile 构建镜像并将其推送到注册表,其流程大致如下:

  • 首先在执行者图像中,我们提取基础镜像的文件系统(Dockerfile 中的 FROM 镜像)。
  • 其次我们执行 Dockerfile 中的命令,之后在用户空间中对文件系统进行快照每一个。
  • 然后在每个命令之后,我们将一层更改的文件附加到基础 图像(如果有)并更新图像元数据。

Kaniko已知功能问题

  • kaniko 不支持构建 Windows 容器。
  • kaniko 不支持 v1 Registry API。(由于其不安全性当前基本都是使用V2协议, 例如 Harbor)
  • kaniko 不支持在除官方kaniko映像之外的任何Docker映像中运行二进制Kanico可执行文件(即YMMV)。
参考来源

项目地址: https://github.com/GoogleContainerTools/kaniko 图像镜像仓库: gcr.io/kaniko-project/executor 国内镜像: weiyigeek/kaniko-executor:latest


小试牛刀之在containerd.io中构建并发布镜像

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

环境说明

$ lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:        20.04
Codename:       focal

$ containerd -v
containerd containerd.io 1.4.12 7b11cfaabd73bb80907dd23182b9347b4245eb5d

$ ctr -v
ctr containerd.io 1.4.12

温馨提示: 此处使用的是 Ubuntu 20.04 操作系统, 该系统已做安全加固和内核优化符合等保2.0要求【SecOpsDev/Ubuntu-InitializeSecurity.sh at master · WeiyiGeek/SecOpsDev 】, 如你的Linux未进行相应配置环境可能与读者有些许差异, 如需要进行(windows server、Ubuntu、CentOS)安全加固请参照如下加固脚本进行加固, 请大家疯狂的star 。 加固脚本地址:【 https://github.com/WeiyiGeek/SecOpsDev/blob/master/OS-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Linux/Ubuntu/Ubuntu-InitializeSecurity.sh

温馨提示:如果你使用的是最新 Ubuntu 22.04 操作系统,并需要对其安全加固和内核优化以满足等保2.0要求可参考如下加固脚本 【https://github.com/WeiyiGeek/SecOpsDev/tree/master/OperatingSystem/Security/Ubuntu】。

Ubuntu 22.04加固脚本示例图


操作流程

步骤 01.此处假设你已经安装配置好containerd.io了,如果没有安装配置请参考此篇文章【 1.Containerd容器运行时初识与尝试 - https://blog.weiyigeek.top/2021/6-27-570.html 】,此处不再累述。

步骤 02.验证 containerd.io 服务状态以及提前拉取 kaniko-executor:latest 镜像以加快构建速度,此处将镜像拉到默认的名称空间下。

$ systemctl status containerd.service
● containerd.service - containerd container runtime
     Loaded: loaded (/lib/systemd/system/containerd.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-09-08 11:48:30 CST; 4h 49min ago
       Docs: https://containerd.io
    Process: 561811 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
   Main PID: 561812 (containerd)
      Tasks: 106
     Memory: 4.0G

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

步骤 03.准备登录 hub docker 的账号以及密码,你可以按照下述的流程进行生成config.json文件。

mkdir /storage/dev/soft/kaniko/{config,demo1}
cd /storage/dev/soft/kaniko/config
# 生成认证所需的凭据
# BASE64 编码,注意下述为格式为 你的hub账号:你的hub密码
AUTH=$(echo -n "weiyigeek:password" | base64)
# BASE64 解码
echo ${AUTH} | base64 -d
# 使用该方法可以解析变量 AUTH (值得注意)
cat > config.json <<EOF
{
  "auths": {
    "https://index.docker.io/v1/": {
        "auth": "${AUTH}"
    }
  }
}
EOF

# 生成结果
cat config.json
{
  "auths": {
    "https://index.docker.io/v1/": {
        "auth": "d2VpeWlnZ************AxOQ=="
    }
  }
}

步骤 04.准备dockerfile文件,此处将busybox:1.35.0镜像重新构建后上传到我的账户下的hub仓库中,该文件示例如下:

cd /storage/dev/soft/kaniko/demo1
tee dockerfile <<'EOF'
FROM docker.io/library/busybox:1.35.0
LABEL [email protected] BUILDTOOLS=kaniko BUILDENV=containerd.io;
ENTRYPOINT ["/bin/sh", "-c", "echo hello,busybox"]
EOF

步骤 05.当上述都准备完成后我们便可以执行containerd.io提供的ctr客户端工具直接创建容器,例如如下命令:

ctr -n default run --rm --net-host --env DOCKERHUB=docker.io \
--mount type=bind,src=/storage/dev/soft/kaniko/config,dst=/kaniko/.docker,options=rbind:ro \
--mount type=bind,src=/storage/dev/soft/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=docker.io/weiyigeek/busybox:1.35.0

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

执行结果:

INFO[0002] Retrieving image manifest docker.io/library/busybox:1.35.0
INFO[0002] Retrieving image docker.io/library/busybox:1.35.0 from registry index.docker.io
INFO[0006] Built cross stage deps: map[]
INFO[0006] Retrieving image manifest docker.io/library/busybox:1.35.0
INFO[0006] Returning cached image manifest
INFO[0006] Executing 0 build triggers
INFO[0006] Building stage 'docker.io/library/busybox:1.35.0' [idx: '0', base-idx: '-1']
INFO[0006] Skipping unpacking as no commands require it.
INFO[0006] LABEL [email protected] BUILDTOOLS=kaniko BUILDENV=containerd.io;
INFO[0006] Applying label [email protected]
INFO[0006] Applying label BUILDTOOLS=kaniko
INFO[0006] Applying label BUILDENV=containerd.io;
INFO[0006] ENTRYPOINT ["/bin/sh", "-c", "echo hello,busybox"]
INFO[0006] Pushing image to docker.io/weiyigeek/busybox:1.35.0
INFO[0010] Pushed index.docker.io/weiyigeek/busybox@sha256:d6ed480cc7864b9e19b40f09263abfad4689a9244a5abeb2e3eaf14a439cc55f

步骤 06.查看上传到docker hub中 的 busybox:1.35.0 镜像信息以及拉取到本地进行运行测试验证。

ctr -n default images pull docker.io/weiyigeek/busybox:1.35.0
ctr -n default run --rm docker.io/weiyigeek/busybox:1.35.0 busybox
hello,busybox

WeiyiGeek.在containerd.io进行镜像构建并发布到hub中

至此,在containerd.io 环境中,进行镜像构建并发布到hub中实践完毕!


WeiyiGeek Blog 个人博客 - 为了能到远方,脚下的每一步都不能少 】

欢迎各位志同道合的朋友一起学习交流【点击加入交流群】,如文章有误请在下方留下您宝贵的经验知识!

作者主页: 【 https://weiyigeek.top】 博客地址: 【 https://blog.weiyigeek.top 】

WeiyiGeek Blog 博客 - 为了能到远方,脚下的每一步都不能少

专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注,转个发,留个言】(人间六大情),这将对我的肯定,谢谢!。

  • echo "【点个赞】,动动你那粗壮的拇指或者芊芊玉手,亲!"

  • printf("%s", "【投个币】,万水千山总是情,投个硬币行不行,亲!")

  • fmt.Printf("【收个藏】,阅后即焚不吃灰,亲!")

  • console.info("【转个发】,让更多的志同道合的朋友一起学习交流,亲!")

  • System.out.println("【关个注】,后续浏览查看不迷路哟,亲!")

  • cout << "【留个言】,文章写得好不好、有没有错误,一定要留言哟,亲! " << endl;

更多网络安全、系统运维、应用开发、物联网实践、网络工程、全栈文章,尽在 https://blog.weiyigeek.top 之中,谢谢各位看又支持!

Tag summary

Content type

Image

Digest

sha256:956b89aed

Size

28.3 MB

Last updated

almost 3 years ago

docker pull weiyigeek/kaniko-executor:v1.13.0