|
1 | | -FROM alpine:3.21.3 |
2 | | - |
3 | | -ARG KUBECTL_VERSION=v1.33.1 |
4 | | -ARG HELM_VERSION=v3.18.1 |
5 | | -ARG KUSTOMIZE_VERSION=v5.6.0 |
6 | | -ARG TARGETOS |
7 | | -ARG TARGETARCH |
8 | | - |
9 | | -RUN apk update && apk add \ |
10 | | - bash \ |
11 | | - bash-completion \ |
12 | | - busybox-extras \ |
13 | | - net-tools \ |
14 | | - vim \ |
15 | | - curl \ |
16 | | - jq \ |
17 | | - yq \ |
18 | | - grep \ |
19 | | - wget \ |
20 | | - tcpdump \ |
21 | | - git \ |
22 | | - ca-certificates && \ |
23 | | - update-ca-certificates && \ |
24 | | - rm -rf /var/cache/apk/* && \ |
25 | | - curl -SsLO https://get.helm.sh/helm-${HELM_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz && \ |
26 | | - tar xf helm-${HELM_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz -C /usr/local/bin && \ |
27 | | - mv /usr/local/bin/${TARGETOS}-${TARGETARCH}/helm /usr/local/bin && \ |
28 | | - rm helm-${HELM_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz && \ |
29 | | - rm -rf /usr/local/bin/${TARGETOS}-${TARGETARCH} && \ |
30 | | - helm plugin install https://github.com/helm/helm-mapkubeapis |
31 | | - |
32 | | -RUN curl -LO https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl && \ |
33 | | - chmod +x ./kubectl && \ |
34 | | - mv ./kubectl /usr/local/bin/kubectl && \ |
35 | | - echo -e 'source /usr/share/bash-completion/bash_completion\nsource <(kubectl completion bash)' >>~/.bashrc |
36 | | - |
37 | | -RUN curl -SsLO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_${TARGETOS}_${TARGETARCH}.tar.gz && \ |
38 | | - tar xvzf kustomize_${KUSTOMIZE_VERSION}_${TARGETOS}_${TARGETARCH}.tar.gz && \ |
39 | | - mv kustomize /usr/local/bin/ && \ |
40 | | - rm kustomize_${KUSTOMIZE_VERSION}_${TARGETOS}_${TARGETARCH}.tar.gz |
| 1 | +# ---------- Build stage ---------- |
| 2 | +FROM alpine:3.22.1 AS builder |
41 | 3 |
|
42 | | -COPY entrypoint.sh /usr/local/bin/entrypoint.sh |
| 4 | +ARG TARGETOS=linux |
| 5 | +ARG TARGETARCH=amd64 |
| 6 | +ARG KUBECTL_VERSION=v1.33.4 |
| 7 | +ARG HELM_VERSION=v3.18.5 |
| 8 | +ARG KUSTOMIZE_VERSION=v5.7.1 |
| 9 | + |
| 10 | +RUN apk add --no-cache curl tar gzip coreutils grep |
| 11 | + |
| 12 | +WORKDIR /tmp |
| 13 | + |
| 14 | +# ----- Download and verify Helm ----- |
| 15 | +RUN curl -fsSLO https://get.helm.sh/helm-${HELM_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz && \ |
| 16 | + curl -fsSLO https://get.helm.sh/helm-${HELM_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz.sha256 && \ |
| 17 | + echo "$(cat helm-${HELM_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz.sha256) helm-${HELM_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz" | sha256sum -c - && \ |
| 18 | + tar xf helm-${HELM_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz && \ |
| 19 | + mv ${TARGETOS}-${TARGETARCH}/helm /tmp/helm |
| 20 | + |
| 21 | +# ----- Download and verify kubectl ----- |
| 22 | +RUN curl -fsSLo /tmp/kubectl https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl && \ |
| 23 | + curl -fsSLo /tmp/kubectl.sha256 https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl.sha256 && \ |
| 24 | + echo "$(cat /tmp/kubectl.sha256) /tmp/kubectl" | sha256sum -c - && \ |
| 25 | + chmod +x /tmp/kubectl |
| 26 | + |
| 27 | +# ----- Download and verify kustomize ----- |
| 28 | +# GitHub release tag: kustomize/vX.Y.Z |
| 29 | +# File name: kustomize_X.Y.Z_linux_amd64.tar.gz |
| 30 | +RUN curl -fsSLO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2F${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_${TARGETOS}_${TARGETARCH}.tar.gz && \ |
| 31 | + curl -fsSLO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2F${KUSTOMIZE_VERSION}/checksums.txt && \ |
| 32 | + grep "kustomize_${KUSTOMIZE_VERSION}_${TARGETOS}_${TARGETARCH}.tar.gz" checksums.txt | sha256sum -c - && \ |
| 33 | + tar xzf kustomize_${KUSTOMIZE_VERSION}_${TARGETOS}_${TARGETARCH}.tar.gz |
43 | 34 |
|
44 | | -ENTRYPOINT ["entrypoint.sh"] |
45 | 35 |
|
| 36 | +# ---------- Runtime stage ---------- |
| 37 | +FROM alpine:3.22.1 |
46 | 38 |
|
| 39 | +RUN apk add --no-cache \ |
| 40 | + bash \ |
| 41 | + bash-completion \ |
| 42 | + busybox-extras \ |
| 43 | + net-tools \ |
| 44 | + vim \ |
| 45 | + curl \ |
| 46 | + jq \ |
| 47 | + yq \ |
| 48 | + grep \ |
| 49 | + wget \ |
| 50 | + tcpdump \ |
| 51 | + git \ |
| 52 | + ca-certificates && \ |
| 53 | + update-ca-certificates |
| 54 | + |
| 55 | +# Copy verified binaries |
| 56 | +COPY --from=builder /tmp/helm /usr/local/bin/helm |
| 57 | +COPY --from=builder /tmp/kubectl /usr/local/bin/kubectl |
| 58 | +COPY --from=builder /tmp/kustomize /usr/local/bin/kustomize |
| 59 | + |
| 60 | +# Enable kubectl bash completion globally |
| 61 | +RUN echo -e 'source /usr/share/bash-completion/bash_completion\nsource <(kubectl completion bash)' >> /etc/bash.bashrc |
| 62 | + |
| 63 | +# Install Helm plugin |
| 64 | +RUN helm plugin install https://github.com/helm/helm-mapkubeapis |
| 65 | + |
| 66 | +COPY entrypoint.sh /usr/local/bin/entrypoint.sh |
| 67 | + |
| 68 | +ENTRYPOINT ["entrypoint.sh"] |
0 commit comments