After Docker 1.12+, the core responsibilities of the Docker Engine evolved due to the modular architecture introduced (especially with components like containerd and runc). Let's break down its core responsibilities post-1.12, with an updated view on what the Docker Engine does vs. what it delegates.
✅ Core Responsibility of Docker Engine (1.12 and later)
The Docker Engine is primarily responsible for:
1. Client API Interface
Accepts and parses commands from the Docker CLI or API.
Translates high-level user actions (docker run, docker build, docker ps, etc.) into low-level runtime instructions.
2. Orchestration (Swarm Mode added in 1.12)
Built-in Docker Swarm orchestration support.
Can manage multi-host container scheduling.
Service discovery and load balancing.
3. Image Management
Pulling images from Docker Hub or private registries.
Storing images locally using storage drivers (OverlayFS, AUFS, etc.).
Building and tagging Docker images (docker build, docker tag).
4. Container Lifecycle Management (Delegated to containerd but still orchestrated)
Starts/stops/deletes containers by instructing containerd.
Manages container metadata, logs, restart policies.
Tracks running containers and maintains state.
Handles container configuration (volumes, networks, mounts, ports, etc.).
5. Networking
Manages virtual networks, bridges, overlays, and assigns IP addresses to containers.
DNS-based service discovery.
Integrates with CNI plugins (in modern setups).
6. Volume & Storage Plugins
Manages data volumes and persistent storage.
Supports volume plugins for external storage systems (EBS, NFS, etc.).
7. Security Policies
Applies security profiles: seccomp, AppArmor, SELinux, user namespaces, capabilities.
Sets default container security policies at run time.
🧱 What Is Not Its Responsibility Post-1.12 (Delegated)
Docker Engine delegates lower-level execution to:
Docker Engine orchestrates the entire stack but relies on containerd and runc to do the actual low-level execution.
🧠Summary Analogy
Think of Docker Engine as a manager that:
Accepts high-level user instructions
Delegates low-level work to containerd and runc
Manages metadata, logs, API requests, and Swarm orchestration
Ensures the overall container platform is consistent and reliable
📌 In Simple Words
After Docker 1.12+, Docker Engine acts as the central coordinator for container operations, while containerd and runc perform the execution-level tasks like running, stopping, and managing containers at the OS level.
Would you like a visual flow of Docker Engine interaction with containerd, runc, and other components?