FROM ubuntu:24.04 ENV DEBIAN_FRONTEND=noninteractive ENV HOME=/root ENV PATH="/usr/local/bin:/root/.bun/bin:$PATH" # Base tools RUN apt-get update && apt-get install -y --no-install-recommends \ curl wget git openssh-server ca-certificates gnupg \ build-essential unzip zip jq tmux zsh ripgrep \ postgresql-client redis-tools haproxy tini \ nano vim htop netcat-openbsd dnsutils iputils-ping lsof iproute2 \ && rm -rf /var/lib/apt/lists/* # Bun — install then move to /usr/local/bin so it's on the image filesystem, not the /root PVC RUN curl -fsSL https://bun.sh/install | bash \ && mv /root/.bun/bin/bun /usr/local/bin/bun \ && ln -sf /usr/local/bin/bun /usr/local/bin/bunx \ && rm -rf /root/.bun # code-server (VS Code in browser) RUN curl -fsSL https://code-server.dev/install.sh | sh # kubectl RUN curl -fsSL "https://dl.k8s.io/release/$(curl -fsSL https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" \ -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl # doctl RUN curl -fsSL https://github.com/digitalocean/doctl/releases/download/v1.119.0/doctl-1.119.0-linux-amd64.tar.gz \ | tar xz -C /usr/local/bin # helm RUN curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash # k9s RUN curl -fsSL https://github.com/derailed/k9s/releases/latest/download/k9s_Linux_amd64.tar.gz \ | tar xz -C /usr/local/bin k9s # SSH setup — host keys generated at runtime via entrypoint RUN mkdir -p /run/sshd /root/.ssh && chmod 700 /root/.ssh COPY entrypoint-devpod.sh /entrypoint.sh RUN chmod +x /entrypoint.sh WORKDIR /root EXPOSE 8080 22 ENTRYPOINT ["/usr/bin/tini", "--", "/entrypoint.sh"]