@@ -3,8 +3,7 @@ ARG DOCKER_REGISTRY=ghcr.io
33ARG TOOLS_UV_VERSION=latest
44
55# ## STAGE 1: base image
6- FROM $DOCKER_REGISTRY/astral-sh/uv:${TOOLS_UV_VERSION}-bookworm-slim AS base-os
7- ARG TOOLS_NODE_VERSION
6+ FROM $DOCKER_REGISTRY/astral-sh/uv:${TOOLS_UV_VERSION}-debian-slim AS base-os
87
98# ENVIRONMENT VARIABLES
109ENV DEBIAN_FRONTEND=noninteractive
@@ -22,6 +21,7 @@ RUN mkdir -p /etc/apt/keyrings \
2221 && ln -sf /usr/bin/python3 /usr/bin/python
2322
2423FROM base-os AS base
24+ ARG TOOLS_NODE_VERSION
2525
2626# Install python
2727RUN uv python install 3.12
@@ -40,24 +40,20 @@ RUN mkdir -p $NVM_DIR \
4040 && nvm install $TOOLS_NODE_VERSION \
4141 && nvm use $TOOLS_NODE_VERSION \
4242 && which node && node --version \
43- && ln -sf $NVM_DIR/versions/node/v$TOOLS_NODE_VERSION/bin/node /usr/bin/node
43+ && ln -sf $NVM_DIR/versions/node/v$TOOLS_NODE_VERSION/bin/node /usr/bin/node \
44+ && ln -sf $NVM_DIR/versions/node/v$TOOLS_NODE_VERSION/bin/npm /usr/bin/npm \
45+ && ln -sf $NVM_DIR/versions/node/v$TOOLS_NODE_VERSION/bin/npx /usr/bin/npx
4446
45- # ## STAGE 2: build + tools
46- FROM --platform=$BUILDPLATFORM base-os AS builder
47+ # ## STAGE 2: build + tools (extends base to inherit Node.js and Python)
48+ FROM --platform=$BUILDPLATFORM base AS builder
4749
4850ARG TARGETARCH
49- ARG TOOLS_ISTIO_VERSION
50- ARG TOOLS_ARGO_CD_VERSION
5151
5252RUN apt-get update && apt-get install -y --no-install-recommends \
5353 bsdmainutils \
5454 build-essential \
55- ca-certificates \
5655 conntrack \
57- curl \
5856 gettext-base \
59- git \
60- gnupg \
6157 gnupg2 \
6258 htop \
6359 iperf3 \
@@ -71,13 +67,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
7167 lsof \
7268 net-tools \
7369 netcat-openbsd \
74- python3 \
7570 python3-dev \
7671 python3-pip \
7772 python3-venv \
7873 sshuttle \
7974 tcpdump \
80- wget \
8175 zsh \
8276 && curl -fsSL https://get.docker.com -o get-docker.sh \
8377 && sh get-docker.sh \
@@ -87,30 +81,35 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
8781
8882# ## STAGE 3 add golang
8983FROM builder AS node-python-golang
84+ ARG TARGETARCH
9085ARG TOOLS_GO_VERSION
91- ARG TOOLS_K9S_VERSION
92- ARG TOOLS_KIND_VERSION
93- ARG TOOLS_ISTIO_VERSION
94- ARG TOOLS_ARGO_CD_VERSION
95- ARG TOOLS_KUBECTL_VERSION
9686ARG ARCH=${TARGETARCH:-amd64}
9787
9888# ENVIRONMENT VARIABLES
99- ENV DEBIAN_FRONTEND=noninteractive
10089ENV GO111MODULE=on
10190ENV GOTOOLCHAIN=local
102- ENV GOPROXY="http://proxy.golang.org"
103- ENV PATH=$PATH:/usr/local/go/bin
91+ ENV GOPATH=/root/go
92+ ENV GOBIN=$GOPATH/bin
93+ ENV GOPROXY="https://proxy.golang.org,direct"
94+ ENV PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
10495
10596RUN --mount=type=cache,target=/cache,rw \
10697 wget -q --show-progress -P /cache https://golang.org/dl/go${TOOLS_GO_VERSION}.linux-${ARCH}.tar.gz && \
10798 tar -C /usr/local -xzf /cache/go${TOOLS_GO_VERSION}.linux-${ARCH}.tar.gz
10899
109- # ## STAGE 3 add tools
100+ # ## STAGE 4 add tools
110101FROM --platform=$BUILDPLATFORM node-python-golang AS tools-node-python-golang
111102
103+ ARG TARGETARCH
104+ ARG ARCH=${TARGETARCH:-amd64}
105+ ARG TOOLS_K9S_VERSION
106+ ARG TOOLS_KIND_VERSION
107+ ARG TOOLS_ISTIO_VERSION
108+ ARG TOOLS_ARGO_CD_VERSION
109+ ARG TOOLS_KUBECTL_VERSION
110+
112111# Install kubectl argo plugin
113- RUN curl -o /usr/local/bin/kubectl-argo-rollouts -L https://github.com/argoproj/argo-rollouts/releases/${TOOLS_ARGO_CD_VERSION}/download /kubectl-argo-rollouts-linux-${ARCH} \
112+ RUN curl -o /usr/local/bin/kubectl-argo-rollouts -L https://github.com/argoproj/argo-rollouts/releases/download/ ${TOOLS_ARGO_CD_VERSION}/kubectl-argo-rollouts-linux-${ARCH} \
114113 && chmod +x /usr/local/bin/kubectl-argo-rollouts
115114
116115# Install Helm
@@ -125,7 +124,7 @@ RUN curl -L https://istio.io/downloadIstio | ISTIO_VERSION=${TOOLS_ISTIO_VERSION
125124 && rm -rf istio-*
126125
127126# Install kind
128- RUN curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.27.0 /kind-$(uname) -${ARCH} \
127+ RUN curl -Lo ./kind https://kind.sigs.k8s.io/dl/v${TOOLS_KIND_VERSION} /kind-linux -${ARCH} \
129128 && chmod +x ./kind \
130129 && mv ./kind /usr/local/bin/
131130
@@ -136,14 +135,20 @@ RUN curl -LO https://github.com/derailed/k9s/releases/download/v${TOOLS_K9S_VERS
136135 && chmod +x /usr/local/bin/k9s \
137136 && rm -f k9s_Linux_${ARCH}.tar.gz
138137
139- # Install kubectl \
140- RUN curl -Lo /usr/local/bin/kubectl "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt) /bin/linux/${ARCH}/kubectl" \
138+ # Install kubectl
139+ RUN curl -Lo /usr/local/bin/kubectl "https://dl.k8s.io/release/v${TOOLS_KUBECTL_VERSION} /bin/linux/${ARCH}/kubectl" \
141140 && chmod +x /usr/local/bin/kubectl
142141
143- RUN sh -c "$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)" \
144- sh -c "$(curl -fsSL https://starship.rs/install.sh)" -- --yes \
142+ RUN sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)" \
143+ && STARSHIP_SUFFIX=$(case ${ARCH} in amd64) echo x86_64-unknown-linux-gnu;; arm64) echo aarch64-unknown-linux-musl;; esac) \
144+ && curl -Lo starship.tar.gz "https://github.com/starship/starship/releases/latest/download/starship-${STARSHIP_SUFFIX}.tar.gz" \
145+ && tar -xzf starship.tar.gz -C /usr/local/bin/ \
146+ && rm starship.tar.gz \
145147 && mkdir -p /root/.config \
146148 && git config --global core.excludesfile /root/.gitignore_global \
147149 && echo "**/.idea/" > /root/.gitignore_global
148150
149- ENTRYPOINT ["zsh" ]
151+ # Install Claude
152+ RUN curl -fsSL https://claude.ai/install.sh | bash
153+
154+ ENTRYPOINT ["zsh" ]
0 commit comments