How to deploy to customer machines

Docker Hub is the public Registry, though you can create private repositories and permit users to have access on your private repos.

There are severall 3rd party private registry options. Solutions like Nexus3, Artefactory, Gitlab provide a build in registry - if support is required, subscriptions are an option. The official open source repository image realy just does handle images. To add authentication/authorization, you need additional services, like http://port.us.org/.

DTR is the commercial private registry from Docker. It commes with an Enterprise Standard/Advanced license and requires at least a 10 node subscription. We actualy run a full fledged Docker cluster environments for our development (distributed application, not realy microservices) and use DTR as our repository. It is not as polished as DockerHub.

TBH, if no constraint (contract, security constraints, slow internet connection,…) prevent you from using Docker Hub - I would always prefer to use a managed service for a small fee, than sacrifice a baremetal/virtual machine and have to maintain it myself.