# Copyright 2019 The Kubernetes Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Build the manager binary FROM golang:1.20.6@sha256:b6c53162b13ec2ac1c725078671dbff289d9e723c045c27d73eacf0a50893598 as builder WORKDIR /workspace # Run this with docker build --build_arg $(go env GOPROXY) to override the goproxy ARG goproxy=https://proxy.golang.org ENV GOPROXY=$goproxy # Copy the Go Modules manifests COPY go.mod go.mod COPY go.sum go.sum # Cache deps before building and copying source so that we don't need to re-download as much # and so that source changes don't invalidate our downloaded layer RUN go mod download # Copy the sources COPY ./ ./ # Build ARG ARCH ARG LDFLAGS RUN CGO_ENABLED=0 GOOS=linux GOARCH=${ARCH} \ go build -a -trimpath -ldflags "${LDFLAGS} -extldflags '-static'" \ -o manager . # Copy the controller-manager into a thin image FROM gcr.io/distroless/static:latest WORKDIR / COPY --from=builder /workspace/manager . USER nobody ENTRYPOINT ["/manager"]