首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以将kaniko添加到高山图像,也可以将jq添加到kaniko图像中。

可以将kaniko添加到高山图像,也可以将jq添加到kaniko图像中。
EN

Stack Overflow用户
提问于 2021-09-14 17:53:30
回答 2查看 2.7K关注 0票数 5

这就是我如何使用kaniko在我的gitlab CI中建立对接图像,这是很好的工作。

但是我需要读取一个json文件才能得到一些值。因此,我需要访问jq

..gilab ci.yml

代码语言:javascript
复制
deploy:
  stage: deployment
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    - mkdir -p /kaniko/.docker
    - echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(echo -n ${CI_REGISTRY_USER}:${CI_REGISTRY_PASSWORD} | base64)\"}}}" > /kaniko/.docker/config.json
    - |
      /kaniko/executor \
        --context $CI_PROJECT_DIR \
        --dockerfile $CI_PROJECT_DIR/app/Dockerfile \
        --destination $CI_REGISTRY_IMAGE/app:latest \
      done
    - jq # <- Is not working, as jq is not installed

是否可以将jq添加到映像中,以避免在此阶段始终重复安装jq?

在所有其他阶段,我使用我自己的高山图像,我在我的CI管道中添加了我所需要的一切。因此,另一个选择是在这个图像中添加kaniko --如果可能的话。这将导致一个图像,其中包含所有所需的实用程序。

Dockerfile

代码语言:javascript
复制
FROM alpine:3.14.2

RUN apk --update add \
  bash \
  curl \
  git \
  jq \
  npm
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.21.4/bin/linux/amd64/kubectl
RUN chmod u+x kubectl && mv kubectl /bin/kubectl
# Add kaniko to this image??
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-20 08:16:33

官方的Kaniko映像是使用独立的Go二进制文件从scratch构建的(参见Kaniko的GitHub存储库中的Dockerfile)。您可以从官方图像中重用相同的二进制文件,并将它们复制到您的图像中,例如:

代码语言:javascript
复制
# 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 AS kaniko

FROM alpine:3.14.2

RUN apk --update add \
  bash \
  curl \
  git \
  jq \
  npm
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.21.4/bin/linux/amd64/kubectl
RUN chmod u+x kubectl && mv kubectl /bin/kubectl

#
# 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 /kaniko/docker-credential-acr
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将是:

代码语言:javascript
复制
FROM gcr.io/kaniko-project/executor:debug AS kaniko

FROM alpine:3.14.2

RUN apk --update add \
  bash \
  curl \
  git \
  jq \
  npm
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.21.4/bin/linux/amd64/kubectl
RUN chmod u+x kubectl && mv kubectl /bin/kubectl

#
# Add kaniko to this image by re-using binaries and steps from official image
#
COPY --from=kaniko /kaniko/ /kaniko/
COPY --from=kaniko /kaniko/warmer /kaniko/warmer
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 /kaniko/docker-credential-acr
COPY --from=kaniko /kaniko/.docker /kaniko/.docker
COPY --from=busybox:1.32.0 /bin /busybox

ENV PATH $PATH:/usr/local/bin:/kaniko:/busybox
ENV DOCKER_CONFIG /kaniko/.docker/
ENV DOCKER_CREDENTIAL_GCR_CONFIG /kaniko/.config/gcloud/docker_credential_gcr_config.json

请注意,您需要使用gcr.io/kaniko-project/executor:debug (最新版本)或gcr.io/kaniko-project/executor:v1.6.0-debug作为源(或另一个标记)。

经过测试,构建一个小图像,似乎工作得很好:

代码语言:javascript
复制
# Built above example with docker build . -t kaniko-alpine
# And ran container with docker run -it kaniko-alpine sh
echo "FROM alpine" > Dockerfile
echo "RUN echo hello" >> Dockerfile
echo "COPY Dockerfile Dockerfile" >> Dockerfile

executor version
executor -c . --no-push

# Output like:
#
# Kaniko version :  v1.6.0
#
# INFO[0000] Retrieving image manifest alpine             
# INFO[0000] Retrieving image alpine from registry index.docker.io 
# INFO[0000] GET KEYCHAIN                                 
# [...] 
# INFO[0001] RUN echo hello                               
# INFO[0001] Taking snapshot of full filesystem...        
# INFO[0001] cmd: /bin/sh                                 
# INFO[0001] args: [-c echo hello]                        
# INFO[0001] Running: [/bin/sh -c echo hello]             
# [...]

请注意,在官方映像之外使用Kaniko二进制文件是不建议,尽管它仍然可以正常工作:

kaniko是作为图像运行的:gcr.io/kaniko-project/executor。我们不建议在另一个映像中运行kaniko执行程序二进制文件,因为它可能无法工作。

票数 6
EN

Stack Overflow用户

发布于 2022-05-06 08:10:11

我也有同样的需求,因为图像被用作Gitlab CI中工作的基础。我得做些小小的修改才能让它正常工作。如果有帮助的话,这里是我的版本(在我的例子中不需要kubectl,我只需要在同一个容器中运行kaniko和空库):

  • 添加了libcap来解决这个问题:在集装箱中运行Vault时“不允许操作”只在不使用保险库作为服务器时才安全。
  • 添加缺失的env变量SSL_CERT_DIR
  • 移除Busybox (不再需要了,因为我们正在运行一个高山容器)
  • 可选的kaniko执行器入口点
代码语言:javascript
复制
FROM gcr.io/kaniko-project/executor:debug AS kaniko
FROM alpine:3.14.2

RUN apk --update add jq vault libcap
RUN setcap cap_ipc_lock= /usr/sbin/vault

COPY --from=kaniko /kaniko/ /kaniko/

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
ENV SSL_CERT_DIR /kaniko/ssl/certs

#ENTRYPOINT ["/kaniko/executor"]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69182455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档