From d97127efd16140c5d119057121de77a43eac5c45 Mon Sep 17 00:00:00 2001 From: Sunny Date: Wed, 13 Oct 2021 03:53:14 +0530 Subject: [PATCH] Use tonistiigi/xx for cross-platform builds Update the Dockerfile to use tonistiigi/xx to cross-compile the manager binaries natively and speed up the multi-arch image build time. Signed-off-by: Sunny --- Dockerfile | 14 ++++++++++++-- Makefile | 11 ++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 555bd56c9..8bfdfeae0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,13 @@ -FROM golang:1.16-alpine as builder +ARG XX_VERSION=1.0.0-rc.2 + +FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx + +FROM --platform=$BUILDPLATFORM golang:1.16-alpine as builder + +# Copy the build utilities. +COPY --from=xx / / + +ARG TARGETPLATFORM WORKDIR /workspace @@ -18,7 +27,8 @@ COPY controllers/ controllers/ COPY internal/ internal/ # build -RUN CGO_ENABLED=0 go build -a -o notification-controller main.go +ENV CGO_ENABLED=0 +RUN xx-go build -a -o notification-controller main.go FROM alpine:3.13 diff --git a/Makefile b/Makefile index e665f4221..848b0829a 100644 --- a/Makefile +++ b/Makefile @@ -10,6 +10,11 @@ else GOBIN=$(shell go env GOBIN) endif +# Allows for defining additional Docker buildx arguments, e.g. '--push'. +BUILD_ARGS ?= +# Architectures to build images for. +BUILD_PLATFORMS ?= linux/amd64 + all: manager # Run tests @@ -82,7 +87,11 @@ generate: controller-gen # Build the docker image docker-build: test - docker build . -t ${IMG} + docker buildx build \ + --platform=$(BUILD_PLATFORMS) \ + -t ${IMG} \ + --load \ + ${BUILD_ARGS} . # Push the docker image docker-push: