# Dockerfile para Cisco MAC Monitor # Basado en Rocky Linux 8 con Python y dependencias SSH FROM rockylinux:8 # Metadatos LABEL maintainer="Equipo de Monitorización de Red" LABEL description="Monitor de direcciones MAC para dispositivos Cisco - Compatible con Zabbix LLD" LABEL version="1.0" # Variables de entorno ENV PYTHONUNBUFFERED=1 ENV PYTHONDONTWRITEBYTECODE=1 ENV LANG=en_US.UTF-8 ENV LC_ALL=en_US.UTF-8 # Actualizar sistema e instalar dependencias base RUN dnf update -y && \ dnf install -y \ python3 \ python3-pip \ python3-devel \ openssh-clients \ git \ gcc \ openssl-devel \ libffi-devel \ curl \ vim \ procps-ng \ iproute \ iputils \ net-tools && \ dnf clean all # Crear usuario no privilegiado para ejecutar la aplicación RUN useradd -m -u 1000 -s /bin/bash monitor && \ mkdir -p /app /config /logs /data && \ chown -R monitor:monitor /app /config /logs /data # Instalar dependencias Python COPY requirements.txt /tmp/requirements.txt RUN pip3 install --no-cache-dir --upgrade pip && \ pip3 install --no-cache-dir -r /tmp/requirements.txt && \ rm /tmp/requirements.txt # Cambiar al usuario no privilegiado USER monitor WORKDIR /app # Copiar archivos de la aplicación COPY --chown=monitor:monitor cisco_mac_monitor.py /app/ COPY --chown=monitor:monitor config.yaml /config/config.yaml # Crear directorios necesarios RUN mkdir -p /app/scripts /app/utils # Script de entrada personalizable COPY --chown=monitor:monitor entrypoint.sh /app/entrypoint.sh # Permisos de ejecución USER root RUN chmod +x /app/entrypoint.sh /app/cisco_mac_monitor.py USER monitor # Volúmenes para persistencia VOLUME ["/config", "/logs", "/data"] # Puertos expuestos (si fuera necesario para futuras extensiones) EXPOSE 8080 # Variables de entorno por defecto ENV CONFIG_FILE=/config/config.yaml ENV LOG_LEVEL=INFO ENV MONITORING_INTERVAL=5 # Healthcheck HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD python3 /app/cisco_mac_monitor.py --config ${CONFIG_FILE} --single-run || exit 1 # Comando por defecto ENTRYPOINT ["/app/entrypoint.sh"] CMD ["continuous"]