Docker Engine contains software packages that helps in running and Managing Containers. This Docker Engine is also referred as simply Docker or Docker Platform. Docker Engine contains API, execution driver, runtime, shims etc. If we talk about major Components of Docker, it contains Docker Client, Docker Daemon, containerd, runc.
At the time of release, Docker engine has two components:
- The Docker Daemon
Docker Daemon contains all codes which is used by Docker Clients, Docker API, Container Runtime, and image builds etc. . . .
LXC helps in providing all the facilities or we can say provides all building blocks of containers that are present in Linux Kernel, like name spaces and cgroups.
The above figure will show how daemon, LXC, OS interacted in older version of docker.
LXC has lots of issues or we can say that it has large number of shortcomings like LXC was Linux specific which was a hurdle for multi-platform environment.
Due to which Docker builds its own toll called libcontainer which was replacement of LXC. This libcontainer was platform –agnostic tool which has access to all fundamental container building-blocks that are present inside kernel.
Above figure shows high level view of Docker engine Architecture with descriptions.
OCI (Open Container Initiative)
OCI was a process which defines two container related specifications:
- Image Spec
- Container runtime Spec.