refactor(controller): optimize layer creation

This restructures the Dockerfile in such a way that allows users to rebuild the
controller with minimal changes to the docker image's layers.
Why shouldn't these be one-liners? Fewer layers is better since each requires a separate HTTP transaction that involves significant latency. And logically, if the `mkdir` failed, then the `chown` will.