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)
|
GOARCH ?= $(shell go env GOARCH)
|
||||||
SOURCES := $(shell find . -type f -name '*.go')
|
SOURCES := $(shell find . -type f -name '*.go')
|
||||||
|
|
||||||
# Git information
|
LDFLAGS='$(shell hack/version.sh)'
|
||||||
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)"
|
|
||||||
|
|
||||||
# Images management
|
# Images management
|
||||||
REGISTRY?="swr.ap-southeast-1.myhuaweicloud.com/karmada"
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-interpreter-webhook-example
|
||||||
|
|
||||||
upload-images: images
|
upload-images: images
|
||||||
|
@ -156,35 +143,35 @@ endif
|
||||||
docker push ${REGISTRY}/karmada-aggregated-apiserver:${VERSION}
|
docker push ${REGISTRY}/karmada-aggregated-apiserver:${VERSION}
|
||||||
|
|
||||||
# Build and push multi-platform image to DockerHub
|
# 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 .
|
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
|
# 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 .
|
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
|
# 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 .
|
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
|
# 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 .
|
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
|
# 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 .
|
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
|
# 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 .
|
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
|
# 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 .
|
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
|
# 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 .
|
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.
|
# 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
|
FROM alpine:3.15.1
|
||||||
|
|
||||||
RUN apk add --no-cache ca-certificates
|
RUN apk add --no-cache ca-certificates
|
||||||
|
|
||||||
ADD karmada-agent /bin/
|
COPY --from=builder /bin/karmada-agent /bin/karmada-agent
|
||||||
|
|
||||||
CMD ["/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
|
FROM alpine:3.15.1
|
||||||
|
|
||||||
RUN apk add --no-cache ca-certificates
|
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"]
|
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
|
FROM alpine:3.15.1
|
||||||
|
|
||||||
RUN apk add --no-cache ca-certificates
|
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"]
|
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
|
FROM alpine:3.15.1
|
||||||
|
|
||||||
RUN apk add --no-cache ca-certificates
|
RUN apk add --no-cache ca-certificates
|
||||||
|
|
||||||
ADD karmada-descheduler /bin/
|
COPY --from=builder /bin/karmada-descheduler /bin/karmada-descheduler
|
||||||
|
|
||||||
CMD ["/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
|
FROM alpine:3.15.1
|
||||||
|
|
||||||
RUN apk add --no-cache ca-certificates
|
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"]
|
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
|
FROM alpine:3.15.1
|
||||||
|
|
||||||
RUN apk add --no-cache ca-certificates
|
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"]
|
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
|
FROM alpine:3.15.1
|
||||||
|
|
||||||
RUN apk add --no-cache ca-certificates
|
RUN apk add --no-cache ca-certificates
|
||||||
|
|
||||||
ADD karmada-scheduler /bin/
|
COPY --from=builder /bin/karmada-scheduler /bin/karmada-scheduler
|
||||||
|
|
||||||
CMD ["/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
|
FROM alpine:3.15.1
|
||||||
|
|
||||||
RUN apk add --no-cache ca-certificates
|
RUN apk add --no-cache ca-certificates
|
||||||
|
|
||||||
ADD karmada-webhook /bin/
|
COPY --from=builder /bin/karmada-webhook /bin/karmada-webhook
|
||||||
|
|
||||||
CMD ["/bin/karmada-webhook"]
|
CMD ["/bin/karmada-webhook"]
|
||||||
|
|
|
@ -7,12 +7,15 @@ set -o pipefail
|
||||||
# This script holds docker related functions.
|
# This script holds docker related functions.
|
||||||
|
|
||||||
REPO_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
|
REPO_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
|
||||||
|
source "${REPO_ROOT}/hack/util.sh"
|
||||||
|
|
||||||
REGISTRY=${REGISTRY:-"swr.ap-southeast-1.myhuaweicloud.com/karmada"}
|
REGISTRY=${REGISTRY:-"swr.ap-southeast-1.myhuaweicloud.com/karmada"}
|
||||||
VERSION=${VERSION:="unknown"}
|
VERSION=${VERSION:="unknown"}
|
||||||
|
GO_LDFLAGS=$(util::get_GO_LDFLAGS)
|
||||||
|
|
||||||
function build_images() {
|
function build_images() {
|
||||||
local target="$1"
|
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 $@
|
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:-}
|
MAC_NIC_IPADDRESS=${MAC_NIC_IPADDRESS:-}
|
||||||
fi
|
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