Docker y Compose
Las aplicaciones de IronFlock se empaquetan como imágenes Docker. El Dockerfile define el entorno de ejecución para tu código de aplicación.
Dockerfile
Cada aplicación requiere un Dockerfile en la carpeta raíz. Este archivo configura un entorno Linux para tu aplicación, partiendo de una imagen 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 documentación oficial de Dockerfile para la referencia completa de sintaxis.
Soporte multi-arquitectura
Para apuntar a diferentes arquitecturas de dispositivos, agrega Dockerfiles específicos por arquitectura:
| Archivo | Arquitectura | Dispositivos de ejemplo |
|---|---|---|
Dockerfile | Por defecto (usado como respaldo) | Cualquiera |
Dockerfile.armv7 | ARMv7 | Raspberry Pi 3/4 (32 bits) |
Dockerfile.arm64 | ARM64 | NVIDIA Jetson, RPi 4/5 (64 bits) |
Dockerfile.amd64 | AMD64 | PCs industriales, Intel NUCs |
Al crear un release, IronFlock selecciona el Dockerfile más específico para cada arquitectura de destino. Si no existe un archivo específico para la arquitectura, se usa el Dockerfile por defecto.
Docker Compose
Para aplicaciones con múltiples servicios (por ejemplo, un servidor web + una base de datos + 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-stoppedColoca el docker-compose.yml en la carpeta raíz en lugar de (o junto a) un Dockerfile. Cuando los usuarios inician o detienen la aplicación en sus dispositivos, todo el stack de Compose se gestiona como una unidad.
Docker Compose te da más control sobre:
- Montaje de volúmenes y persistencia de datos
- Redes entre servicios
- Límites de recursos
- Arquitecturas multi-contenedor
Buenas prácticas
- Mantén las imágenes pequeñas — Usa imágenes base
-slimo-alpinepara reducir los tiempos de descarga en dispositivos con recursos limitados. - Fija las versiones — Usa etiquetas de versión específicas (
python:3.11-slim) en lugar delatestpara builds reproducibles. - Aprovecha la caché de capas — Copia los archivos de dependencias antes del código de la aplicación para aprovechar la caché de capas de Docker.
- Usa
.dockerignore— Excluye archivos innecesarios (documentación, tests,.git) del contexto de build.