Why you don't have to worry that Docker isn't COMPLETELY open source
Docker, Inc provides these things.
Engine: Docker is the container running engine that runs on top of Linux namespaces and containers. It’s also the suite of command-line tools that manages the engine. It’s totally open-source. It lives in the Moby org on GitHub.
Development environment: Docker Desktop, formerly Docker for Windows and Docker for Mac, is a closed-source project. It spins up a Linux virtual machine, installs the docker command-line tools into it, and both automagically proxies web traffic and mounts folders from the host to the guest. (If you install “Docker” on Linux, it only needs the command-line tools as everything else is already there.) Docker produces new “edge” versions every week or month or so, and rolls up those into monthly or quarterly “stable” releases.
Production Clusters: When we get to a cluster (many machines), Docker Swarm organizes the machines into a pool, distributes the containers across the machines, and automatically discovers and replaces unhealthy containers or nodes (machines). It can also automatically scale the number of containers to match the load.
Package Manager: Docker Registry is like the NPM or NuGet for Docker images. One can push and pull binary blobs and socially share them. (Unlike GitHub, we share the built content, not the source code.)
So these are the 4 things. For each, Docker has an enterprise (paid) version offering more stability, support. For #4, Docker offers vetting of all the published containers, and an https-everywhere supply chain.
Are there any competitors?
Engine: The original container runtimes are still there: jails, namespaces, LXC containers, etc. Many things now run on containerd, a moby project owned by CNCF. BuildKit is Docker’s new, faster build engine, and it leverages containerd.
Development: Docker Desktop is the auto-magic version, but you can build a single-node Docker cluster with Kubernetes (and choose to embrace or ignore the Kubernetes parts) with Minikube, MicroK8s, or k3s. You won’t get the automagic features of Docker, so you’ll manually need to share your machine with the Linux VM for volumes, and use the VM’s IP instead of
localhost. These generally aren’t deal-breakers though. (Visual Studio tools for Docker assumes these automagic pieces though, so it only works with Docker Desktop. Maybe that will change with WSL2? VS Code extensions don’t assume this.)
Production Clusters: Kubernetes is the new famous orchestrator. Inside each worker node is the Docker engine, and Kubernetes issues commands to it to do the heavy lifting. There are many orcheatrators including Apache Mesos, Amazon Cluster Service, Azure Service Fabric, and others. Many services are wrapping Kubernetes in easier-to-digest packages like OpenStack, VMware, and CloudFoundry. Many now have cloud-hosted offerings like Azure Kubernetes Service, Google Kubernetes Engine, and Amazon has Amazon Container Service and Amazon Fargate, both home-grown orchestrators not that unlike Azure Service Fabric and virtual kubelet respectively.
Package Manager: One can spin up a private registry that can house Docker images using Artifactory, Nexus, Octopus Deploy, GitHub Package Registry, or there’s even a container for that:
registry. Along each cloud orchestrator, there’s also a registry with carefully crafted shared authentication: Azure Container Registry, Amazon Container Registry, and Google Container Registry.
So why isn’t all of Docker open-source? I’m guessing it’s a financial thing or a business direction thing or something like that. Do we really need the entire chain to be open-source? I think all else being equal it would be better, but I’m confident all else isn’t equal to someone.
What if Docker, Inc turned evil and decided to take their toys away? I can only speculate, but I suspect enough now is open that the community would fork the project and move on just fine. See also MariaDB, iojs (Node), Hudson / Jenkins, Mercurial, etc.