refactor Dockerfile using multi-stage docker build

Signed-off-by: guoyao <guoyao17@huawei.com>
This commit is contained in:
guoyao 2022-04-27 08:33:15 +08:00
parent cd05ffee6e
commit aa39b35ded
12 changed files with 163 additions and 39 deletions

View File

@ -2,20 +2,7 @@ GOOS ?= $(shell go env GOOS)
GOARCH ?= $(shell go env GOARCH)
SOURCES := $(shell find . -type f -name '*.go')
# Git information
GIT_VERSION ?= $(shell git describe --tags --dirty)
GIT_COMMIT_HASH ?= $(shell git rev-parse HEAD)
GIT_TREESTATE = "clean"
GIT_DIFF = $(shell git diff --quiet >/dev/null 2>&1; if [ $$? -eq 1 ]; then echo "1"; fi)
ifeq ($(GIT_DIFF), 1)
GIT_TREESTATE = "dirty"
endif
BUILDDATE = $(shell date -u +'%Y-%m-%dT%H:%M:%SZ')
LDFLAGS := "-X github.com/karmada-io/karmada/pkg/version.gitVersion=$(GIT_VERSION) \
-X github.com/karmada-io/karmada/pkg/version.gitCommit=$(GIT_COMMIT_HASH) \
-X github.com/karmada-io/karmada/pkg/version.gitTreeState=$(GIT_TREESTATE) \
-X github.com/karmada-io/karmada/pkg/version.buildDate=$(BUILDDATE)"
LDFLAGS='$(shell hack/version.sh)'
# Images management
REGISTRY?="swr.ap-southeast-1.myhuaweicloud.com/karmada"
@ -117,28 +104,28 @@ test:
images: image-karmada-aggregated-apiserver image-karmada-controller-manager image-karmada-scheduler image-karmada-descheduler image-karmada-webhook image-karmada-agent image-karmada-scheduler-estimator image-karmada-interpreter-webhook-example
image-karmada-aggregated-apiserver: karmada-aggregated-apiserver
image-karmada-aggregated-apiserver:
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-aggregated-apiserver
image-karmada-controller-manager: karmada-controller-manager
image-karmada-controller-manager:
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-controller-manager
image-karmada-scheduler: karmada-scheduler
image-karmada-scheduler:
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-scheduler
image-karmada-descheduler: karmada-descheduler
image-karmada-descheduler:
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-descheduler
image-karmada-webhook: karmada-webhook
image-karmada-webhook:
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-webhook
image-karmada-agent: karmada-agent
image-karmada-agent:
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-agent
image-karmada-scheduler-estimator: karmada-scheduler-estimator
image-karmada-scheduler-estimator:
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-scheduler-estimator
image-karmada-interpreter-webhook-example: karmada-interpreter-webhook-example
image-karmada-interpreter-webhook-example:
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-interpreter-webhook-example
upload-images: images
@ -156,35 +143,35 @@ endif
docker push ${REGISTRY}/karmada-aggregated-apiserver:${VERSION}
# Build and push multi-platform image to DockerHub
mp-image-karmada-controller-manager: karmada-controller-manager
mp-image-karmada-controller-manager:
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-controller-manager:${VERSION} --file=cluster/images/karmada-controller-manager/Dockerfile .
# Build and push multi-platform image to DockerHub
mp-image-karmada-scheduler: karmada-scheduler
mp-image-karmada-scheduler:
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-scheduler:${VERSION} --file=cluster/images/karmada-scheduler/Dockerfile .
# Build and push multi-platform image to DockerHub
mp-image-karmada-descheduler: karmada-descheduler
mp-image-karmada-descheduler:
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-descheduler:${VERSION} --file=cluster/images/karmada-descheduler/Dockerfile .
# Build and push multi-platform image to DockerHub
mp-image-karmada-webhook: karmada-webhook
mp-image-karmada-webhook:
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-webhook:${VERSION} --file=cluster/images/karmada-webhook/Dockerfile .
# Build and push multi-platform image to DockerHub
mp-image-karmada-agent: karmada-agent
mp-image-karmada-agent:
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-agent:${VERSION} --file=cluster/images/karmada-agent/Dockerfile .
# Build and push multi-platform image to DockerHub
mp-image-karmada-scheduler-estimator: karmada-scheduler-estimator
mp-image-karmada-scheduler-estimator:
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-scheduler-estimator:${VERSION} --file=cluster/images/karmada-scheduler-estimator/Dockerfile .
# Build and push multi-platform image to DockerHub
mp-image-karmada-interpreter-webhook-example: karmada-interpreter-webhook-example
mp-image-karmada-interpreter-webhook-example:
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-interpreter-webhook-example:${VERSION} --file=cluster/images/karmada-interpreter-webhook-example/Dockerfile .
# Build and push multi-platform image to DockerHub
mp-image-karmada-aggregated-apiserver: karmada-aggregated-apiserver
mp-image-karmada-aggregated-apiserver:
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-aggregated-apiserver:${VERSION} --file=cluster/images/karmada-aggregated-apiserver/Dockerfile .
# Build and push multi-platform images to DockerHub.

