Sobre los perfiles de Compose, totalmente de acuerdo en que el override es más limpio que los perfiles. De hecho, en un proyecto con varios entornos, terminamos usando docker-compose -f docker-compose.yml -f docker-compose.prod.yml y un script que valida que no falten variables de entorno. Así evitamos sorpresas.
Respecto a los logs, un truco que me salvó: usar --log-opt mode=non-blocking en el daemon.json para evitar que el contenedor se cuelgue si el driver de logs va lento. Y combinarlo con max-size/max-file, claro. ¿Alguien ha probado Fluentd o Loki para centralizar logs en lugar de logrotate local? En un cluster pequeño, Loki con Promtail es ligero y permite búsquedas rápidas sin saturar el disco.