The history of Docker: the whale that packaged software

Mascote do LinuxPro empilhando um contêiner no cais, com a baleia do Docker carregando a carga

In March 2013, in a five-minute lightning talk at PyCon in Santa Clara, Solomon Hykes showed what dotCloud used underneath its PaaS. The name was Docker. On 20 March the code was opened. In June 2014 version 1.0 arrived. Thirteen years later Docker Engine 29.8.0 (3 September 2026) is still the most common way to package a Linux process — even after the fleet orchestrator became Kubernetes and the underlying runtime became containerd.

dotCloud, YC, and an internal engine

Kamel Founadi, Solomon Hykes, and Sebastien Pahl founded dotCloud at Y Combinator in the summer of 2010. The product, launched in 2011, was PaaS: you sent code, the platform stacked up the runtime. Underneath was a container engine nobody saw. Hykes, a Frenchman, had attended Epitech and spent some time in the US. The insight was not “inventing the container” — LXC, cgroups, and namespaces were already in the kernel. The insight was the experience: a recipe file, a stackable image, one command to run the same way on any Linux system.

The metaphor came from the port. Shipping containers: ISO standard, stackable, transferable between ships without repacking the cargo. Software deserved the same. The blue whale with boxes on its back — Moby Dock — became the mascot. In October 2013 the company dropped the dotCloud name and became Docker, Inc. The PaaS was sold. The engine became the product.

PyCon 2013: five minutes that changed deployment

The talk was called “The future of Linux Containers”. Five minutes, demo, applause. On 20 March 2013 the code was opened. At first the default runtime was LXC. In March 2014, in 0.9, Docker replaced LXC with libcontainer, written in Go, talking directly to cgroups, namespaces, capabilities, and apparmor/selinux. Fewer dependencies, more control. The high-level API — build, run, push, pull — hid the kernel. That, not virtualization itself, was what took off.

Those already using LXC in production looked and said, “we already do that.” Those who had never looked at a cgroup started packaging applications in 40 minutes. The difference was the Dockerfile and the Hub. A text recipe, cached layers, a public registry. “It works on my machine” lost its excuse — the machine came along, in layers.

1.0, Hub, and the race of 2014–2015

Version 1.0 came out on 9 June 2014, the same summer Google announced Kubernetes. Docker Hub became the GitHub of images. In September 2013 Red Hat had already agreed to collaborate (Fedora, RHEL, OpenShift). In October 2014 Microsoft announced Engine on Windows Server. In November Amazon launched EC2 Container Service. IBM, Oracle, everyone wanted the whale on their slides.

On 22 June 2015 Docker, CoreOS, Google, Microsoft, Amazon, and others announced what became the Open Container Initiative: a runtime and image-format standard, so the world would not be held hostage by a single daemon. runc came out of it (libcontainer was donated). containerd — the runtime Engine already used underneath — was donated to the CNCF. In 2017 Docker created the Moby project: the open source kit of parts, separate from the commercial brand.

Swarm, Kubernetes, and what the whale no longer orchestrates

Docker never wanted to be “just the runtime.” Swarm mode entered Engine 1.12: clusters, services, overlays, Raft. Compose (beta in December 2013, 1.0 in October 2014) already handled the laptop with YAML. The problem was the real fleet — dozens of nodes, rolling updates, CRDs, operators. There Google's helm won. In 2017 Docker itself announced Kubernetes support. Swarm survived in its niche and in Docker Desktop; the production standard became the heptagon. The full story is in The history of Kubernetes.

What remained for the whale is what it always did best: the image, the workstation daemon, Hub, Compose. In August 2021 Docker Desktop stopped being free for large companies — Personal replaced Free. Engine on Linux, Apache 2.0, did not change licenses. Confusing the two is the classic way to get a compliance surprise.

What Docker really is

It is not a virtual machine. It is OS-level virtualization: processes isolated by namespaces (PID, net, mnt, uts, ipc, user), limited by cgroups, stacked on a union file system (OverlayFS). An image is a read-only template; a container is the image plus a writable layer. The daemon dockerd listens to the API; the CLI docker talks to the daemon. A registry stores the image. Compose describes a group. A volume retains the data when the container dies.

Underneath 29.x, the stack is OCI: runc executes, containerd manages the lifecycle, BuildKit builds. Engine 29.8.0 already bundles containerd if the host does not have a separate service, and speaks nftables. Podman, nerdctl, and CRI-O cover the same territory without the Docker, Inc. daemon. The recipe — Dockerfile, layer, registry — is what caught on. In March 2026 Communications of the ACM put Docker on the cover, a retrospective of a decade.

2026: Engine 29.8, Compose 5, paid Desktop

Docker Engine 29.8.0 came out on 3 September 2026. Go 1.26.8, BuildKit 0.33.0, containerd 2.3.4, runc 1.5.1. Flag --umask in run/create, configurable default AppArmor, hardening against AF_VSOCK through 32-bit socketcall. Desktop 4.89.0 (31 August) already bundled Compose 5.5.0. Rootless gained gvisor-tap-vsock as the default network driver.

On Linux the free software path remains the same: the distro package or official repository, Apache 2.0, no Desktop EULA. For beginners, this blog's older material is still useful as a first introduction — with the caveat about 2017 — in Free Docker Course.

Timeline

  • 2008 — Solomon Hykes founds dotCloud, a French PaaS; the container engine begins as an internal tool.
  • 2010 — dotCloud goes through Y Combinator.
  • March 2013 — the lightning talk lasting five minutes at PyCon introduces Docker to the world; the code is opened.
  • June 2014 — Docker 1.0, considered production-ready.
  • 2014–2015 — adoption race; Docker Hub is born and the company changes its name to Docker, Inc.
  • 2015 — the Open Container Initiative standardizes the image format and runtime, taking control out of a single company's hands.
  • 2016 — the arrival of swarm mode, Docker's bet on orchestration.
  • 2017 — Docker, Inc. itself announces Kubernetes support; the orchestration battle ends.
  • August 2021 — Docker Desktop stops being free for large companies. Engine on Linux remains Apache 2.0.
  • 3 September 2026 — Docker Engine 29.8.0, with BuildKit 0.33, containerd 2.3.4, and runc 1.5.1.

Wrap-up

A French PaaS that never took off, a five-minute lightning talk, and a port metaphor. The kernel already had cgroups; what was missing was the verb. docker run became the verb. Fleet orchestration moved away to Kubernetes. The box format remained.

The helm is in The history of Kubernetes. The classic hypervisor, in Proxmox and VirtualBox. The kernel, in Linux turns 35.

From dotCloud to Engine 29.8.0: the whale still carries the boxes. Apache 2.0 on Linux, EULA on Desktop, OCI underneath. The lightning talk from 2013 fits in five minutes. The rest of the ecosystem does not.