Configuration Docker¶
Configuration détaillée des conteneurs Docker pour JARVIS.
Dockerfile Backend¶
# Dockerfile.prod
FROM python:3.11-slim
WORKDIR /app
# Dépendances système
RUN apt-get update && apt-get install -y \
gcc \
libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# Dépendances Python
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Code source
COPY app/ ./app/
# User non-root
RUN useradd -m appuser && chown -R appuser:appuser /app
USER appuser
# Configuration
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
Services Docker Compose¶
PostgreSQL avec pgvector¶
postgres:
image: pgvector/pgvector:pg16
container_name: jarvis-postgres
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB:-jarvis}
POSTGRES_USER: ${POSTGRES_USER:-jarvis}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
- ./postgres/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U jarvis"]
interval: 10s
timeout: 5s
retries: 5
Redis¶
redis:
image: redis:7-alpine
container_name: jarvis-redis
restart: unless-stopped
command: redis-server --requirepass ${REDIS_PASSWORD}
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
MinIO¶
minio:
image: minio/minio:latest
container_name: jarvis-minio
restart: unless-stopped
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ${MINIO_ACCESS_KEY}
MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY}
volumes:
- minio_data:/data
ports:
- "9000:9000"
- "9001:9001"
Ollama (LLM Local)¶
ollama:
image: ollama/ollama:latest
container_name: jarvis-ollama
restart: unless-stopped
volumes:
- ollama_data:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
Réseaux¶
networks:
jarvis-network:
driver: bridge
ipam:
config:
- subnet: 172.28.0.0/16
traefik-public:
external: true
Volumes¶
volumes:
postgres_data:
driver: local
redis_data:
driver: local
minio_data:
driver: local
ollama_data:
driver: local
Commandes Utiles¶
# Construire les images
docker compose build
# Démarrer en mode détaché
docker compose up -d
# Voir les logs
docker compose logs -f backend
# Redémarrer un service
docker compose restart backend
# Accéder à un conteneur
docker compose exec postgres psql -U jarvis
# Nettoyer tout
docker compose down -v --remove-orphans
docker system prune -af
Optimisation¶
Multi-stage Build¶
# Build stage
FROM python:3.11-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip wheel --no-cache-dir --wheel-dir /wheels -r requirements.txt
# Production stage
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /wheels /wheels
RUN pip install --no-cache /wheels/*
COPY app/ ./app/
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0"]