View File

@ -1,7 +1,20 @@
FROM golang:1.17-alpine3.15 AS builder
WORKDIR /go/src/github.com/karmada-io/karmada
COPY . /go/src/github.com/karmada-io/karmada
ARG GO_LDFLAGS
RUN CGO_ENABLED=0 go build \
-ldflags "$GO_LDFLAGS" \
-o /bin/karmada-agent \
cmd/agent/main.go
FROM alpine:3.15.1
RUN apk add --no-cache ca-certificates
ADD karmada-agent /bin/
COPY --from=builder /bin/karmada-agent /bin/karmada-agent
CMD ["/bin/karmada-agent"]

View File

@ -1,7 +1,20 @@
FROM golang:1.17-alpine3.15 AS builder
WORKDIR /go/src/github.com/karmada-io/karmada
COPY . /go/src/github.com/karmada-io/karmada
ARG GO_LDFLAGS
RUN CGO_ENABLED=0 go build \
-ldflags "${GO_LDFLAGS}" \
-o /bin/karmada-aggregated-apiserver \
cmd/aggregated-apiserver/main.go
FROM alpine:3.15.1
RUN apk add --no-cache ca-certificates
ADD karmada-aggregated-apiserver /bin/
COPY --from=builder /bin/karmada-aggregated-apiserver /bin/karmada-aggregated-apiserver
CMD ["/bin/karmada-aggregated-apiserver"]

View File

@ -1,7 +1,20 @@
FROM golang:1.17-alpine3.15 AS builder
WORKDIR /go/src/github.com/karmada-io/karmada
COPY . /go/src/github.com/karmada-io/karmada
ARG GO_LDFLAGS
RUN CGO_ENABLED=0 go build \
-ldflags "$GO_LDFLAGS" \
-o /bin/karmada-controller-manager \
cmd/controller-manager/controller-manager.go
FROM alpine:3.15.1
RUN apk add --no-cache ca-certificates
ADD karmada-controller-manager /bin/
COPY --from=builder /bin/karmada-controller-manager /bin/karmada-controller-manager
CMD ["/bin/karmada-controller-manager"]

View File

@ -1,7 +1,20 @@
FROM golang:1.17-alpine3.15 AS builder
WORKDIR /go/src/github.com/karmada-io/karmada
COPY . /go/src/github.com/karmada-io/karmada
ARG GO_LDFLAGS
RUN CGO_ENABLED=0 go build \
-ldflags "$GO_LDFLAGS" \
-o /bin/karmada-descheduler \
cmd/descheduler/main.go
FROM alpine:3.15.1
RUN apk add --no-cache ca-certificates
ADD karmada-descheduler /bin/
COPY --from=builder /bin/karmada-descheduler /bin/karmada-descheduler
CMD ["/bin/karmada-descheduler"]

View File

@ -1,7 +1,21 @@
FROM golang:1.17-alpine3.15 AS builder
WORKDIR /go/src/github.com/karmada-io/karmada
COPY . /go/src/github.com/karmada-io/karmada
ARG GO_LDFLAGS
RUN CGO_ENABLED=0 go build \
-ldflags "$GO_LDFLAGS" \
-o /bin/karmada-interpreter-webhook-example \
examples/customresourceinterpreter/webhook/main.go
FROM alpine:3.15.1
RUN apk add --no-cache ca-certificates
ADD karmada-interpreter-webhook-example /bin/
COPY --from=builder /bin/karmada-interpreter-webhook-example /bin/karmada-interpreter-webhook-example
CMD ["/bin/karmada-interpreter-webhook-example"]

