diff --git a/Dockerfile b/Dockerfile index ec5d955..f592fe9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,8 @@ # ----------------------------------------------------------------------------- # Build... FROM golang:1.21-alpine3.19 AS build +ARG TARGETOS +ARG TARGETARCH WORKDIR /popeye @@ -9,11 +11,12 @@ COPY internal internal COPY cmd cmd COPY types types COPY pkg pkg -RUN apk --no-cache add make git gcc libc-dev curl ca-certificates binutils-gold && make build +RUN apk --no-cache add make git gcc libc-dev curl ca-certificates binutils-gold && \ + CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} make build # ----------------------------------------------------------------------------- # Image... -FROM alpine:3.19.0 +FROM alpine:3.19.1 COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt COPY --from=build /popeye/execs/popeye /bin/popeye diff --git a/Makefile b/Makefile index f9d1908..81c6ddd 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,8 @@ VERSION := v0.21.3 GIT := $(shell git rev-parse --short HEAD) DATE := $(shell date +%FT%T%Z) IMG_NAME := derailed/popeye -IMAGE := ${IMG_NAME}:${VERSION} +IMAGE ?= ${IMG_NAME}:${VERSION} +PLATFORMS ?= linux/arm64,linux/amd64,linux/s390x,linux/ppc64le default: help @@ -27,5 +28,14 @@ img: ## Build Docker Image push: img ## Push Docker Image @docker push ${IMAGE} +buildx: ## Build and push docker image for cross-platform support + # copy existing Dockerfile and insert --platform=${BUILDPLATFORM} into Dockerfile.cross, and preserve the original Dockerfile + sed -e '1 s/\(^FROM\)/FROM --platform=\$$\{BUILDPLATFORM\}/; t' -e ' 1,// s//FROM --platform=\$$\{BUILDPLATFORM\}/' Dockerfile > Dockerfile.cross + - docker buildx create --name popeye-builder + docker buildx use popeye-builder + - docker buildx build --push --platform=$(PLATFORMS) --tag ${IMAGE} -f Dockerfile.cross . + - docker buildx rm popeye-builder + rm Dockerfile.cross + help: @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[38;5;69m%-30s\033[38;5;38m %s\033[0m\n", $$1, $$2}'