Docker (software)

It started as a side project inside a struggling hosting company, and it ended the sentence "but it works on my machine" by shipping the machine along with the software.

5 min read · 10 key facts · 15 terms decoded

Illustration for Docker (software)

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.

Key terms, decoded

cgroups
A kernel feature that limits how much memory and processor time a group of processes is allowed to consume.
container
A packaged application bundled with everything it needs to run, kept isolated from whatever else is running on the same machine.
daemon
A program that runs continuously in the background, waiting to handle requests rather than being run once by a person.
dockerd
The name of Docker's background process, which manages containers and answers requests from the command line tool.
Dockerfile
A text file listing the steps for building an image, such as the base system, the install commands and the application source.
image
A read-only template that containers are built from, and the unit that actually gets stored and shipped.
kernel
The core of an operating system, which controls memory, processes and access to hardware.
LXC
An earlier Linux container system that Docker used before building its own replacement.
namespace
A kernel feature that limits what a process can see, so it appears to have its own network, file system and process list.
open source
Software whose source code is published so anyone can read, modify and redistribute it.
OverlayFS
A Linux file system that stacks layers on top of one another, letting containers share common files instead of copying them.
platform-as-a-service
A hosting model where a provider runs the servers and operating systems, and customers supply only their application.
registry
A repository where images are stored, and which clients download from or upload to.
service
In Docker, a definition that lets copies of a container be run and scaled across several machines at once.
virtual machine
A complete simulated computer, including its own operating system, running on top of a real one. Heavier than a container.

This Quicky is an original summary based on the Wikipedia article “Docker (software)”, available under the CC BY-SA 4.0 license.