一、背景
最近做项目的时候发现,windows下推送的镜像到腾讯云,mac上拉下来运行不了,发现是cpu架构不一样,一个是amd64,一个是arm64。
要构建多架构的镜像,需要使用 buildx
,用户可以在单个命令中构建多种架构的镜像。而docker-desktop 默认安装了buildx
二、操作步骤
21.查看是否安装buildx
docker buildx version
2.2编写dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
ARG TARGETARCH # 指定cpu架构的变量
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:7.0 AS build
ARG TARGETARCH
WORKDIR /src
COPY xx/xx/xx.csproj xx/xx/
RUN dotnet restore "xxxx.csproj" -a $TARGETARCH
COPY . .
WORKDIR "/src/xx/xx/xx"
RUN dotnet build "xx.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "xx.csproj" -a $TARGETARCH -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "xx.dll"]
2.3编译并且推送
在命令行指定cpu架构的参数,这样就可以推送多架构的镜像到仓库里面了。拉取镜像的时候,会默认你本机的架构进行拉取。
docker buildx build --platform linux/amd64,linux/arm64 -f .\xx\xx\xx\Dockerfile-composite -t 腾讯云仓库 . --push
参考文章:
https://www.cnblogs.com/shanyou/p/17765247.html
Improving multi-platform container support - .NET Blog (microsoft.com)