Skip to content

Commit da368ac

Browse files
committed
✨ Able to build provider docker without Makefile and Dockerfile modifications
1 parent 0cdbb31 commit da368ac

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

Dockerfile

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
# Build the manager binary
1818
# Run this with docker build --build-arg builder_image=<golang:x.y.z>
1919
ARG builder_image
20+
ARG deployment_base_image
21+
ARG deployment_base_image_tag
22+
ARG goprivate
2023

2124
# Build architecture
2225
ARG ARCH
@@ -32,21 +35,24 @@ WORKDIR /workspace
3235
ARG goproxy=https://proxy.golang.org
3336
# Run this with docker build --build-arg package=./controlplane/kubeadm or --build-arg package=./bootstrap/kubeadm
3437
ENV GOPROXY=$goproxy
38+
ENV GOPRIVATE=$goprivate
3539

3640
# Copy the Go Modules manifests
3741
COPY go.mod go.mod
3842
COPY go.sum go.sum
3943

4044
# Cache deps before building and copying source so that we don't need to re-download as much
4145
# and so that source changes don't invalidate our downloaded layer
42-
RUN --mount=type=cache,target=/go/pkg/mod \
46+
RUN --mount=type=secret,id=netrc,required=false,target=/root/.netrc \
47+
--mount=type=cache,target=/go/pkg/mod \
4348
go mod download
4449

4550
# Copy the sources
4651
COPY ./ ./
4752

4853
# Cache the go build into the Go’s compiler cache folder so we take benefits of compiler caching across docker build calls
49-
RUN --mount=type=cache,target=/root/.cache/go-build \
54+
RUN --mount=type=secret,id=netrc,required=false,target=/root/.netrc \
55+
--mount=type=cache,target=/root/.cache/go-build \
5056
--mount=type=cache,target=/go/pkg/mod \
5157
go build .
5258

@@ -63,7 +69,7 @@ RUN --mount=type=cache,target=/root/.cache/go-build \
6369
-o manager ${package}
6470

6571
# Production image
66-
FROM gcr.io/distroless/static:nonroot-${ARCH}
72+
FROM ${deployment_base_image}:${deployment_base_image_tag}
6773
WORKDIR /
6874
COPY --from=builder /workspace/manager .
6975
# Use uid of nonroot user (65532) because kubernetes expects numeric user when applying pod security policies

Makefile

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ SHELL:=/usr/bin/env bash
2424
# Go.
2525
#
2626
GO_VERSION ?= 1.22.9
27-
GO_CONTAINER_IMAGE ?= docker.io/library/golang:$(GO_VERSION)
27+
GO_BASE_CONTAINER ?= docker.io/library/golang
28+
GO_CONTAINER_IMAGE ?= $(GO_BASE_CONTAINER):$(GO_VERSION)
2829

2930
# Use GOPROXY environment variable if set
3031
GOPROXY := $(shell go env GOPROXY)
@@ -33,9 +34,20 @@ GOPROXY := https://proxy.golang.org
3334
endif
3435
export GOPROXY
3536

37+
# Use GOPRIVATE environment variable if set
38+
GOPRIVATE := $(shell go env GOPRIVATE)
39+
export GOPRIVATE
40+
3641
# Active module mode, as we use go modules to manage dependencies
3742
export GO111MODULE=on
3843

44+
# Base docker images
45+
46+
DOCKERFILE_CONTAINER_IMAGE ?= docker.io/docker/dockerfile:1.4
47+
DEPLOYMENT_BASE_IMAGE ?= gcr.io/distroless/static
48+
DEPLOYMENT_BASE_IMAGE_TAG ?= nonroot-${ARCH}
49+
BUILD_CONTAINER_ADDITIONAL_ARGS ?=
50+
3951
#
4052
# Kubebuilder.
4153
#
@@ -387,9 +399,9 @@ manager: ## Build the manager binary into the ./bin folder
387399

388400
.PHONY: docker-pull-prerequisites
389401
docker-pull-prerequisites:
390-
docker pull docker.io/docker/dockerfile:1.4
402+
docker pull $(DOCKERFILE_CONTAINER_IMAGE)
391403
docker pull $(GO_CONTAINER_IMAGE)
392-
docker pull gcr.io/distroless/static:latest
404+
docker pull $(DEPLOYMENT_BASE_IMAGE):$(DEPLOYMENT_BASE_IMAGE_TAG)
393405

394406
.PHONY: docker-build-all
395407
docker-build-all: $(addprefix docker-build-,$(ALL_ARCH)) ## Build docker images for all architectures
@@ -399,7 +411,7 @@ docker-build-%:
399411

400412
.PHONY: docker-build
401413
docker-build: docker-pull-prerequisites ## Build the docker image for core controller manager
402-
DOCKER_BUILDKIT=1 docker build --build-arg builder_image=$(GO_CONTAINER_IMAGE) --build-arg goproxy=$(GOPROXY) --build-arg ARCH=$(ARCH) --build-arg ldflags="$(LDFLAGS)" . -t $(CONTROLLER_IMG)-$(ARCH):$(TAG)
414+
DOCKER_BUILDKIT=1 docker build $(BUILD_CONTAINER_ADDITIONAL_ARGS) --build-arg builder_image=$(GO_CONTAINER_IMAGE) --build-arg deployment_base_image=$(DEPLOYMENT_BASE_IMAGE) --build-arg deployment_base_image_tag=$(DEPLOYMENT_BASE_IMAGE_TAG) --build-arg goproxy=$(GOPROXY) --build-arg goprivate=$(GOPRIVATE) --build-arg ARCH=$(ARCH) --build-arg ldflags="$(LDFLAGS)" . -t $(CONTROLLER_IMG)-$(ARCH):$(TAG)
403415
$(MAKE) set-manifest-image MANIFEST_IMG=$(CONTROLLER_IMG)-$(ARCH) MANIFEST_TAG=$(TAG) TARGET_RESOURCE="./config/default/manager_image_patch.yaml"
404416
$(MAKE) set-manifest-pull-policy TARGET_RESOURCE="./config/default/manager_pull_policy.yaml"
405417

0 commit comments

Comments
 (0)