FROM python:3.11-slim # ---- system deps ---- RUN apt-get update && apt-get install -y --no-install-recommends \ curl wget git htop nano vim sudo \ build-essential net-tools procps \ ca-certificates gnupg lsb-release \ openssh-client jq tree unzip zip \ && curl -fsSL https://code-server.dev/install.sh | sh \ && apt-get clean && rm -rf /var/lib/apt/lists/* # ---- Node.js 20 LTS ---- RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ && apt-get install -y --no-install-recommends nodejs \ && npm install -g yarn pnpm typescript ts-node nodemon \ && apt-get clean && rm -rf /var/lib/apt/lists/* # ---- Python deps (from PyPI) ---- RUN pip install --no-cache-dir \ requests ipython huggingface_hub transformers \ numpy pandas scipy scikit-learn matplotlib \ flask fastapi uvicorn jupyter \ black ruff pylint # ---- PyTorch CPU-only (from PyTorch index) ---- RUN pip install --no-cache-dir \ torch torchvision torchaudio \ --extra-index-url https://download.pytorch.org/whl/cpu # ---- create user WITH PASSWORD + sudo ---- RUN useradd -m -u 1000 -s /bin/bash user \ && echo "user:user123" | chpasswd \ && usermod -aG sudo user \ && echo "user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/user \ && chmod 0440 /etc/sudoers.d/user # ---- switch to user ---- USER user ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH WORKDIR /home/user # ---- workspace + code-server extensions ---- RUN mkdir -p /home/user/workspace /home/user/.local/share/code-server RUN code-server --install-extension ms-python.python \ && code-server --install-extension esbenp.prettier-vscode \ && code-server --install-extension bradlc.vscode-tailwindcss \ && code-server --install-extension formulahendry.auto-rename-tag # ---- code-server settings ---- RUN mkdir -p /home/user/.local/share/code-server/User \ && echo '{\n\ "workbench.colorTheme": "Default Dark Modern",\n\ "editor.fontSize": 14,\n\ "editor.formatOnSave": true,\n\ "terminal.integrated.defaultProfile.linux": "bash",\n\ "extensions.autoUpdate": true\n\ }' > /home/user/.local/share/code-server/User/settings.json EXPOSE 7860 CMD ["code-server", \ "--bind-addr", "0.0.0.0:7860", \ "--auth", "none", \ "--disable-telemetry", \ "/home/user/workspace"]