首页 > 其他分享 >kaniko 基础

kaniko 基础

时间:2023-12-02 20:11:05浏览次数:21  
标签:缓存 tar -- image cache 基础 kaniko

kaniko 概述

kaniko是一个从Dockerfile构建容器镜像的工具,可以在容器或Kubernetes集群中使用。
kaniko不依赖于Docker守护进程,并且完全在用户空间中执行Dockerfile中的每个命令。
Kaniko是作为image运行: gcr.io/kaniko-project/executor

kaniko Build Contexts

运行 kaniko 时,使用--context前缀标志来指定构建上下文的位置.

kaniko Build Contexts 存储位置

Source Prefix Example
Local Directory dir://[path to a directory in the kaniko container] dir:///workspace
Local Tar Gz tar://[path to a .tar.gz in the kaniko container] tar:///path/to/context.tar.gz
Standard Input tar://[stdin] tar://stdin
GCS Bucket gs://[bucket name]/[path to .tar.gz] gs://kaniko-bucket/path/to/context.tar.gz
S3 Bucket s3://[bucket name]/[path to .tar.gz] s3://kaniko-bucket/path/to/context.tar.gz
Azure Blob Storage https://[account].[azureblobhostsuffix]/[container]/[path to .tar.gz] https://myaccount.blob.core.windows.net/container/path/to/context.tar.gz
Git Repository git://[repository url][#reference][#commit-id] git://github.com/acme/myproject.git#refs/heads/mybranch#<desired-commit-id>

kaniko Caching

Caching Layers

kaniko可以在远程存储库中缓存由RUN(--cache-run-layers)和COPY(--cache-copy-layers)命令创建的层。在执行命令之前,kaniko会检查该层的缓存。如果存在,kaniko将提取缓存层,而不是执行命令。如果没有,kaniko将执行该命令,然后将新创建的层推送到缓存中。
kaniko不能在缓存丢失后从缓存中读取层:一旦在缓存中没有找到一个层,所有后续层都在本地构建,而不需要咨询缓存。
用户可以通过设置--cache=true标志来启用缓存。可以通过--cache-repo标志提供用于存储缓存层的远程存储库。如果未提供此标志,则将从提供的--destination推断出缓存的repo。

Caching Base Images

Kaniko可以在本地目录中缓存图像,该目录可以卷挂载到Kaniko pod中。要做到这一点,必须首先填充缓存,因为它是只读的。
docker run -v $(pwd):/workspace gcr.io/kaniko-project/warmer:latest --cache=true --cache-dir=/workspace/cache --image=<image to cache> --image=<another image to cache>
docker run -v $(pwd):/workspace gcr.io/kaniko-project/warmer:latest --cache=true --cache-dir=/workspace/cache --dockerfile=<path to dockerfile>
docker run -v $(pwd):/workspace gcr.io/kaniko-project/warmer:latest --cache=true --cache-dir=/workspace/cache --dockerfile=<path to dockerfile> --build-arg version=1.19

kaniko 常用参数

--build-arg: 构建时传参
--cache:     启用缓存,可用值:true
--cache-dir: base image 本地缓存目录。默认/cache。需要和--cache=true一起使用。
--cache-repo:设置缓存层的远程仓库。默认在--destination值下的/cache目录。
--cache-copy-layers: 缓存复制层。
--cache-run-layers:  缓存运行层。默认为true。
--cache-ttl duration:缓存超时时间(h),默认两周。
--compressed-caching:对缓存层进行tar压缩,默认为true。这将增加构建的运行时间,但会减少内存使用量。在资源不足时启用。
--context-sub-path:  上下文子目录。
--custom-platform:   指定构建平台。可选值:linux/arm、linux/arm/v5 ...。
--dockerfile:        Dockerfile路径。默认Dockerfile。
--label:             为image设置标签。
--log-format:        设置日志格式。默认为color。
-log-timestamp:      将时间戳添加到日志。默认为false。
--no-push:           只构建image不进行推送。
--push-retry:        推送image到仓库的重试次数。
--registry-mirror:   设置image仓库地址。
--image-download-retry: 下载image重试次数。默认为0。

kaniko 使用私有git repo

使用Personal Access Tokens访问git repo。
git://[email protected]/acme/myproject.git#refs/heads/mybranch

kaniko push image到docker hub

生成docker hub账号信息

config.json

{
  "auths": {
    "https://index.docker.io/v1/": {
      "auth": "xxxxxxxxxxxxxxx"  # echo -n USER:PASSWORD | base64
    }
  }
}

push image 到 docker hub

docker run -ti --rm -v `pwd`:/workspace -v `pwd`/config.json:/kaniko/.docker/config.json:ro gcr.io/kaniko-project/executor:latest --dockerfile=Dockerfile --destination=yourimagename

kaniko 使用示例

在kubernetes中运行

