La forma más elegante y estándar es usar multi-stage builds dentro de un único Dockerfile. Defines diferentes "etapas" de construcción, una para desarrollo y otra para producción.
Puedes tener una etapa base, una etapa de desarrollo que copia las devDependencies y usa nodemon, y una etapa final de producción que solo copia los artefactos de la etapa de build (el código transpilado, los node_modules de producción) sobre una imagen limpia y ligera.