View File

@ -1,7 +1,21 @@
FROM golang:1.17-alpine3.15 AS builder
WORKDIR /go/src/github.com/karmada-io/karmada
COPY . /go/src/github.com/karmada-io/karmada
ARG GO_LDFLAGS
RUN CGO_ENABLED=0 go build \
-ldflags "$GO_LDFLAGS" \
-o /bin/karmada-scheduler-estimator \
cmd/scheduler-estimator/main.go
FROM alpine:3.15.1
RUN apk add --no-cache ca-certificates
ADD karmada-scheduler-estimator /bin/
COPY --from=builder /bin/karmada-scheduler-estimator /bin/karmada-scheduler-estimator
CMD ["/bin/karmada-scheduler-estimator"]

View File

@ -1,7 +1,21 @@
FROM golang:1.17-alpine3.15 AS builder
WORKDIR /go/src/github.com/karmada-io/karmada
COPY . /go/src/github.com/karmada-io/karmada
ARG GO_LDFLAGS
RUN CGO_ENABLED=0 go build \
-ldflags "$GO_LDFLAGS" \
-o /bin/karmada-scheduler \
cmd/scheduler/main.go
FROM alpine:3.15.1
RUN apk add --no-cache ca-certificates
ADD karmada-scheduler /bin/
COPY --from=builder /bin/karmada-scheduler /bin/karmada-scheduler
CMD ["/bin/karmada-scheduler"]

View File

@ -1,7 +1,20 @@
FROM golang:1.17-alpine3.15 AS builder
WORKDIR /go/src/github.com/karmada-io/karmada
COPY . /go/src/github.com/karmada-io/karmada
ARG GO_LDFLAGS
RUN CGO_ENABLED=0 go build \
-ldflags "$GO_LDFLAGS" \
-o /bin/karmada-webhook \
cmd/webhook/main.go
FROM alpine:3.15.1
RUN apk add --no-cache ca-certificates
ADD karmada-webhook /bin/
COPY --from=builder /bin/karmada-webhook /bin/karmada-webhook
CMD ["/bin/karmada-webhook"]

View File

@ -7,12 +7,15 @@ set -o pipefail
# This script holds docker related functions.
REPO_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
source "${REPO_ROOT}/hack/util.sh"
REGISTRY=${REGISTRY:-"swr.ap-southeast-1.myhuaweicloud.com/karmada"}
VERSION=${VERSION:="unknown"}
GO_LDFLAGS=$(util::get_GO_LDFLAGS)
function build_images() {
local target="$1"
docker build -t ${REGISTRY}/${target}:${VERSION} -f ${REPO_ROOT}/cluster/images/${target}/Dockerfile ${REPO_ROOT}
docker build --build-arg GO_LDFLAGS="${GO_LDFLAGS}" -t ${REGISTRY}/${target}:${VERSION} -f ${REPO_ROOT}/cluster/images/${target}/Dockerfile ${REPO_ROOT}
}
build_images $@

View File

@ -555,3 +555,20 @@ function util::get_macos_ipaddress() {
MAC_NIC_IPADDRESS=${MAC_NIC_IPADDRESS:-}
fi
}
function util::get_GO_LDFLAGS() {
# Git information
GIT_VERSION=$(git describe --tags --dirty)
GIT_COMMIT_HASH=$(git rev-parse HEAD)
GIT_TREESTATE="clean"
GIT_DIFF=$(git diff --quiet >/dev/null 2>&1; if [[ $$ = 1 ]]; then echo "1"; fi)
if [[ "${GIT_DIFF}" == "1" ]];then
GIT_TREESTATE="dirty"
fi
BUILDDATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
LDFLAGS="-X github.com/karmada-io/karmada/pkg/version.gitVersion=${GIT_VERSION} \
-X github.com/karmada-io/karmada/pkg/version.gitCommit=${GIT_COMMIT_HASH} \
-X github.com/karmada-io/karmada/pkg/version.gitTreeState=${GIT_TREESTATE} \
-X github.com/karmada-io/karmada/pkg/version.buildDate=${BUILDDATE}"
echo $LDFLAGS
}

10
hack/version.sh Normal file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
KARMADA_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)"
source "${KARMADA_ROOT}/hack/util.sh"
util::get_GO_LDFLAGS