ça dépend, perso, dans mon taf on utilise docker-compose (donc utilisation de plusieurs containers) aussi bien en dev qu'en prod, concrètement suffit juste de relancer les containeurs et hop tu peux dev 
Concernant le dockerfile, il n'est buildé qu'une seule fois, après tu fais appelles à lui comme une image totalement classique que tu peux récupérer depuis le hub 
Un dockerfile se place à la racine d'un projet de manière générale, cependant il peut-être dans un dossier
Quand tu modifies cette image (on parle bien de l'image, et non pas du code de ton projet), alors oui tu dois rebuildés, mais c'est assez rare de retoucher à l'image 
Si tu as d'autres questions, ou si je n'ai pas été assez claire, dis-le moi 