Docker & Compose
IronFlock-Apps werden als Docker-Images verpackt. Das Dockerfile definiert die Laufzeitumgebung für Ihren Anwendungscode.
Dockerfile
Jede App benötigt ein Dockerfile im Stammverzeichnis. Diese Datei konfiguriert eine Linux-Umgebung für Ihre App, ausgehend von einem Basis-Image:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]Die vollständige Syntaxreferenz finden Sie in der offiziellen Dockerfile-Dokumentation.
Multi-Architektur-Unterstützung
Um verschiedene Gerätearchitekturen zu unterstützen, fügen Sie architekturspezifische Dockerfiles hinzu:
| Datei | Architektur | Beispielgeräte |
|---|---|---|
Dockerfile | Standard (wird als Fallback verwendet) | Alle |
Dockerfile.armv7 | ARMv7 | Raspberry Pi 3/4 (32-Bit) |
Dockerfile.arm64 | ARM64 | NVIDIA Jetson, RPi 4/5 (64-Bit) |
Dockerfile.amd64 | AMD64 | Industrie-PCs, Intel NUCs |
Beim Erstellen eines Releases wählt IronFlock das spezifischste Dockerfile für jede Zielarchitektur aus. Wenn keine architekturspezifische Datei vorhanden ist, wird das Standard-Dockerfile verwendet.
Docker Compose
Für Apps mit mehreren Diensten (z. B. ein Webserver + eine Datenbank + ein Worker) verwenden Sie 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-stoppedPlatzieren Sie die docker-compose.yml im Stammverzeichnis anstelle von (oder zusätzlich zu) einem Dockerfile. Wenn Benutzer die App auf ihren Geräten starten oder stoppen, wird der gesamte Compose-Stack als Einheit verwaltet.
Docker Compose gibt Ihnen mehr Kontrolle über:
- Volume-Mounts und Datenpersistenz
- Service-Netzwerke
- Ressourcenlimits
- Multi-Container-Architekturen
Best Practices
- Images klein halten — Verwenden Sie
-slim- oder-alpine-Basis-Images, um Downloadzeiten auf eingeschränkten Geräten zu reduzieren. - Versionen festlegen — Verwenden Sie spezifische Versions-Tags (
python:3.11-slim) stattlatestfür reproduzierbare Builds. - Layer-Caching nutzen — Kopieren Sie Abhängigkeitsdateien vor dem Anwendungscode, um das Docker-Layer-Caching zu nutzen.
.dockerignoreverwenden — Schließen Sie unnötige Dateien (Dokumentation, Tests,.git) aus dem Build-Kontext aus.