It’s important to note that Docker is not a new containerization technology—it is not replacing LXC. Rather, it is providing a standard way to define, build, and run LXCs using Dockerfile and the wider Docker toolchain.
In fact, on 22nd June 2015, Docker, CoreOS, and other leaders in the container industry established the Open Container Initiative (OCI: opencontainers.org), a project that aims to create open industry standards around container formats and runtimes. The OCI has an open governance structure, and has support from the Linux Foundation.
Currently, the OCI provides two standard specifications:
- Image Specification (image-spec: github.com/opencontainers/image-spec): This specifies how an image definition should be formatted. For instance, the OCI image should be composed of an image manifest, an image configuration, and a filesystem (layer) serialization.
- Runtime Specification (runtime-spec: github.com/opencontainers/runtime-spec) This specifies how a system may run an OCI-compliant image. Docker donated its container format and runtime, runC (github.com/opencontainers/runc), to the OCI.
Apart from heavily contributing to the OCI standards, Docker has also made working with containers easier by providing tools that abstract low-level processes (like managing control groups) away from the end user, and providing a registry (Docker Hub) where developers can share and fork each other's images.