kaniko 概述
kaniko是一个从Dockerfile构建容器镜像的工具,可以在容器或Kubernetes集群中使用。
kaniko不依赖于Docker守护进程,并且完全在用户空间中执行Dockerfile中的每个命令。
Kaniko是作为image运行: gcr.io/kaniko-project/executor
kanikoBuild Contexts
运行 kaniko 时,使用--context前缀标志来指定构建上下文的位置.
kaniko Build Contexts 存储位置
Source |
Prefix |
Example |
Local Directory |
dir://[path to a directo服务器托管网ry in the kaniko container] |
|
Local Tar Gz |
tar://[path to a .tar.gz in the kaniko container] |
|
Standard Input |
tar://[stdin] |
|
GCS Bucket |
gs://[bucket name]/[path to .tar.gz] |
|
S3 Bucket |
s3://[bucket name]/[path to .tar.gz] |
|
Azure Blob Storage |
https://[account].[azureblobhostsuffix]/[container]/[path to .tar.gz] |
|
Git Repository |
git://[repository url][#reference][#commit-id] |
|
kanikoCaching
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=
docker run -v $(pwd):/workspace gcr.io/kaniko-project/warmer:latest --cache=true --cache-dir=/workspace/cache --dockerfile=
docker run -v $(pwd):/workspace gcr.io/kaniko-project/warmer:latest --cache=true --cache-dir=/workspace/cache --dockerfile= --build-arg version=1.19
kaniko 使用私有git repo
使用Personal Access Tokens访问git repo。
git://TOKEN@github.com/acme/myproject.git#refs/heads/mybranch
or
提供: GIT_USERNAME and GIT_PASSWORD
http://GIT_USERNAME:GIT_PASSWORD@github.com/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 常用参数
--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 使用示例
在kubernetes中运行
apiVersion: v1
kind: Pod
metadata:
name: kaniko
spec:
containers:
- name: kaniko
image: gcr.io/kaniko-project/executor:latest
args:
- "--dockerfile="
- "--context=gs:///"
- "--destination="
服务器托管网 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
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
习题八:打印两个数的最大公约数 #include int main() { int r = 0; int a = 0; int b = 0; printf(“输入a b(必须a大于b)”); scanf(“%d%d”, &a, 服务器托管网&b…