refactor Dockerfile using multi-stage docker build
Signed-off-by: guoyao <guoyao17@huawei.com>
This commit is contained in:
parent
cd05ffee6e
commit
aa39b35ded
47
Makefile
47
Makefile
|
@ -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.
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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"]
|
||||
|
||||
|
|
|
@ -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"]
|
||||
|
||||
|
|
|
@ -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"]
|
||||
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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 $@
|
||||
|
|
17
hack/util.sh
17
hack/util.sh
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue