多架构镜像如何制作
作者: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/tags
FROM --platform=$TARGETPLATFORM alpine:3.18.4
WORKDIR /app
ARG TARGETPLATFORM
ARG 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 加入
还未添加个人简介
评论