1- FROM python:3.9-slim
1+ FROM python:3.9-slim as builder
2+
3+ # Ustawienie zmiennych środowiskowych
4+ ENV PYTHONDONTWRITEBYTECODE=1 \
5+ PYTHONUNBUFFERED=1 \
6+ PIP_NO_CACHE_DIR=0 \
7+ PIP_DISABLE_PIP_VERSION_CHECK=1
28
3- # Instalacja zależności systemowych
9+ # Instalacja podstawowych zależności systemowych
410RUN apt-get update && apt-get install -y --no-install-recommends \
511 build-essential \
6- git \
7- curl \
8- wget \
9- ca-certificates \
1012 && rm -rf /var/lib/apt/lists/*
1113
14+ # Utworzenie katalogu aplikacji
1215WORKDIR /app
1316
14- # Ustawienie zmiennych środowiskowych dla pip
17+ # Kopiowanie tylko pliku requirements.txt, aby wykorzystać cache Docker
18+ COPY containers/llm-orchestrator-min/requirements.txt .
19+
20+ # Instalacja zależności Pythona z wykorzystaniem cache
21+ RUN --mount=type=cache,target=/root/.cache/pip \
22+ pip install --upgrade pip && \
23+ pip wheel --wheel-dir=/app/wheels -r requirements.txt
24+
25+ # Druga faza - obraz docelowy
26+ FROM python:3.9-slim
27+
28+ # Ustawienie zmiennych środowiskowych
1529ENV PYTHONDONTWRITEBYTECODE=1 \
1630 PYTHONUNBUFFERED=1 \
17- # Domyślny port API - można nadpisać przy uruchomieniu kontenera
18- API_PORT=5000 \
19- # Domyślne ustawienia optymalizacji
20- USE_INT8=true
31+ USE_INT8=true \
32+ API_PORT=5000
33+
34+ # Instalacja podstawowych zależności systemowych
35+ RUN apt-get update && apt-get install -y --no-install-recommends \
36+ wget \
37+ && rm -rf /var/lib/apt/lists/*
2138
22- # Utworzenie katalogów dla aplikacji
23- RUN mkdir -p /app/models /app/config /app/model-configs /app/data
39+ # Utworzenie katalogu aplikacji
40+ WORKDIR /app
2441
25- # Kopiowanie tylko pliku requirements.txt najpierw, aby lepiej wykorzystać cache
42+ # Kopiowanie skompilowanych pakietów z poprzedniej fazy
43+ COPY --from=builder /app/wheels /app/wheels
2644COPY containers/llm-orchestrator-min/requirements.txt .
2745
28- # Instalacja zależności bez użycia BuildKit
29- RUN pip install --no-cache-dir -r requirements.txt
46+ # Instalacja pakietów z lokalnych plików wheel
47+ RUN pip install --no-index --find-links=/app/wheels -r requirements.txt && \
48+ rm -rf /app/wheels
3049
31- # Kopiowanie pozostałych plików aplikacji
50+ # Kopiowanie kodu aplikacji
3251COPY containers/llm-orchestrator-min/api.py ./
3352COPY containers/llm-orchestrator-min/model-configs/ ./model-configs/
3453COPY containers/llm-orchestrator-min/data/ ./data/
3554
36- # Pobieranie małego modelu LLM (TinyLlama-1.1B) tylko jeśli nie istnieje
37- # Używamy wolumenu, aby zachować model między uruchomieniami
55+ # Pobieranie modelu
3856ARG MODEL_VERSION=1.0
3957RUN mkdir -p /app/models/tinyllama
4058
41- # Skrypt do sprawdzania i pobierania modelu tylko jeśli jest to konieczne
59+ # Skrypt do pobierania modelu
4260RUN echo '#!/bin/bash \n \
4361if [ ! -f /app/models/tinyllama/pytorch_model.bin ]; then \n \
4462 echo "Pobieranie modelu TinyLlama..." \n \
@@ -52,8 +70,12 @@ else \n\
5270 echo "Model TinyLlama już istnieje, pomijanie pobierania." \n \
5371fi' > /app/download_model.sh && chmod +x /app/download_model.sh
5472
55- # Ekspozycja portu API - domyślnie 5000, ale można zmienić przez zmienną środowiskową API_PORT
73+ # Dodanie skryptów diagnostycznych i naprawczych
74+ COPY containers/llm-orchestrator-min/scripts/ /app/scripts/
75+ RUN chmod +x /app/scripts/*.sh || echo "No scripts to make executable"
76+
77+ # Ekspozycja portu API
5678EXPOSE ${API_PORT}
5779
58- # Uruchomienie API z wcześniejszym sprawdzeniem modelu
80+ # Uruchomienie aplikacji
5981CMD ["/bin/bash" , "-c" , "/app/download_model.sh && python -u api.py" ]
0 commit comments