Skip to content

Commit

Permalink
Merge pull request #278 from undistro/multi-platform-image
Browse files Browse the repository at this point in the history
Multi-platform docker image support
  • Loading branch information
derailed committed Aug 26, 2024
2 parents 76efbf9 + 2bd6602 commit e466645
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
7 changes: 5 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# -----------------------------------------------------------------------------
# Build...
FROM golang:1.21-alpine3.19 AS build
ARG TARGETOS
ARG TARGETARCH

WORKDIR /popeye

Expand All @@ -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
Expand Down
12 changes: 11 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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}'

0 comments on commit e466645

Please sign in to comment.