首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Buildah vs Kaniko

Buildah vs Kaniko
EN

Stack Overflow用户
提问于 2021-11-26 14:49:27
回答 2查看 629关注 0票数 0

我正在使用ArgoWorkflow自动化我们的CI/CD链。为了构建镜像,并将它们推送到我们的私有注册表,我们面临着在buildah或kaniko之间的选择。但我不能指出两者之间的主要区别。优点和缺点,以及这些工具如何处理并行构建和缓存管理。有人能澄清这几点吗?或者甚至建议另一个工具,也许可以用一种更简单的方式完成这项工作。对这个问题进行一些澄清将是非常有帮助的。提前谢谢。

EN

Stack Overflow用户

发布于 2021-11-26 18:29:51

kaniko的设置非常简单,并且有一些魔法,可以让它在kubernetes中不需要任何要求就能工作:)

我也尝试过buildah,但无法对其进行配置,并且发现在kubernetes环境中设置它太复杂。

您可以使用内部Docker注册表作为kaniko的缓存管理,但也可以改为配置本地存储(尚未尝试)。只需使用最新版本的kaniko (v1.7.0),它修复了缓存层管理中的一个重要错误。

以下是我在GitLab CI管道中使用的一些函数,它们由Kubernetes中的GitLab运行器执行(它们有望阐明kaniko的设置和用法):

代码语言:javascript
运行
复制
function kaniko_config
{
    local docker_auth="$(echo -n "$CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD" | base64)"

    mkdir -p $DOCKER_CONFIG
    [ -e $DOCKER_CONFIG/config.json ] || \
        cat <<JSON > $DOCKER_CONFIG/config.json
{
    "auths": {
        "$CI_REGISTRY": {
            "auth": "$docker_auth"
        }
    }
}
JSON
}

# Usage example (.gitlab-ci.yml)
#
# build php:
#   extends: .build
#   variables:
#     DOCKER_CONFIG: "$CI_PROJECT_DIR/php/.docker"
#     DOCKER_IMAGE_PHP_DEVEL_BRANCH: &php-devel-image "${CI_REGISTRY_IMAGE}/php:${CI_COMMIT_REF_SLUG}-build"
#   script:
#     - kaniko_build
#       --destination $DOCKER_IMAGE_PHP_DEVEL_BRANCH
#       --dockerfile $CI_PROJECT_DIR/docker/images/php/Dockerfile
#       --target devel

function kaniko_build
{
    kaniko_config
    echo "Kaniko cache enabled ($CI_REGISTRY_IMAGE/cache)"
    /kaniko/executor \
        --build-arg http_proxy="${HTTP_PROXY}" \
        --build-arg https_proxy="${HTTPS_PROXY}" \
        --build-arg no_proxy="${NO_PROXY}" \
        --cache --cache-repo $CI_REGISTRY_IMAGE/cache \
        --context "$CI_PROJECT_DIR" \
        --digest-file=/dev/termination-log \
        --label "com.qwant.ci.job.id=${CI_JOB_ID}" \
        --label "com.qwant.ci.pipeline.id=${CI_PIPELINE_ID}" \
        --verbosity info \
        $@

    [ -r /dev/termination-log ] && \
        echo "Manifest digest: $(cat /dev/termination-log)"
}

通过这些函数,可以使用以下命令构建新的映像:

代码语言:javascript
运行
复制
stages:
  - build

build app:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:v1.7.0-debug
    entrypoint: [""]
  variables:
    DOCKER_CONFIG: "$CI_PROJECT_DIR/app/.docker"
    DOCKER_IMAGE_APP_RELEASE_BRANCH: &app-devel-image "${CI_REGISTRY_IMAGE}/phelps:${CI_COMMIT_REF_SLUG}"
    GIT_SUBMODULE_STRATEGY: recursive
  before_script:
    - source ci/libkaniko.sh
  script:
    - kaniko_build
      --destination $DOCKER_IMAGE_APP_RELEASE_BRANCH
      --digest-file $CI_PROJECT_DIR/docker-content-digest-app
      --dockerfile $CI_PROJECT_DIR/docker/Dockerfile
  artifacts:
    paths:
      - docker-content-digest-app
  tags:
    - k8s-runner
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70126243

复制
相关文章

相似问题

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