写点什么

多架构镜像如何制作

作者:wystanxu
  • 2023-11-28
    广东
  • 本文字数:1486 字

    阅读完需:约 5 分钟

方式一、使用 buildx

# 文件目录# bin目录是go程序编译结果 go build GOOS=linx GOARCH=amd64 \ GOARCH=arm64.├── Dockerfile├── README.md├── bin│   ├── amd64│   │   └── tool│   └── arm64│       └── tool├── golang│   ├── go.mod│   └── main.go└── sh    └── start.sh
复制代码


# 基础架构就是支持多架构的 https://hub.docker.com/_/alpine/tagsFROM --platform=$TARGETPLATFORM alpine:3.18.4
WORKDIR /app
ARG TARGETPLATFORMARG TARGETARCH
# 将对应架构的go程序放在app目录COPY bin/$TARGETARCH/* /app
# 镜像启动脚本COPY sh/start.sh /app
RUN chmod +x /app/start.sh
# ENTRYPOINT无法被覆盖,CMD可以被覆盖,使用CMD是为了方便helm包安装镜像时候更改启动指令CMD ["/bin/sh","/app/start.sh"]
复制代码

环境依赖

# docker配置文件如下/root/.docker/config.json/etc/docker/daemon.json
复制代码

执行命令

# 创建一个新的 buildx 构建器,并将其设置为当前正在使用的构建器# 以便在运行 Docker 构建命令时可以使用该构建器进行构建# 通过 network=host 指定共享主机网络$ docker buildx create --name builder --config /etc/buildkit/buildkitd.toml \    --platform linux/arm64,linux/amd64 \    --append --driver-opt network=host --use
# 开始构建$ docker buildx build -t registry.my.net/develop/tool:v0.0.1 --platform=linux/arm64,linux/amd64 . --push
复制代码

常见问题

  1. 私有库 ssl 验证 (docker login my.net),配置文件/root/.docker/config.json


   {    "auths": {            "registry.my.net": {                "auth": "xxx"            }        }    }
复制代码


  1. 绕过私有库 ssl 验证(experimental 是开启实验功能,buildkit 开启多架构功能),配置文件/etc/docker/daemon.json


   {        "insecure-registries" : [ "registry.my.net" ],        "experimental": true,         "features": {            "buildkit": true        }    }
复制代码


  1. docker buildx 绕过 ssl 验证,配置文件/etc/buildkit/buildkitd.toml


   [registry."registry.my.net"]    http = true    insecure = true
复制代码

方式二、使用 manifest 创建清单

# 先制作镜像$ docker images- registry.bingosoft.net/bingokube/etcd:v3.5.0-amd64- registry.bingosoft.net/bingokube/etcd:v3.5.0-arm64
# 制作清单$ docker manifest create --insecure registry.bingosoft.net/bingokube/etcd:v3.5.0 registry.bingosoft.net/bingokube/etcd:v3.5.0-amd64 registry.bingosoft.net/bingokube/etcd:v3.5.0-arm64
# 推送清单$ docker manifest push --insecure registry.bingosoft.net/bingokube/etcd:v3.5.0
# 查看清单$ docker manifest inspect registry.bingosoft.net/bingokube/etcd:v3.5.0{ "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", "manifests": [ { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 1783, "digest": "sha256:abc", "platform": { "architecture": "amd64", "os": "linux" } }, { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 1576, "digest": "sha256:abc", "platform": { "architecture": "arm64", "os": "linux" } } ]}
复制代码


用户头像

wystanxu

关注

还未添加个人签名 2023-06-07 加入

还未添加个人简介

评论

发布
暂无评论
多架构镜像如何制作_wystanxu_InfoQ写作社区