Docker & Compose
Le app IronFlock sono pacchettizzate come immagini Docker. Il Dockerfile definisce l’ambiente di esecuzione per il codice dell’applicazione.
Dockerfile
Ogni app richiede un Dockerfile nella cartella radice. Questo file configura un ambiente Linux per la tua app, partendo da un’immagine base:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]Consulta la documentazione ufficiale Dockerfile per il riferimento completo alla sintassi.
Supporto Multi-Architettura
Per supportare diverse architetture di dispositivi, aggiungi Dockerfile specifici per architettura:
| File | Architettura | Dispositivi Esempio |
|---|---|---|
Dockerfile | Default (usato come fallback) | Qualsiasi |
Dockerfile.armv7 | ARMv7 | Raspberry Pi 3/4 (32-bit) |
Dockerfile.arm64 | ARM64 | NVIDIA Jetson, RPi 4/5 (64-bit) |
Dockerfile.amd64 | AMD64 | PC industriali, Intel NUC |
Durante la build di una release, IronFlock seleziona il Dockerfile più specifico per ogni architettura target. Se non esiste un file specifico per architettura, viene usato il Dockerfile predefinito.
Docker Compose
Per le app con più servizi (es. un web server + un database + un worker), usa Docker Compose:
# docker-compose.yml
version: "3"
services:
app:
build: .
volumes:
- /data:/data
- /shared:/shared
ports:
- "5000:5000"
restart: unless-stopped
redis:
image: redis:7-alpine
restart: unless-stoppedInserisci il docker-compose.yml nella cartella radice al posto di (o insieme a) un Dockerfile. Quando gli utenti avviano o fermano l’app sui loro dispositivi, l’intero stack Compose viene gestito come un’unità.
Docker Compose ti dà maggiore controllo su:
- Mount di volumi e persistenza dei dati
- Networking dei servizi
- Limiti di risorse
- Architetture multi-container
Best Practice
- Mantieni le immagini piccole — Usa immagini base
-slimo-alpineper ridurre i tempi di download sui dispositivi con risorse limitate. - Blocca le versioni — Usa tag di versione specifici (
python:3.11-slim) invece dilatestper build riproducibili. - Ottimizza i layer — Copia i file delle dipendenze prima del codice applicativo per sfruttare la cache dei layer Docker.
- Usa
.dockerignore— Escludi i file non necessari (doc, test,.git) dal contesto di build.