多架构镜像如何制作
作者: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
复制代码
常见问题
私有库 ssl 验证 (
docker login my.net),配置文件/root/.docker/config.json
{ "auths": { "registry.my.net": { "auth": "xxx" } } }
复制代码
绕过私有库 ssl 验证(experimental 是开启实验功能,buildkit 开启多架构功能),配置文件
/etc/docker/daemon.json
{ "insecure-registries" : [ "registry.my.net" ], "experimental": true, "features": { "buildkit": true } }
复制代码
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" } } ]}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 4
wystanxu
关注
还未添加个人签名 2023-06-07 加入
还未添加个人简介










评论