My company runs five applications for many customers, and deployments are currently painful because we manually copy build files to each customer's server over remote desktop. I'd like to package the applications as Docker images and store them in a private container registry that we host ourselves, similar to using Verdaccio for private npm packages. Self-hosted options are preferred over a managed service, although I'm also considering Azure Container Registry and similar offerings.
All of our customers use Windows servers, and some of our applications are Windows-only. For the applications that can run in containers, I'm considering using Docker with WSL on the customer servers and pulling the required images from our registry. Does this sound like a sensible deployment approach, and which self-hosted registry would you recommend?
4 Answers
If you already use a source-control platform, check whether it includes a container registry. GitLab, Forgejo, and similar tools can provide source hosting, CI builds, and image storage in one place, which can simplify the release process.
A managed registry is usually the least risky option for production. You can give each customer a restricted credential and have their servers pull images directly. Immutable version tags are especially important so a deployment cannot unexpectedly change underneath you. Self-hosting is workable, but you’ll be responsible for backups, upgrades, availability, and recovering the registry if it fails.
The general plan makes sense, but verify the Windows container requirements carefully. Linux containers running through Docker Desktop or a WSL-based engine are different from native Windows containers, and not every application or host configuration will work with both. Test the exact customer-server setup, then automate deployment with Compose or an installer that records the image version and supports rollback.
The customer’s operating system doesn’t determine which registry you need. A self-hosted registry such as Harbor or Nexus Repository can store your images, and each customer server can pull the image for the appropriate architecture. Dockerfiles build the images, while Docker Compose can define and run the application and its supporting services. Make sure your registry is secured with TLS and per-customer credentials.

A source-control service can also handle the build pipeline and publish the images automatically. That gives you a repeatable path from a versioned change to a tagged image instead of manually copying build artifacts.