Adetayo Akinsanya unkletayo.dev

Mastering Docker & Container Internals from First Principles: Series Introduction & Learning Roadmap

An introduction to Linux namespaces, cgroups v2, OverlayFS, OCI runc specifications, and virtual networking

Why You Need This in Real Life

The year is 2013. A production Node.js container crashes abruptly with Out of memory: Kill process (OOMKilled) exit code 137. The developers blame language runtime memory leaks, but deep inside the Linux kernel dmesg log, a very different architectural breakdown is occurring:

  1. The Node.js application ran directly as PID 1 without an init process like tini, causing orphaned child processes to accumulate on every request and exhaust kernel file descriptors.
  2. The Docker image swelled to 1.4GB because build toolchains and temporary package manager caches were baked into the final image layer.
  3. Node.js calculated worker thread pool sizes based on host hardware specs (64 CPU cores) rather than container cgroup quota limits (2 CPU cores), causing extreme OS thread context switching.

Docker containers are not lightweight virtual machines—they are standard Linux processes isolated by Linux kernel primitives.

This 20-part series breaks down containerization and Docker from first principles—explaining how Linux Namespaces, cgroups v2, OverlayFS, runc, containerd, and virtual veth networking work under the hood.


What You Will Gain From This Series

By following this series step by step, you will master the underlying mechanics of containerization:

  1. Linux Kernel Primitives: How 8 Linux Namespaces (PID, Mount, Net, IPC, UTS, User, Cgroup, Time) isolate processes, and how cgroups v2 throttle memory and CPU allocations.
  2. Container Runtime Architecture: How the OCI runtime specification decouples high-level container management (containerd, Docker CLI) from low-level process execution (runc).
  3. Storage & Layer Mechanics: How OverlayFS uses lower/upper/work directories for Copy-On-Write (CoW) performance, and how content-addressable layer SHA-256 digests optimize build caching.
  4. Virtual Networking & Security: How veth pair interfaces, docker0 bridge devices, and iptables DNAT rules route container traffic, and how Linux capabilities secure non-root containers.

Who This Series Is For

This series is designed for software developers, DevOps engineers, site reliability engineers (SREs), and cloud infrastructure architects.

  • Prerequisites: Basic familiarity with Linux command-line syntax (ls, ps, cd) and running basic docker run commands. No kernel programming experience is required.
  • Skill Level Target: Moves you from basic Docker user to container platform specialist capable of troubleshooting runtime crashes, writing multi-stage Dockerfiles, securing container supply chains, and tuning Linux kernel cgroups.

What You Will Be Able to Achieve

After completing all 20 parts, you will be able to:

  • Build minimal, zero-vulnerability container images (slimming image size from 1.2GB down to 15MB).
  • Prevent container OOMKilled exit 137 crashes, PID 1 signal leaks, and zombie process accumulation.
  • Debug virtual container network bridges, custom DNS resolution, and iptables port forwarding.
  • Complete the Capstone Project (Part 20): Building a custom container runtime engine in Java from scratch using Linux system calls (unshare, pivot_root, chroot, cgroup controllers).

Roadmap Overview: The 7 Learning Modules

+-----------------------------------------------------------------------------+
|                       Container Internals Learning Roadmap                  |
|                                                                             |
|  Module 1: Container Runtime Architecture & Toolchain (Parts 1–4)            |
|  Module 2: Image Anatomy, Build Systems & Registries (Parts 5–8)            |
|  Module 3: Container Runtime Lifecycle & Resource Management (Parts 9–11)   |
|  Module 4: Container Networking Under the Hood (Parts 12–14)                 |
|  Module 5: Storage Drivers, Copy-on-Write & Mount Mechanics (Parts 15–16)   |
|  Module 6: Multi-Container Orchestration, Security & Production (Parts 17–19)|
|  Module 7: Capstone Project: Custom Container Runtime Engine (Part 20)      |
+-----------------------------------------------------------------------------+

Next Steps

Ready to explore container internals? Begin with Part 1, where we examine what Docker adds on top of Linux kernel isolation primitives.

References & Further Reading

  1. Linux Foundation. Open Container Initiative (OCI) Runtime & Image Format Specifications. OCI Specifications.
  2. Kerrisk, M. (2010). The Linux Programming Interface. No Starch Press.
  3. Mouat, A. (2015). Using Docker: Developing and Deploying Software with Containers. O’Reilly Media.

Up Next in Series →

Part 1: What Docker Adds on Top of Linux Kernel Isolation Primitives

Continue to Part 1 →