Ship the Whole World, Not Just the Code
Software has always had an awkward habit of working perfectly for the person who wrote it and failing everywhere else. The reason is rarely the code. It is everything around the code: the libraries, the configuration files, the exact versions of things quietly installed on one machine and missing on another.
Docker attacks that by packaging an application together with its dependencies into a container, which can in principle run on any Linux, Windows or macOS computer. The same package runs on a laptop, on a server in a rack, or in a public or private cloud, without being rebuilt for each.
Containers are isolated from one another and bundle their own software, libraries and configuration files, communicating only through well-defined channels. The critical detail is what they do not bundle: because all containers on a machine share the services of a single operating system kernel, they use far fewer resources than virtual machines do.
A Side Project at a Company That Became Something Else
Solomon Hykes started Docker in France as an internal project inside dotCloud, a service">platform-as-a-service company. dotCloud had been founded by Kamel Founadi, Hykes and Sebastien Pahl during the Y Combinator Summer 2010 group and launched in 2011.
The side project ate the company. In 2013 dotCloud Inc. renamed itself Docker Inc., and the tool debuted publicly that year at PyCon in Santa Clara, released as open source in March 2013.
The early version was not the one people know. At launch it used LXC as its default execution environment. A year later, with version 0.9, Docker replaced LXC with its own component called libcontainer, written in the Go programming language, which let it talk to the kernel directly instead of through someone else's layer. In 2017 Docker created the Moby project for open research and development, and in March 2026 the Communications of the ACM ran Docker as its cover article in a retrospective on the previous decade.
Almost All of It Was Already in the Kernel
The most striking thing about Docker's design is how little of it Docker had to invent. On Linux it assembles existing kernel features into something new.
Two do the heavy lifting. Namespaces isolate an application's view of its operating environment, including process trees, the network, user IDs and mounted file systems, so a container sees what looks like its own machine. Cgroups handle resource limiting for memory and CPU, so one container cannot starve the others. Add a union-capable file system such as OverlayFS, and containers can run inside a single Linux instance while avoiding the overhead of starting and maintaining virtual machines.
That lightness is the whole point. A single server or virtual machine can run several containers at once: a 2018 analysis found a typical Docker use case involves eight containers per host, with a quarter of the organisations analysed running 18 or more. It will even install on a single board computer like a Raspberry Pi. On macOS, where those Linux kernel features do not exist, Docker quietly runs the containers inside a Linux virtual machine.
Images, Containers and the Place They Live
Docker's vocabulary trips people up, because three different things sound like they might be the same thing.
An image is a read-only template used to build containers, and it is what actually gets stored and shipped around. A container is a standardized, encapsulated running environment built from an image. A service allows containers to be scaled across multiple Docker daemons, and the resulting group of cooperating daemons is called a swarm.
Underneath sits the machinery. The Docker daemon, dockerd, is a persistent process that manages containers and listens for requests via the Docker Engine API, while the client program, `docker`, is the command-line interface people actually type into. Images live in a registry, a repository that clients pull from and push to, which can be public or private. The main public one, Docker Hub, is where Docker looks by default. And a Dockerfile is just a text file specifying how to build an image: the Linux distribution, the install commands for the language runtime, and the application source.
Everyone Adopted It, Then the Free Ride Narrowed
Adoption was fast and came from every direction at once. Red Hat announced a collaboration in September 2013 covering Fedora, RHEL and OpenShift. Microsoft announced integration of the Docker engine into Windows Server in October 2014. Container services arrived on Amazon EC2 in November 2014, IBM struck a strategic partnership that December, and Oracle Cloud added support in December 2015 after acquiring a Docker startup.
By May 2016 the main contributors to Docker included the Docker team, Cisco, Google, Huawei, IBM, Microsoft and Red Hat. The following January, an analysis of LinkedIn profile mentions showed Docker's presence had grown by 160% during 2016.
The commercial terms eventually tightened. In August 2021 Docker ended free Docker Desktop use for larger business customers and replaced its Free Plan with a Personal Plan, though Docker Engine on Linux distributions was unaffected. Development continued regardless: Docker acquired AtomicJar in December 2023 to expand its testing capabilities, and in January 2026 OWASP released DockSec, an open-source AI-powered Docker security scanner.
