How to install kubectl and helm using dockerfile?

9/21/2020

I'm new to Docker. I'm trying to create a dockerfile which basically sets kubectl (Kubernetes client), helm 3 and Python 3.7. I used:

FROM python:3.7-alpine
COPY ./ /usr/src/app/
WORKDIR /usr/src/app

Now I'm trying to figure out how to add kubectl and helm. What would be the best way to install those two?

-- vesii
docker
dockerfile
kubernetes
kubernetes-helm

2 Answers

9/21/2020

Working Dockerfile. This will install the latest and stable versions of kubectl and helm-3

FROM python:3.7-alpine
COPY ./ /usr/src/app/
WORKDIR /usr/src/app
RUN apk add curl openssl bash --no-cache
RUN curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" \
    && chmod +x ./kubectl \
    && mv ./kubectl /usr/local/bin/kubectl \
	&& curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 \
	&& chmod +x get_helm.sh && ./get_helm.sh
-- Shashank Sinha
Source: StackOverflow

9/21/2020

Python should be available from a python base image I guess. My take would be s.th like

ENV K8S_VERSION=v1.18.X
ENV HELM_VERSION=v3.X.Y
ENV HELM_FILENAME=helm-${HELM_VERSION}-linux-amd64.tar.gz

and then in the Dockerfile

RUN curl -L https://storage.googleapis.com/kubernetes-release/release/${K8S_VERSION}/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl \
 && curl -L https://storage.googleapis.com/kubernetes-helm/${HELM_FILENAME} | tar xz && mv linux-amd64/helm /bin/helm && rm -rf linux-amd64

But be aware of the availability of curl or wget in the baseimage, maybe these or other tools and programs have to be installed before you can use it in the Dockerfile. This always depends on the baseimage used

-- kgorskowski
Source: StackOverflow