From 5df3fb69e3656bbc940c9224bbfdf98bd1839bc0 Mon Sep 17 00:00:00 2001 From: Jaret Burkett Date: Sun, 14 Jun 2026 12:19:58 -0600 Subject: [PATCH] Rework Docker image for a minimal build/pull/push footprint --- docker/Dockerfile | 48 +++++++++++++++++++++++++++++++++-------------- version.py | 2 +- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 44d4d9db..0c7032f0 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -51,26 +51,46 @@ RUN ln -s /usr/bin/python3 /usr/bin/python # install pytorch before cache bust to avoid redownloading pytorch RUN pip install --no-cache-dir torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1 --index-url https://download.pytorch.org/whl/cu128 --break-system-packages -# Fix cache busting by moving CACHEBUST to right before git clone -ARG CACHEBUST=1234 -ARG GIT_COMMIT=main -RUN echo "Cache bust: ${CACHEBUST}" && \ - git clone https://github.com/ostris/ai-toolkit.git && \ - cd ai-toolkit && \ - git checkout ${GIT_COMMIT} - WORKDIR /app/ai-toolkit -# copy requirements.txt to leverage docker cache -COPY requirements.txt /app/ai-toolkit/requirements.txt +# ---------------------------------------------------------------------------- # +# Dependency layers come BEFORE the source clone so they are only rebuilt (and +# only need to be re-pulled by servers) when the dependency manifests change, +# not on every code change. +# ---------------------------------------------------------------------------- # -# Install Python dependencies +# Install Python dependencies (only re-runs when requirements.txt changes) +COPY requirements.txt /app/ai-toolkit/requirements.txt RUN pip install --no-cache-dir --break-system-packages -r requirements.txt && \ pip install setuptools==69.5.1 --no-cache-dir --break-system-packages -# Build UI -WORKDIR /app/ai-toolkit/ui -RUN npm install && \ +# Install Node dependencies (only re-runs when package.json / package-lock.json change) +COPY ui/package.json ui/package-lock.json /app/ai-toolkit/ui/ +RUN cd /app/ai-toolkit/ui && npm ci + +# ---------------------------------------------------------------------------- # +# Source code comes LAST. Only this layer (plus the UI build below) is rebuilt +# on a code change, so servers only re-pull the (small) source, not the deps. +# Clone to a temp dir and rsync the source in, preserving the dependency dirs +# already populated above (ui/node_modules) and the manifests already used. +# ---------------------------------------------------------------------------- # +ARG CACHEBUST=1234 +ARG GIT_COMMIT=main +RUN echo "Cache bust: ${CACHEBUST}" && \ + git clone https://github.com/ostris/ai-toolkit.git /tmp/ai-toolkit-src && \ + cd /tmp/ai-toolkit-src && \ + git checkout ${GIT_COMMIT} && \ + rsync -a --delete \ + --exclude '.git' \ + --exclude 'ui/node_modules' \ + --exclude 'requirements.txt' \ + --exclude 'ui/package.json' \ + --exclude 'ui/package-lock.json' \ + /tmp/ai-toolkit-src/ /app/ai-toolkit/ && \ + rm -rf /tmp/ai-toolkit-src + +# Build UI (re-runs on code change, but reuses the cached node_modules above) +RUN cd /app/ai-toolkit/ui && \ npm run build && \ npm run update_db diff --git a/version.py b/version.py index 80b055bd..4c65788c 100644 --- a/version.py +++ b/version.py @@ -1 +1 @@ -VERSION = "0.10.10" +VERSION = "0.10.11"