Skip to content

Commit 204b6e5

Browse files
committed
refactor Dockerfile using multi-stage docker build
Signed-off-by: guoyao <guoyao17@huawei.com>
1 parent 365b287 commit 204b6e5

File tree

11 files changed

+147
-36
lines changed

11 files changed

+147
-36
lines changed

Makefile

+15-28
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,7 @@ GOOS ?= $(shell go env GOOS)
22
GOARCH ?= $(shell go env GOARCH)
33
SOURCES := $(shell find . -type f -name '*.go')
44

5-
# Git information
6-
GIT_VERSION ?= $(shell git describe --tags --dirty)
7-
GIT_COMMIT_HASH ?= $(shell git rev-parse HEAD)
8-
GIT_TREESTATE = "clean"
9-
GIT_DIFF = $(shell git diff --quiet >/dev/null 2>&1; if [ $$? -eq 1 ]; then echo "1"; fi)
10-
ifeq ($(GIT_DIFF), 1)
11-
GIT_TREESTATE = "dirty"
12-
endif
13-
BUILDDATE = $(shell date -u +'%Y-%m-%dT%H:%M:%SZ')
14-
15-
LDFLAGS := "-X github.com/karmada-io/karmada/pkg/version.gitVersion=$(GIT_VERSION) \
16-
-X github.com/karmada-io/karmada/pkg/version.gitCommit=$(GIT_COMMIT_HASH) \
17-
-X github.com/karmada-io/karmada/pkg/version.gitTreeState=$(GIT_TREESTATE) \
18-
-X github.com/karmada-io/karmada/pkg/version.buildDate=$(BUILDDATE)"
5+
LDFLAGS='$(shell hack/version.sh)'
196

207
# Images management
218
REGISTRY_REGION?="ap-southeast-1"
@@ -115,25 +102,25 @@ test:
115102

116103
images: image-karmada-aggregated-apiserver image-karmada-controller-manager image-karmada-scheduler image-karmada-webhook image-karmada-agent image-karmada-scheduler-estimator image-karmada-interpreter-webhook-example
117104

118-
image-karmada-aggregated-apiserver: karmada-aggregated-apiserver
105+
image-karmada-aggregated-apiserver:
119106
VERSION=$(VERSION) hack/docker.sh karmada-aggregated-apiserver
120107

121-
image-karmada-controller-manager: karmada-controller-manager
108+
image-karmada-controller-manager:
122109
VERSION=$(VERSION) hack/docker.sh karmada-controller-manager
123110

124-
image-karmada-scheduler: karmada-scheduler
111+
image-karmada-scheduler:
125112
VERSION=$(VERSION) hack/docker.sh karmada-scheduler
126113

127-
image-karmada-webhook: karmada-webhook
114+
image-karmada-webhook:
128115
VERSION=$(VERSION) hack/docker.sh karmada-webhook
129116

130-
image-karmada-agent: karmada-agent
117+
image-karmada-agent:
131118
VERSION=$(VERSION) hack/docker.sh karmada-agent
132119

133-
image-karmada-scheduler-estimator: karmada-scheduler-estimator
120+
image-karmada-scheduler-estimator:
134121
VERSION=$(VERSION) hack/docker.sh karmada-scheduler-estimator
135122

136-
image-karmada-interpreter-webhook-example: karmada-interpreter-webhook-example
123+
image-karmada-interpreter-webhook-example:
137124
VERSION=$(VERSION) hack/docker.sh karmada-interpreter-webhook-example
138125

139126
upload-images: images
@@ -150,31 +137,31 @@ endif
150137
docker push ${REGISTRY}/karmada-aggregated-apiserver:${VERSION}
151138

152139
# Build and push multi-platform image to DockerHub
153-
mp-image-karmada-controller-manager: karmada-controller-manager
140+
mp-image-karmada-controller-manager:
154141
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-controller-manager:${VERSION} --file=cluster/images/karmada-controller-manager/Dockerfile .
155142

156143
# Build and push multi-platform image to DockerHub
157-
mp-image-karmada-scheduler: karmada-scheduler
144+
mp-image-karmada-scheduler:
158145
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-scheduler:${VERSION} --file=cluster/images/karmada-scheduler/Dockerfile .
159146

160147
# Build and push multi-platform image to DockerHub
161-
mp-image-karmada-webhook: karmada-webhook
148+
mp-image-karmada-webhook:
162149
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-webhook:${VERSION} --file=cluster/images/karmada-webhook/Dockerfile .
163150

164151
# Build and push multi-platform image to DockerHub
165-
mp-image-karmada-agent: karmada-agent
152+
mp-image-karmada-agent:
166153
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-agent:${VERSION} --file=cluster/images/karmada-agent/Dockerfile .
167154