apiVersion: v1
kind: Pod
metadata:
  name: kaniko
spec:
  containers:
    - name: kaniko
      image: gcr.io/kaniko-project/executor:latest
      args:
        - "--dockerfile=<path to Dockerfile within the build context>"
        - "--context=gs://<GCS bucket>/<path to .tar.gz>"
        - "--destination=<gcr.io/$PROJECT/$IMAGE:$TAG>"
      volumeMounts:
        - name: kaniko-secret
          mountPath: /secret
      env:
        - name: GOOGLE_APPLICATION_CREDENTIALS
          value: /secret/kaniko-secret.json
  restartPolicy: Never
  volumes:
    - name: kaniko-secret
      secret:
        secretName: kaniko-secret

以docker方式运行

docker run \
    -v "$HOME"/.config/gcloud:/root/.config/gcloud \
    -v /path/to/context:/workspace \
    gcr.io/kaniko-project/executor:latest \
    --dockerfile /workspace/Dockerfile \
    --destination "gcr.io/$PROJECT_ID/$IMAGE_NAME:$TAG" \
    --context dir:///workspace/

参考文档

https://github.com/GoogleContainerTools/kaniko

标签:缓存,tar,--,image,cache,基础,kaniko
From: https://www.cnblogs.com/wangguishe/p/17871616.html

相关文章

  • 循环,字符串,基础文件操作的用法
    Task06:循环Loopand字符串string循环Loopfor循环defsumFromMToN(m,n):total=0#注意:range(x,y)是左闭右开区间,包含x,不包含yforxinrange(m,n+1):total+=xreturntotarange(m,n)左开右闭从m遍历到n-1sumFromMToN(5,10)45r......
  • 学习C语言必备的基础知识详解
    (⽬录)前言学习C语言的第一步,肯定是要先去学习了解一下相关的概念和符号,我们写的代码就是由一堆规定好的有特殊含义的符号组成的。1、数据类型C语言的数据类型细分出来会有很多种,每种数据类型占内存大小都不同,对于刚接触编程语言的人来说,确实很让人头疼。其实存在这么多的类型,......
  • 2023-2024-1 20231321王曦轶 《计算机基础与程序设计》第十周学习总结
    2023-2024-120231321王曦轶《计算机基础与程序设计》第十周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2023-2024-1计算机基础与程序设计第一周作业)这个作业的目标<计算机科学......
  • 前端学习-JavaScript学习-js基础-API02-轮播图案例
    自己写的<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title>......
  • .Net实验一 语言基础
    一、实验目的熟悉VisualStido.NET实验环境;掌握控制台程序的编写方法;掌握C#程序设计语言的语法基础;掌握控制语句和数组的使用。二、实验要求根据题目要求,编写C#程序,并将程序代码和运行结果写入实验报告。三、实验内容编写一个控制台应用程序,输入三角形或者长方形边长,计......
  • 人工智能基础 - 机器学习工作流程
    什么是机器学习机器学习是从数据中自动分析获得模型,并利用模型对未知数据进行预测。机器学习工作流程1.获取数据集2.数据基本处理3.特征工程4.机器学习(模型训练)5.模型评估结果达到要求,上线服务没有达到要求,重新上面步骤获取数据集在数据集中一般:一行数据我们称为一个样本一列数据我......
  • 《计算机基础与程序设计》第10周学习总结
    学期(2023-2024-1)学号(20231327)《计算机基础与程序设计》第10周学习总结作业信息课程<班级的链接>(2023-2024-1-计算机基础与程序设计)要求<作业要求的链接>(2023-2024-1计算机基础与程序设计第10周作业目标<了解文件系统和目录以及字符串的使用>作业正文https:......
  • 2023-2024-1 20231323《计算机基础与程序设计》第十周学习总结
    2023-2024-120231323《计算机基础与程序设计》第十周学习总结作业信息所属课程2023-2024-1-计算机基础与程序设计作业要求2023-2024-1计算机基础与程序设计第周作业作业目标自学教材《计算机科学概论》第12,13,14章《C语言程序设计》第9章并完成云班课测试作业......
  • 2023-2024-1 20231420 《计算机基础与程序设计》第十周学习总结
    2023-2024-120231420《计算机基础与程序设计》第十周学习总结1.作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业要求在哪里2023-2024-1计算机基础与程序设计第十周作业这个作业的目标1.学习《计算机科学概论》第12,13,14章并完成云班课......
  • 【scikit-learn基础】--概述
    Scikit-learn是一个基于Python的开源机器学习库,它提供了大量的机器学习算法和工具,方便用户进行数据挖掘、分析和预测。Scikit-learn是基于另外两个知名的库Scipy和Numpy的,关于Scipy和Numpy等库,之前的系列文章中有介绍:Scipy基础系列Numpy基础系列1.概要自从AlphaG......