Rework Docker image for a minimal build/pull/push footprint

This commit is contained in:
Jaret Burkett 2026-06-14 12:19:58 -06:00
parent c0d600b5d6
commit 5df3fb69e3
2 changed files with 35 additions and 15 deletions

View File

@ -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

View File

@ -1 +1 @@
VERSION = "0.10.10"
VERSION = "0.10.11"