168155
# Build and push multi-platform image to DockerHub
169-
mp-image-karmada-scheduler-estimator: karmada-scheduler-estimator
156+
mp-image-karmada-scheduler-estimator:
170157
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-scheduler-estimator:${VERSION} --file=cluster/images/karmada-scheduler-estimator/Dockerfile .
171158

172159
# Build and push multi-platform image to DockerHub
173-
mp-image-karmada-interpreter-webhook-example: karmada-interpreter-webhook-example
160+
mp-image-karmada-interpreter-webhook-example:
174161
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-interpreter-webhook-example:${VERSION} --file=cluster/images/karmada-interpreter-webhook-example/Dockerfile .
175162

176163
# Build and push multi-platform image to DockerHub
177-
mp-image-karmada-aggregated-apiserver: karmada-aggregated-apiserver
164+
mp-image-karmada-aggregated-apiserver:
178165
docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-aggregated-apiserver:${VERSION} --file=cluster/images/karmada-aggregated-apiserver/Dockerfile .
179166

180167
# Build and push multi-platform images to DockerHub.
+14-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,20 @@
1+
FROM golang:1.17-alpine3.15 AS builder
2+
3+
WORKDIR /go/src/github.com/karmada-io/karmada
4+
COPY . /go/src/github.com/karmada-io/karmada
5+
6+
ARG GO_LDFLAGS
7+
8+
RUN CGO_ENABLED=0 go build \
9+
-ldflags "$GO_LDFLAGS" \
10+
-o /bin/karmada-agent \
11+
cmd/agent/main.go
12+
13+
114
FROM alpine:3.15.1
215

316
RUN apk add --no-cache ca-certificates
417

5-
ADD karmada-agent /bin/
18+
COPY --from=builder /bin/karmada-agent /bin/karmada-agent
619

720
CMD ["/bin/karmada-agent"]
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,20 @@
1+
FROM golang:1.17-alpine3.15 AS builder
2+
3+
WORKDIR /go/src/github.com/karmada-io/karmada
4+
COPY . /go/src/github.com/karmada-io/karmada
5+
6+
ARG GO_LDFLAGS
7+
8+
RUN CGO_ENABLED=0 go build \
9+
-ldflags "${GO_LDFLAGS}" \
10+
-o /bin/karmada-aggregated-apiserver \
11+
cmd/aggregated-apiserver/main.go
12+
13+
114
FROM alpine:3.15.1
215

316
RUN apk add --no-cache ca-certificates
417

5-
ADD karmada-aggregated-apiserver /bin/
18+
COPY --from=builder /bin/karmada-aggregated-apiserver /bin/karmada-aggregated-apiserver
619

720
CMD ["/bin/karmada-aggregated-apiserver"]
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,20 @@
1+
FROM golang:1.17-alpine3.15 AS builder
2+
3+
WORKDIR /go/src/github.com/karmada-io/karmada
4+
COPY . /go/src/github.com/karmada-io/karmada
5+
6+
ARG GO_LDFLAGS
7+
8+
RUN CGO_ENABLED=0 go build \
9+
-ldflags "$GO_LDFLAGS" \
10+
-o /bin/karmada-controller-manager \
11+
cmd/controller-manager/controller-manager.go
12+
13+
114
FROM alpine:3.15.1
215

316
RUN apk add --no-cache ca-certificates
417

5-
ADD karmada-controller-manager /bin/
18+
COPY --from=builder /bin/karmada-controller-manager /bin/karmada-controller-manager
619

720
CMD ["/bin/karmada-controller-manager"]
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,21 @@
1+
FROM golang:1.17-alpine3.15 AS builder
2+
3+
WORKDIR /go/src/github.com/karmada-io/karmada
4+
COPY . /go/src/github.com/karmada-io/karmada
5+
6+
ARG GO_LDFLAGS
7+
8+
RUN CGO_ENABLED=0 go build \
9+
-ldflags "$GO_LDFLAGS" \
10+
-o /bin/karmada-interpreter-webhook-example \
11+
examples/customresourceinterpreter/webhook/main.go
12+
13+
114
FROM alpine:3.15.1
215

316
RUN apk add --no-cache ca-certificates
417

5-
ADD karmada-interpreter-webhook-example /bin/
18+
COPY --from=builder /bin/karmada-interpreter-webhook-example /bin/karmada-interpreter-webhook-example
619

720
CMD ["/bin/karmada-interpreter-webhook-example"]
21+
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,21 @@
1+
FROM golang:1.17-alpine3.15 AS builder
2+
3+
WORKDIR /go/src/github.com/karmada-io/karmada
4+
COPY . /go/src/github.com/karmada-io/karmada
5+
6+
ARG GO_LDFLAGS
7+
8+
RUN CGO_ENABLED=0 go build \
9+
-ldflags "$GO_LDFLAGS" \
10+
-o /bin/karmada-scheduler-estimator \
11+
cmd/scheduler-estimator/main.go
12+
13+
114
FROM alpine:3.15.1
215

