【玩转腾讯云】在 CODING DevOps 持续集成中使用 Buildx 构建 Docker 镜像

现在容器化技术快速发展,Docker 镜像作为其基石,构建镜像的技术也在快速演进,去年 Docker 推出的 Buildki 技术试图去解决传统构建镜像过程中所存在的问题:

  • 多系统、架构的 Docker 镜像难以统一
  • 构建过程难以缓存

为解决以上问题,基于 buildkit 的 Docker CLI 插件 buildx 引入了 --platform --cache-from --cache-to 等参数,下面开始介绍如何在 CODING DevOps 持续集成中使用 Buildx 构建 Docker 镜像。

登录或者注册 CODING DevOps

创建项目

登录之后,点击右上角项目(第三个图标)-> 创建项目 -> 模板选择 DevOps 项目

项目名称

自己填入一个名称

其他选项可以不填,点击完成创建

新建 Dockerfile

选择 代码仓库 -> 快速初始化仓库 -> 勾选 启用README.md文件初始化仓库 -> 点击 快速初始化按钮

点击 右上角三个点 -> 新建 -> 文件 -> 输入 Dockerfile -> 点击 创建

写入以下内容

FROM alpine

RUN set -x \\
    && sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories \\
    && apk add --no-cache curl git gcc

ARG GIT_COMMIT="unknow"

LABEL org.opencontainers.image.revision=$GIT_COMMIT

CMD ["sh","-c","uname","-a"]

点击提交

启用持续集成

选择 持续集成 -> 构建计划 -> 创建持续集成任务(新建构建计划配置) -> 输入 计划名称 -> 选择 使用静态配置的 Jenkinsfile -> 选择 简易模板 -> 点击 确定

coding_001.jpg

CODING DevOps 持续集成使用的是 Jenkis,通过 Jenkinsfile 进行配置。

点击 流程配置 -> 文本编辑器 -> 输入以下内容(搜素 fix me 替换为自己的内容)-> 点击 保存

pipeline {
  agent any
  environment {
    // PLATFORM = "linux/amd64,linux/arm64,linux/arm/v7"
    PLATFORM = "linux/amd64"
    DOCKER_PASSWORD = "${env.DOCKER_PASSWORD}"
    // fix me
    DOCKER_USERNAME = "your_username"
    DOCKER_CLI_EXPERIMENTAL = "enabled"
    BUILDX_IMAGE= "dockerpracticesig/buildkit:master-tencent"
    // fix me 这里使用腾讯云容器服务的 Docker 仓库 https://cloud.tencent.com/product/tke
    DOCKER_REGISTRY= "ccr.ccs.tencentyun.com"
    // fix me
    DOCKER_REPO_NAMESPACE= "your_namespace"
  }
  stages {
    stage('检出') {
      steps {
        checkout([$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
        userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]])
      }
    }
    stage('update docker to latest'){
      steps {
        sh "docker version"
        sh "docker info"

        sh "curl -fsSL https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -"
        sh "sudo add-apt-repository \\"deb [arch=amd64] https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu \\$(lsb_release -cs) stable\\""
        sh "sudo apt update"
        sh "sudo apt install docker-ce docker-ce-cli containerd.io -y"

        sh "docker version"
        sh "docker info"
      }
    }
    stage('setup-buildx'){
      steps {
        sh "docker run --rm --privileged docker/binfmt:a7996909642ee92942dcd6cff44b9b95f08dad64 | true"
        sh "docker buildx create --use --name mybuilder --driver-opt image=${BUILDX_IMAGE}"
        sh "docker buildx ls"

        sh "docker buildx inspect --bootstrap"
      }
    }
    stage('登录仓库') {
      steps {
        sh "echo ${DOCKER_PASSWORD} | docker login -u ${DOCKER_USERNAME} --password-stdin ${DOCKER_REGISTRY}"
      }
    }
    stage('构建镜像') {
      steps {
        sh "docker build -t ${DOCKER_REGISTRY}/${DOCKER_REPO_NAMESPACE}/demo --build-arg GIT_COMMIT ."

        sh "docker push ${DOCKER_REGISTRY}/${DOCKER_REPO_NAMESPACE}/demo"
      }
    }
    stage('构建镜像-buildx') {
      steps {
        sh "docker buildx build \\
            -t ${DOCKER_REGISTRY}/${DOCKER_REPO_NAMESPACE}/demo:buildx \\
            --platform linux/amd64 \\
            \\$(if [ -f '/root/docker_build_cache/index.json' ];then \\
                  echo ' --cache-from=type=local,src=/root/docker_build_cache '; \\
               fi) \\
            --cache-to=type=local,dest=/root/docker_build_cache \\
            --build-arg GIT_COMMIT \\
            --push ."
      }
    }
  }
}
coding_002.jpg

新增 环境变量

环境变量可以存储 Docker Registry 密码等私密内容。

选择 变量与缓存 -> 流程环境变量 -> 添加环境变量

变量名称 DOCKER_PASSWORD,默认值填为你自己的 Docker Registry 密码,勾选 保密 ->点击确定

coding_003.jpg

设置 构建缓存

选择 变量与缓存 -> 缓存目录 -> 输入 /root/docker_build_cache -> 点击 保存修改

点击 返回 -> 点击 立即构建

查看结果

点击构建列表 -> 在构建过程中点击各个步骤即可查看到构建输出

可以对比 构建镜像 构建镜像-buildx 的执行时间,发现第一次构建两者所用时间相差不大,之后的每次构建 构建镜像-buildx 所用的时间较短(30s vs 8s)。

结语

免费版本的 CODING DevOps 提供了 200次/每周 30分钟/次 的配额。

由于国内访问 Docker Hub 较缓慢,以上用到的 Docker 仓库替换为了腾讯云容器服务提供的 Docker 仓库,创建 Buildx 实例的 Buildkit 镜像使用了替换镜像源为腾讯云的 dockerpracticesig/buildkit:master-tencent

可以发现使用 buildx 构建镜像具有诸多优点,而传统的 Docker 镜像仓库不提供 buildx 构建,那么使用 CODING DevOps 构建镜像并推送到仓库中是一个不错的选择。

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
【玩转腾讯云】在 CODING DevOps 持续集成中使用 Buildx 构建 Docker 镜像
现在容器化技术快速发展,Docker 镜像作为其基石,构建镜像的技术也在快速演进,去年 Docker 推出的 Buildki 技术试图去解决传统构建镜像过程中所...
<<上一篇
下一篇>>