searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

docker多架构镜像构建指引

2024-06-25 09:47:21
6
0

使用docker可以基于所在的环境指令架构构建目标指令架构的镜像,可以大大方便镜像的构建工作。比如当前云计算arm架构终端比较多,而开发环境往往是am64的linux系统环境,这样便可以参考本文的方法。

场景一:构建支持跨平台编译的应用程序,比如golang。

方法:多阶段构建+docker buildx

FROM golang:1.21 AS builder
COPY . /go/src/test
WORKDIR /go/src/test
RUN ./cmd/build.sh

FROM 10.50.208.30:8021/library/alpine:3.16.5

WORKDIR /usr/share/test
COPY --from=builder /go/src/test/cmd/app .
COPY conf/config/config.yaml .
RUN chmod +x app

ENTRYPOINT ["/usr/shar/test/app", "--config=config.yaml"]

构建命令:

docker buildx build -t {tag} --platform=linux/arm64,linux/amd64 --build-arg HTTP_PROXY=$HTTP_PROXY --build-arg HTTPS_PROXY=$HTTPS_PROXY --build-arg NO_PROXY=$NO_PROXY . --push

 

场景二:构建不支持跨平台编译的应用程序,比如CPP。

方法:多阶段构建+QEMU+docker buildx

CPP的编译基础镜像放到第一阶段,如场景一的“FROM golang:1.21 AS builder”,这个基础编译镜像,需要支持多架构,其他类似。

使用限制:如果不是使用dockerdesktop,在linxu环境下,需要内核版本4.8或者以上,同时要安装binfmt-support 2.1.7或者以上。

 

0条评论
0 / 1000
李****强
14文章数
0粉丝数
李****强
14 文章 | 0 粉丝
原创

docker多架构镜像构建指引

2024-06-25 09:47:21
6
0

使用docker可以基于所在的环境指令架构构建目标指令架构的镜像,可以大大方便镜像的构建工作。比如当前云计算arm架构终端比较多,而开发环境往往是am64的linux系统环境,这样便可以参考本文的方法。

场景一:构建支持跨平台编译的应用程序,比如golang。

方法:多阶段构建+docker buildx

FROM golang:1.21 AS builder
COPY . /go/src/test
WORKDIR /go/src/test
RUN ./cmd/build.sh

FROM 10.50.208.30:8021/library/alpine:3.16.5

WORKDIR /usr/share/test
COPY --from=builder /go/src/test/cmd/app .
COPY conf/config/config.yaml .
RUN chmod +x app

ENTRYPOINT ["/usr/shar/test/app", "--config=config.yaml"]

构建命令:

docker buildx build -t {tag} --platform=linux/arm64,linux/amd64 --build-arg HTTP_PROXY=$HTTP_PROXY --build-arg HTTPS_PROXY=$HTTPS_PROXY --build-arg NO_PROXY=$NO_PROXY . --push

 

场景二:构建不支持跨平台编译的应用程序,比如CPP。

方法:多阶段构建+QEMU+docker buildx

CPP的编译基础镜像放到第一阶段,如场景一的“FROM golang:1.21 AS builder”,这个基础编译镜像,需要支持多架构,其他类似。

使用限制:如果不是使用dockerdesktop,在linxu环境下,需要内核版本4.8或者以上,同时要安装binfmt-support 2.1.7或者以上。

 

文章来自个人专栏
可观测
14 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0