316
RUN apk add --no-cache ca-certificates
417

5-
ADD karmada-scheduler-estimator /bin/
18+
COPY --from=builder /bin/karmada-scheduler-estimator /bin/karmada-scheduler-estimator
619

720
CMD ["/bin/karmada-scheduler-estimator"]
21+
+15-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,21 @@
1+
FROM golang:1.17-alpine3.15 AS builder
2+
3+
WORKDIR /go/src/github.com/karmada-io/karmada
4+
COPY . /go/src/github.com/karmada-io/karmada
5+
6+
ARG GO_LDFLAGS
7+
8+
RUN CGO_ENABLED=0 go build \
9+
-ldflags "$GO_LDFLAGS" \
10+
-o /bin/karmada-scheduler \
11+
cmd/scheduler/main.go
12+
13+
114
FROM alpine:3.15.1
215

316
RUN apk add --no-cache ca-certificates
417

5-
ADD karmada-scheduler /bin/
18+
COPY --from=builder /bin/karmada-scheduler /bin/karmada-scheduler
619

720
CMD ["/bin/karmada-scheduler"]
21+
+14-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,20 @@
1+
FROM golang:1.17-alpine3.15 AS builder
2+
3+
WORKDIR /go/src/github.com/karmada-io/karmada
4+
COPY . /go/src/github.com/karmada-io/karmada
5+
6+
ARG GO_LDFLAGS
7+
8+
RUN CGO_ENABLED=0 go build \
9+
-ldflags "$GO_LDFLAGS" \
10+
-o /bin/karmada-webhook \
11+
cmd/webhook/main.go
12+
13+
114
FROM alpine:3.15.1
215

316
RUN apk add --no-cache ca-certificates
417

5-
ADD karmada-webhook /bin/
18+
COPY --from=builder /bin/karmada-webhook /bin/karmada-webhook
619

720
CMD ["/bin/karmada-webhook"]

hack/docker.sh

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@ set -o pipefail
77
# This script holds docker related functions.
88

99
REPO_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
10+
source "${REPO_ROOT}/hack/util.sh"
11+
1012
REGISTRY=${REGISTRY:-"swr.ap-southeast-1.myhuaweicloud.com/karmada"}
1113
VERSION=${VERSION:="unknown"}
14+
GO_LDFLAGS=$(util::get_GO_LDFLAGS)
1215

1316
function build_images() {
1417
local target="$1"
15-
docker build -t ${REGISTRY}/${target}:${VERSION} -f ${REPO_ROOT}/cluster/images/${target}/Dockerfile ${REPO_ROOT}
18+
docker build --build-arg GO_LDFLAGS="${GO_LDFLAGS}" -t ${REGISTRY}/${target}:${VERSION} -f ${REPO_ROOT}/cluster/images/${target}/Dockerfile ${REPO_ROOT}
1619
}
1720

1821
build_images $@

hack/util.sh

+17
Original file line numberDiff line numberDiff line change
@@ -537,3 +537,20 @@ function util::get_macos_ipaddress() {
537537
MAC_NIC_IPADDRESS=${MAC_NIC_IPADDRESS:-}
538538
fi
539539
}
540+
541+
function util::get_GO_LDFLAGS() {
542+
# Git information
543+
GIT_VERSION=$(git describe --tags --dirty)
544+
GIT_COMMIT_HASH=$(git rev-parse HEAD)
545+
GIT_TREESTATE="clean"
546+
GIT_DIFF=$(git diff --quiet >/dev/null 2>&1; if [[ $$ = 1 ]]; then echo "1"; fi)
547+
if [[ "${GIT_DIFF}" == "1" ]];then
548+
GIT_TREESTATE="dirty"
549+
fi
550+
BUILDDATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
551+
LDFLAGS="-X github.com/karmada-io/karmada/pkg/version.gitVersion=${GIT_VERSION} \
552+
-X github.com/karmada-io/karmada/pkg/version.gitCommit=${GIT_COMMIT_HASH} \
553+
-X github.com/karmada-io/karmada/pkg/version.gitTreeState=${GIT_TREESTATE} \
554+
-X github.com/karmada-io/karmada/pkg/version.buildDate=${BUILDDATE}"
555+
echo $LDFLAGS
556+
}

hack/version.sh

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/usr/bin/env bash
2+
3+
set -o errexit
4+
set -o nounset
5+
set -o pipefail
6+
7+
KARMADA_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)"
8+
source "${KARMADA_ROOT}/hack/util.sh"
9+
10+
util::get_GO_LDFLAGS

0 commit comments

Comments
 (0)