From 87ccda9a314f3faf9ad1338e037c6554d79b1d64 Mon Sep 17 00:00:00 2001 From: mjibril Date: Fri, 1 Aug 2025 20:11:29 +0100 Subject: [PATCH] multi arch docker build --- Dockerfile.multiarch | 15 ++++++++++++++ build-multiarch.sh | 47 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 Dockerfile.multiarch create mode 100755 build-multiarch.sh diff --git a/Dockerfile.multiarch b/Dockerfile.multiarch new file mode 100644 index 00000000..360a0aee --- /dev/null +++ b/Dockerfile.multiarch @@ -0,0 +1,15 @@ +FROM quay.io/prometheus/busybox:latest + +ARG TARGETPLATFORM +ARG BUILDPLATFORM +ARG TARGETOS +ARG TARGETARCH + +LABEL maintainer="The Prometheus Authors " + +# Copy the correct binary based on target architecture +COPY .build/${TARGETOS}-${TARGETARCH}/node_exporter /bin/node_exporter + +EXPOSE 9100 +USER nobody +ENTRYPOINT [ "/bin/node_exporter" ] \ No newline at end of file diff --git a/build-multiarch.sh b/build-multiarch.sh new file mode 100755 index 00000000..ba9a759d --- /dev/null +++ b/build-multiarch.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +set -e + +echo "Building multi-architecture node_exporter with corrected approach..." + +# Create build directory +mkdir -p .build + +# Build for Linux AMD64 using local cross-compilation +echo "Building for linux/amd64..." +GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o .build/linux-amd64/node_exporter . + +# Build for Linux ARM64 using local cross-compilation +echo "Building for linux/arm64..." +GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o .build/linux-arm64/node_exporter . + +# Create and use a new builder instance for multi-architecture builds +echo "Setting up Docker Buildx..." +docker buildx create --name multiarch-builder --use || true + +# Build multi-architecture image using buildx with the corrected Dockerfile +echo "Building multi-architecture image with buildx..." +docker buildx build \ + --platform linux/amd64,linux/arm64 \ + --tag ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_ECR_NAMESPACE}/node-exporter:multiarch \ + --file Dockerfile.multiarch \ + --push \ + . + +echo "" +echo "Multi-architecture build completed successfully!" +echo "" +echo "Generated binaries:" +echo " - .build/linux-amd64/node_exporter (Linux AMD64)" +echo " - .build/linux-arm64/node_exporter (Linux ARM64)" +echo "" +echo "Generated multi-architecture Docker image:" +echo " - ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_ECR_NAMESPACE}/node-exporter:multiarch (supports both AMD64 and ARM64)" +echo "" +echo "Architecture verification:" +file .build/linux-amd64/node_exporter +file .build/linux-arm64/node_exporter +echo "" +echo "To test the multi-architecture image:" +echo " docker pull ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_ECR_NAMESPACE}/node-exporter:multiarch" +echo " docker run --rm ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_ECR_NAMESPACE}/node-exporter:multiarch --version" \ No newline at end of file