From 0e7366ecd6498a92febf691e5e322c9a4dc766be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milo=C5=A1=20Jovanovi=C4=87?= Date: Tue, 4 Aug 2026 23:32:27 +0200 Subject: [PATCH] Docker container for Claude Code to work on this folder if needed --- Dockerfile | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3116799 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,119 @@ +# ============================================================================= +# UC Salary Analysis — Dev Container +# ============================================================================= +# This container lets you run Claude Code in a Docker container so it can't +# access your file system. It also helps set things up for a web tool later, +# and has the proper dependencies. Tested on Linux, should work on macOS too. +# +# Multi-stage build with two named targets: +# +# claude-code — Claude Code + Python data pipeline tools +# for UCOP scraper refactor and classifier work +# +# webdev — All of the above + Node.js/Vite/React toolchain +# for the interactive UC salary visualisation site +# +# BUILD +# docker build --target claude-code -t uc-claude-code . +# docker build --target webdev -t uc-webdev . +# +# RUN (Claude Code) +# docker run -it --rm \ +# -v $(pwd):/workspace \ +# -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \ +# uc-claude-code +# +# RUN (web dev, with hot-reload on host port 5173) +# docker run -it --rm \ +# -v $(pwd):/workspace \ +# -p 5173:5173 \ +# uc-webdev +# +# The workspace is mounted at /workspace in all cases. +# ============================================================================= + +ARG DEBIAN_FRONTEND=noninteractive +ARG NODE_MAJOR=22 + +# ----------------------------------------------------------------------------- +# Stage 0 — base: Debian trixie + common system deps +# ----------------------------------------------------------------------------- +FROM debian:trixie-slim AS base + +ARG DEBIAN_FRONTEND +ARG NODE_MAJOR + +RUN apt-get update && apt-get install -y --no-install-recommends \ + bash \ + curl \ + wget \ + ca-certificates \ + gnupg \ + git \ + git-lfs \ + unzip \ + jq \ + ripgrep \ + python3 \ + python3-pip \ + python3-venv \ + python3-dev \ + build-essential \ + openssh-client \ + && rm -rf /var/lib/apt/lists/* + +ENV VIRTUAL_ENV=/opt/venv +RUN python3 -m venv $VIRTUAL_ENV +ENV PATH="$VIRTUAL_ENV/bin:$PATH" + +RUN pip install --no-cache-dir \ + requests \ + pandas \ + matplotlib \ + openpyxl + +# ----------------------------------------------------------------------------- +# Stage 1 — claude-code: add Claude Code CLI +# ----------------------------------------------------------------------------- +FROM base AS claude-code + +ARG NODE_MAJOR + +# Install Node.js via nodesource signed apt repo +# (the setup_*.x | bash method returns 404 as of 2025) +RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \ + | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] \ + https://deb.nodesource.com/node_${NODE_MAJOR}.x nodistro main" \ + > /etc/apt/sources.list.d/nodesource.list \ + && apt-get update \ + && apt-get install -y --no-install-recommends nodejs \ + && rm -rf /var/lib/apt/lists/* + +RUN npm install -g @anthropic-ai/claude-code + +WORKDIR /workspace +CMD ["bash"] + +# ----------------------------------------------------------------------------- +# Stage 2 — webdev: add full frontend toolchain on top of claude-code +# Exposes Vite at 5173 and FastAPI/uvicorn at 8000 to serve +# JSON to the frontend for a future tool or smth.. +# ----------------------------------------------------------------------------- +FROM claude-code AS webdev + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libvips-dev \ + procps \ + && rm -rf /var/lib/apt/lists/* + +RUN pip install --no-cache-dir \ + fastapi \ + "uvicorn[standard]" \ + pydantic + +EXPOSE 5173 +EXPOSE 8000 + +WORKDIR /workspace +CMD ["bash"]