Docker is losing control of Docker.

Containers and specifically Docker Containers are one of the longest lived mainstays in my development career. The only thing that has outlived that for me is C#.

And, I honestly don't see that changing any time soon. But what is interesting to me is how Docker has shot themselves in the foot. It feels more and more like they are just doing random things without considering the consequences. And, it isn't that these changes are going to hurt containers, or even Docker containers in general. 

And the problem for Docker, incidentally, is actually Registry.

As many in the industry know, Docker is just a container runtime. And Docker Images are OCI compliant. Which means that Docker images can actually be run on other container runtimes, like Podman for example. And, I presume that other OCI compliant images can be run in Docker.

So, why is almost everything built with Docker specifically? Registry.

Whether you think that is the/your reason or not. It quite likely is. There may be a few people with some niche cases who chose it for another reason. And it all boils down to two facts:
  1. Creating a base image is a pain in the butt for developers and 
  2. hosting a massive repository of potentially massive images is an expense for anyone looking to host them.
How do you build an industry standard around such big pain points? The answer was Docker Hub, which is just Registry with a UI on top of it. But, point #2 appears to be Docker's big issue. They just took too long to address it (in my opinion).

By ignoring the costs of hosting such a massive repository, this enabled a centralized place to put both base images and, well, everything else. And that solved point #1. Developers now had a single, simple place to discover base images, and thus to discover Docker and Containers.

But, registry also enabled remote registries. And, it does so via a rather elegant and simple contract. Not to mention, Docker simply provides Registry for free. So, it was just a matter of time before people started hosting their own. And once the work of making the platform popular was out of the way it was not really a big deal for other people to simply start hosting just images elsewhere. In fact, a very large number of projects now host on both Docker Hub and GHCR. Others will publicly host on Azure or Google. In short, it is now the new norm for to host in 2 or more repositories. Some organizations like Microsoft have even stopped publishing to Docker Hub entirely. 

The technology is also ubiquitous enough to allow this divergence from Docker Hub.

The first mistake, in my opinion, was the change to start charging for Docker Desktop. It was a low value target and it only served to breed distrust. It was probably chosen because it was low value. A way to test the waters and recoup some funds. But, arguably, they should have simply charged for it from Day #1. I suspect that the vast majority of companies using Docker Desktop did one of four things:
  1. Ignored the licensing changes
  2. Scaled down the number of developers using Docker or Docker Desktop
  3. Switched to Linux
  4. Deferred everything to the CI/CD Pipeline
WSL + Docker Desktop + Docker's "Linux Legacy" meant that most applications, even those built on Windows, were in Linux based images. Most people only used Docker Desktop because it was the only quasi-supported way to run Docker on Windows. Windows is not technically supported for running production containers aside from Windows containers, which barely exist (at least that was the state of things when I last checked). 

Most of what you're paying for with Docker Desktop is all of the grunt work that needs to go into making it play nice on WSL at all, and I would argue that is the fault of the software, not the user. So one environment should not be treated as a second class citizen here. If you want to support Windows, support Windows. If you don't want to support Windows, but are willing to for a cost, you should have started out charging for it.

The rest of the software is the UI, and you're probably already using something like Portainer which does a better job of that for free.

But, the point here isn't to complain about making teams pay for Docker Desktop. It is mostly to point out that the move never made sense and only resulted in panic and distrust. A move which accelerated the move to other registries. That in turn made the next major controversy all the worse; changing who had to pay and when to store in Docker Hub.

If this had happened at a point in time where it was still difficult to imagine hosting an image anywhere else, then it might have been a smart move. But, we're pretty late into the game here and Docker Hub no longer holds a big of a monopoly on the Registry industry as it once had.

I suspect many more teams are going to move away from Docker Hub as a result. Which in turn lowers the potential value they can get from the change which may force them to make yet another change. Perhaps licensing and charging for the core of Docker itself?

But, we're no longer at a point where people are choosing Docker because it feels like their only option. We're at a point now where people are choosing Docker simply because they have the most documentation and support. However, if Docker makes using their offerings any less attractive, then they run the risk of people discovering that other container initiatives are not as bad as they feared.

Docker both drove the adoption of Docker and Docker Hub and now appears to be leading the mass exodus away from them as well. Containers aren't going anywhere anytime soon. Docker on the other hand, could cease being relevant in as little as 5-10 years. They could also stay relevant, but it seems at odds with their business model. And that model appears to be "shock your user base every few years by charging for things you used to give for free".

Comments

Popular Posts