buildx使用
@ hanamichi · Monday, Sep 20, 2021 · 2 分钟阅读 · 更新于 9月 20, 2021

使用 docker buildx 进行多架构镜像构建

buildx安装

注意: 建议系统内核升到 5.4+

参考文档 install buildx

buildx 配置设置使用私有镜像仓库

docker buildx 上传镜像到私有镜像仓库,通过改 host 以及加证书没有效果。是因为 docker buildx 使用 dns 来解析。

要使用 docker buildx 上传到私有镜像仓库,需要在宿主机搭建一个本地 dns,更改 /etc/resolv.conf

如果开启了私有仓库的 https 认证,需要把证书拷贝进 buildx 实例容器中,且在宿主机上也需要配置

samples

环境说明:

  • 私有 harbor, 域名为 caas.registry.com,使用自签 tls 证书
  • centos内核: 5.4.118-1.el7.elrepo.x86_64, 本机 ip: 10.0.0.13
  • 已安装 docker buildx
  • harbor 证书已放置在 /etc/docker/certs.d/目录中

步骤如下:

  1. 以 systemd 方式安装 coredns, cordons 配置文件如下:

    .:53 {
      # 绑定interface ip
      bind 10.0.0.13
      # 先走本机的hosts
      # https://coredns.io/plugins/hosts/
      hosts {
        # 自定义sms.service search.service 的解析
        # 因为解析的域名少我们这里直接用hosts插件即可完成需求
        # 如果有大量自定义域名解析那么建议用file插件使用 符合RFC 1035规范的DNS解析配置文件
        172.16.29.140 caas.registry.com
        # ttl
        ttl 60
        # 重载hosts配置
        reload 1m
        # 继续执行
        fallthrough
      }
      # file enables serving zone data from an RFC 1035-style master file.
      # https://coredns.io/plugins/file/
      # file service.signed service
      # 最后所有的都转发到系统配置的上游dns服务器去解析
      forward . /etc/resolv.conf
      # 缓存时间ttl
      cache 120
      # 自动加载配置文件的间隔时间
      reload 6s
      # 输出日志
      log
      # 输出错误
      errors
    }
    
  2. nameserver 10.0.0.13 本机 ip 写入 /etc/resolv.conf 的第一行,ping harbor 地址查看是否正常

  3. 测试登录harbor,拉取镜像正常

  4. 参考 drone exec runner 安装 部署 drone exec runner

  5. 创建 cicd buildx instance

    1. docker buildx create --driver-opt network=host --use --name cicd
    2. docker buildx use --global cicd
    3. docker buildx inspect --bootstrap
    4. 进入 buildx cicd 的实例容器, docker exec -it buildx_buildkit_cicd0 sh, 将 harbor 的 ca 证书加入到 /usr/local/share/ca-certificates, 执行 update-ca-certificates, 重启容器
    5. 将 harbor ca 证书加入 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem 的末尾
    6. 验证在本机执行 buildx 构建上传到 harbor 仓库

关于我

关于我

Hanamichi 的 ❤️ 博客

记录一些 🌈 生活上,技术上的事

全平台玩家(pc-steam, ps4, switch)

职业是后端工程师

正在努力学习

对云原生微服务感兴趣

主要的技术栈是:

  • golang
  • kubernetes
  • 微服务架构

略懂一二:

  • python
  • C/C++
  • java

学习中:

  • Rust
  • JavaScript

目前在 99cloud 工作

– 2021 年 2 月 1 日更新

2020年的计划

2021年的计划

现在回头看看,因为疫情和自身自律性原因,2020年的计划大多都没有实现

  • github issue和wiki记录平时的一些想法,坚持整理然后写入博客

  • 继续阅读 程序员修炼之道代码整洁之道

  • 关注云原声CNCF开源社区动态,争取做些贡献(平时还是太懒,自律性不强)

  • 以 java spring 生态继续研究架构的世界

其他

其他

如果你喜欢我的文章 or 我的项目,或者它们可以给你带来帮助。

You can buy me a coffee. ~

我的微信赞赏码

wechat

社交链接