背景
kaniko官网: github.com/GoogleContainerTools/kaniko
官方的kaniko 镜像没有shell,如果要在一个step里执行shell 命令,需要自定义镜像,如果在tekton 的task中,在一个step中执行多个任务,比如先wget下载代码,然后使用kaniko打包镜像,推送,然后curl 一个webhook接口,那么就需要自定义一个包含支持shell 的wget,curl命令和kaniko的镜像。
自定义镜像
可以基于Linux的最小发行镜像alpine整合kaniko二进制文件进行自定义,alpine支持bash命令行,然后下载想要的命令,比如wget,curl等,在把官方kaniko镜像的二进制文件COPY到alpine镜像里。
步骤:
1:装好docker服务
2:下载官方的kaniko镜像,截止23年10月25日,官方最新版本是1.17.0
如果无法科学上网的同学,可以下载 cloud.189.cn/web/share?code=yUziUv3MRZba(访问码:oj7v,自行加上hxxps协议头)
下载后文件名为kaniko.v1.17.0.gz,自行docker load < kaniko.v1.17.0.gz 即可
可以使用docker images 查看load进去的镜像为 gcr.io/kaniko-project/executor:v1.17.0
3:构建镜像
生成以下Dockerfile,保存为Dockerfile,这里除了引入alpine,还安装了wget,curl ,更新了coreutils
# Use this FROM instruction as shortcut to use --copy=from kaniko below
# It's also possible to use directly COPY --from=gcr.io/kaniko-project/executor
FROM gcr.io/kaniko-project/executor:v1.17.0 AS kaniko
FROM alpine:3.18.4
# 将 alpine linux apk 的安装源改为国内镜像可解决
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk --no-cache add --update wget curl coreutils && rm -rf /var/cache/apk/*
# Add kaniko to this image by re-using binaries and steps from official image
COPY --from=kaniko /kaniko/executor /kaniko/executor
COPY --from=kaniko /kaniko/docker-credential-gcr /kaniko/docker-credential-gcr
COPY --from=kaniko /kaniko/docker-credential-ecr-login /kaniko/docker-credential-ecr-login
COPY --from=kaniko /kaniko/docker-credential-acr-env /kaniko/docker-credential-acr-env
COPY --from=kaniko /etc/nsswitch.conf /etc/nsswitch.conf
COPY --from=kaniko /kaniko/.docker /kaniko/.docker
ENV PATH $PATH:/usr/local/bin:/kaniko
ENV DOCKER_CONFIG /kaniko/.docker/
ENV DOCKER_CREDENTIAL_GCR_CONFIG /kaniko/.config/gcloud/docker_credential_gcr_config.json
在Dockerfile 路径执行
docker build -t kaniko-tool:v1.17.0 .
出现以下显示,说明自定义镜像完成
用docker images命令可以自定义的镜像大小81.5MB,比shell-tool,基于alpine (7.34MB) 安装 wget,curl的40.5M,和kaniko 1.17.0的67.7M 加起来小
测试自定义镜像
可以直接用docker run,
或者把镜像推送到k8s的harbor后,在k8s用以下命令运行(这里推送到faas的仓库)
kubectl run -i -t --rm kaniko-tool --image=33.0.0.15:30012/faas/kaniko-tool:v1.17.0 --namespace=default