Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【玩转腾讯云】在 CODING DevOps 持续集成中使用 Buildx 构建 Docker 镜像

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

原创
作者头像
康怀帅
修改于 2020-04-29 03:39:23
修改于 2020-04-29 03:39:23
2.4K0
举报
文章被收录于专栏:康怀帅的专栏康怀帅的专栏

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

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

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

登录或者注册 CODING DevOps

创建项目

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

项目名称

自己填入一个名称

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

新建 Dockerfile

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

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

写入以下内容

代码语言:txt
AI代码解释
复制
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_001.jpg

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

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

代码语言:txt
AI代码解释
复制
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
coding_002.jpg

新增 环境变量

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

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

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

coding_003.jpg
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 构建镜像并推送到仓库中是一个不错的选择。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
🐳 从 Flask 项目打包为多平台 Docker 镜像并上传 Docker Hub(含 GitHub Actions)
用户3347017
2025/03/27
2000
​使用 CODING DevOps 全自动部署 Hexo 到 K8S 集群
如何做团队技术文章分享和沉淀?这是一个老生常谈的话题。常见的技术选型可以是 Confluence、Dokuwiki、Gitbook 等。
腾讯云 CODING
2020/07/06
2K0
​使用 CODING DevOps 全自动部署 Hexo 到 K8S 集群
​一分钟开始持续集成之旅系列之:C 语言 + Makefile
make 工具非常强大,配合 makefile 文件可以实现软件的自动化构建,但是执行 make 命令依然需要经历手动输入执行、等待编译完成、将目标文件转移到合适位置等过程,我们真正关心的是最终的输出,却在这些中间过程上浪费了很多时间。利用 CODING 持续集成功能可以实现自动触发构建,构建全程自动化,无须分心看护,节省时间。
腾讯云 CODING
2020/06/23
1.2K0
​一分钟开始持续集成之旅系列之:C 语言 + Makefile
云时代必修课-云原生CICD(持续集成与交付)全流程实战(高の青)
云原生 CI/CD(持续集成与持续交付)是现代软件开发中的重要组成部分。它使团队能够快速、高效地构建、测试和交付应用程序。
百课优用户
2024/08/26
3940
用GitHub Actions制作Docker镜像
为了确保GitHub上的项目可以顺利制作成镜像并推送到hub.docker.com,您需要做好以下准备:
程序员欣宸
2021/10/14
2.6K0
用GitHub Actions制作Docker镜像
使用 Docker Buildx 构建多种系统架构镜像
Docker Buildx 是一个 docker CLI 插件,其扩展了 docker 命令,支持 Moby BuildKit 提供的功能。提供了与 docker build 相同的用户体验,并增加了许多新功能。
没有故事的陈师傅
2021/09/09
1.9K0
云实验室(22) - kubesphere的springboot流水线
docker仓库 : dockerhub / 私有镜像仓库 前端代码仓库 : git / gitlab / gitee ...
惊羽-布壳儿
2022/06/15
9470
云实验室(22) - kubesphere的springboot流水线
KubeSphere之DevOps基本使用
KubeSphere 使用Jenkines做DevOps代码管理工具。该功能以组件的形式开启和关闭。KS安装后在'定制资源定义' (CRD)开启
编码如写诗
2024/11/15
3610
KubeSphere之DevOps基本使用
云实验室(21) - kubesphere的vue流水线
docker仓库 : dockerhub / 私有镜像仓库 前端代码仓库 : git / gitlab / gitee ...
惊羽-布壳儿
2022/06/15
1.4K0
云实验室(21) - kubesphere的vue流水线
私有化轻量级持续集成部署方案--06-私有镜像仓库-Harbor
提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记
莫问今朝
2022/03/08
1.4K0
私有化轻量级持续集成部署方案--06-私有镜像仓库-Harbor
容器镜像构建神器 Buildx,支持多平台
要根据不同的要求扩展功能。因此,为了实现这一点,可以使用第三方docker 插件[1]。
用户1107783
2024/04/26
1.5K1
容器镜像构建神器 Buildx,支持多平台
k3s 联合 coding 实现持续集成、持续部署
折腾k3s,最初的想法就是可以配合coding实现持续集成、持续部署。这两天把整个流程都跑了一下,记录如下:
2022/04/29
4.2K3
使用 docker buildx 构建多 CPU 架构镜像
在工作中,遇到了需要将应用程序打包成 Docker 镜像并同时运行在不同的 CPU 架构(X86 和 ARM)的环境中。
donghui
2020/05/18
4.1K0
多图流带你玩转CODING DevOps
说人话就是可以把软件开发流程的制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动在CODING上来实现
wayn_aqua
2021/07/11
1.8K0
多图流带你玩转CODING DevOps
Kubesphere DevOps组件 创建CI/CD流水线
DevOps 提供一系列持续集成 (CI) 和持续交付 (CD) 工具,可以使 IT 和软件开发团队之间的流程实现自动化。在 CI/CD 工作流中,每次集成都通过自动化构建来验证,包括编码、发布和测试,从而帮助开发者提前发现集成错误,团队也可以快速、安全、可靠地将内部软件交付到生产环境。
全栈研发知识库
2025/01/21
4550
一分钟开始持续集成之旅系列之:Java + GWT
Google Web Toolkit(GWT)是一个开源、免费的 Web 开发框架,通过该框架,您可以使用 Java 构建复杂、高性能的 JavaScript 应用程序。
腾讯云 CODING
2020/06/23
1.5K0
一分钟开始持续集成之旅系列之:Java + GWT
『Jenkins』Jenkins与Docker集成:构建、测试与部署自动化流程
在现代软件开发中,持续集成(CI)和持续交付(CD)已成为提高开发效率、软件质量和部署速度的核心实践。Jenkins作为全球最流行的开源自动化工具,广泛应用于CI/CD流程的实现。Docker则提供了一种轻量级的容器化解决方案,能够在各个环境中一致地运行应用程序。将Jenkins与Docker结合使用,能够极大地提升开发和运维的效率,特别是在构建、测试和部署流程中。
二一年冬末
2025/02/06
1K0
使用 CODING 对 Go 项目进行持续集成
https://github.com/seth-shi/golang-coding
seth-shi
2023/12/18
5120
使用 CODING DevOps 部署 Serverless 应用
2021年年初,使用 Serverless Framework  在腾讯云上部署了一个个人博客:serverlesslife.cn。
donghui
2021/03/07
3.3K0
使用 CODING DevOps 部署 Serverless 应用
Docker Action IniT
Docker Action IniT Dockerfile LABEL maintainer="xrsec" LABEL mail="troy@zygd.site" LABEL Github="https://github.com/XRSec/Code-Server-Update" RUN apt update -y && apt upgrade -y \ && apt install -y ncurses-bin \ && apt clean -y \ RUN yum upda
XRSec
2022/03/15
1.1K0
推荐阅读
相关推荐
🐳 从 Flask 项目打包为多平台 Docker 镜像并上传 Docker Hub(含 GitHub Actions)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档