Active Nerds
Docker Learning Stream

Docker Roadmap Articles & Question Stream

Browse questions, read quick answers, or expand full article breakdowns on demand. Filter by level, domain, or completion status using the sidebar dashboard.

Showing 54 of 54 questions
beginnerArchitecture12 min+10 XP

Containers vs. VMs: What the Kernel Actually Isolates

Question

A junior engineer says "a container is just a lightweight VM." Explain precisely why this analogy is wrong, and describe what a container actually *is* at the process level on the host.

beginnerImage Engineering14 min+10 XP

Images, layers, and the Dockerfile instruction order that matters

Question

You run `docker build` twice on the same Dockerfile with no changes and notice the second build finishes in under a second. Explain what mechanism makes this possible and what is actually being reused.

beginnerImage Engineering3 min+10 XP

Docker Layer Caching: Why Unchanged Rebuilds Finish Instantly

Question

You run `docker build` twice on the same Dockerfile with no changes and notice the second build finishes in under a second. Explain what mechanism makes this possible and what is actually being reused.

beginnerArchitecture4 min+10 XP

Containers vs. VMs: Why the Lightweight VM Analogy Is Wrong

Question

A junior engineer says "a container is just a lightweight VM." Explain precisely why this analogy is wrong, and describe what a container actually *is* at the process level on the host.

beginnerArchitecture20 min+15 XP

docker run, build, exec — the three commands you'll use daily

Question

A junior engineer says "a container is just a lightweight VM." Explain precisely why this analogy is wrong, and describe what a container actually *is* at the process level on the host.

beginnerArchitecture4 min+10 XP

Containers vs. VMs: Why 'Lightweight VM' Is the Wrong Mental Model

Question

A junior engineer says "a container is just a lightweight VM." Explain precisely why this analogy is wrong, and describe what a container actually *is* at the process level on the host.

beginnerImage Engineering4 min+10 XP

Docker Layer Caching: Why Unchanged Builds Finish Instantly

Question

You run `docker build` twice on the same Dockerfile with no changes and notice the second build finishes in under a second. Explain what mechanism makes this possible and what is actually being reused.

beginnerImage Engineering4 min+10 XP

ENTRYPOINT vs. CMD: Why Removing CMD Changes Runtime Behavior

Question

Your team's Dockerfile uses both `ENTRYPOINT` and `CMD`. A teammate wants to remove `CMD` because "it seems redundant." Explain why removing it would change the container's runtime behavior and give a scenario where this distinction matters operationally.

beginnerPersistence5 min+10 XP

Bind Mounts vs. COPY: Why Dev Convenience Doesn't Belong in Production

Question

A developer mounts their local project folder into a container with `-v` during development, but in the production Dockerfile they use `COPY`. Explain why these two approaches exist and why you would never rely on a bind mount in a production deployment.

beginnerPersistence4 min+10 XP

Container Filesystem Lifecycle: Why Data Disappears Without Volumes

Question

A container running a database is removed with `docker rm`, and the team is shocked their data disappeared. Diagnose what likely went wrong in their setup and explain the container filesystem lifecycle that caused this.

beginnerNetworking4 min+10 XP

Docker Port Mapping: How a Packet Reaches Your Container

Question

A service inside a container listens on port 8080, and it's exposed with `-p 80:8080`. Walk through what actually happens to a packet arriving at the host's port 80 to reach the process inside the container.

beginnerImage Engineering5 min+10 XP

Alpine vs. Ubuntu Base Images: Trade-offs Beyond Image Size

Question

Two engineers build the same application — one from `ubuntu:latest`, another from `alpine`. Beyond image size, what practical engineering trade-offs should inform this base image decision?

beginnerOperations4 min+10 XP

Docker Logging Model: Why stdout/stderr, Not Log Files

Question

A teammate adds application logging to a file inside the container instead of stdout/stderr, then complains `docker logs` shows nothing. Explain the underlying logging model Docker expects and why their approach breaks it.

advancedArchitecture9 min+20 XP

Linux Namespaces: The Isolation Mechanisms Behind Every Container

Question

Explain, namespace by namespace (PID, NET, MNT, UTS, IPC, USER), what specific kernel isolation each one provides to a container, and describe a real scenario where sharing one particular namespace between containers (e.g., `--pid=container:x`) is a deliberate and useful debugging technique.

advancedOperations9 min+20 XP

cgroups Memory Accounting: Why OOM-Kills Happen Below the Limit

Question

A container set with `--memory=512m` gets OOM-killed even though `docker stats` shows it using only 300MB of RSS at the time. Explain what other memory accounting cgroups tracks (page cache, kernel memory) that could explain this, and how you'd investigate.

beginnerImage Engineering4 min+10 XP

Docker Build Context: Why an Untouched node_modules Folder Slows Builds

Question

A build suddenly takes much longer after a teammate added a large `node_modules` folder to the project directory, even though it's never referenced in the Dockerfile. Explain what's happening and how to fix it.

advancedImage Engineering8 min+20 XP

OverlayFS Copy-Up: The Hidden Cost of Small-File Writes in Containers

Question

A build suddenly takes much longer after a teammate added a large `node_modules` folder to the project directory, even though it's never referenced in the Dockerfile. Explain what's happening and how to fix it.

advancedArchitecture8 min+20 XP

From docker run to runc: Tracing the Full Container Startup Chain

Question

Diagram (in words) the full process chain from a `docker run` invocation down to the actual container process, explicitly naming the role of `dockerd`, `containerd`, `containerd-shim`, and `runc`, and explain why the shim's existence allows the Docker daemon to be restarted without killing running containers.

advancedSecurity8 min+20 XP

Linux Capabilities: The Least-Privilege Alternative to --privileged

Question

A container needs to bind to a privileged port and adjust system time as part of its function, but your security policy forbids `--privileged`. Explain the capability-based alternative, name the specific capabilities required, and articulate why granular capability grants are architecturally superior to the privileged flag.

beginnerOperations4 min+10 XP

Environment Variables in Docker: Configuring One Image for Many Environments

Question

Your application needs different database URLs in staging versus production, but you want to use the exact same image in both. Explain the mechanism that makes this possible without rebuilding the image, and why baking config into the image is considered an anti-pattern.

advancedOperations9 min+20 XP

Rootless Docker: How User Namespace Remapping Blocks Host Root Escalation

Question

Your application needs different database URLs in staging versus production, but you want to use the exact same image in both. Explain the mechanism that makes this possible without rebuilding the image, and why baking config into the image is considered an anti-pattern.

Quick Answer

User namespace remapping maps container UID 0 (root) to an unprivileged UID on the host — like 100000 — so a process that's root inside the container is provably never root on the host, even if it escapes the container's other isolation boundaries.

Detailed Answer

Normally, UID 0 inside a container really is UID 0 on the host — the USER namespace simply isn't remapped, so container root and host root are the same identity, and a container escape (via a kernel bug, a misconfigured mount, or a capability leak) hands the attacker literal host root. User namespace remapping breaks that equivalence by inserting a translation table between the two.

With --userns-remap (or Docker's rootless mode, which enables this by default), the daemon consults /etc/subuid and /etc/subgid for a range of UIDs/GIDs allocated to a given user — for example dockremap:100000:65536. The container's internal UID range 0–65535 is then mapped one-to-one onto the host range 100000–165535. Concretely:

Inside containerOn the host
UID 0 (root)UID 100000
UID 1000UID 101000
UID 33 (www-data)UID 100033

A process that believes it's root — and is root for every in-container purpose, including passing if (getuid() == 0) checks, writing to root-owned files inside the container's filesystem view, and binding privileged ports if granted the right capability — is, from the host kernel's perspective, just UID 100000: an ordinary unprivileged account with no special access to host files, host processes, or other UID ranges.

Loading diagram...

This means even a successful container breakout — the attacker gets arbitrary code execution on the host, outside the container's mount and PID namespaces — still only runs as an unprivileged host user, because UID 0-ness was never real outside the namespace to begin with. It's a fundamentally stronger guarantee than any capability drop or seccomp profile, which all still assume the identity itself (UID 0) is trustworthy.

The Limitation

The mapping is exactly what breaks workloads that need genuine host-level access:

  • Bind-mounted host directories owned by a specific host UID (e.g. /var/lib/postgres owned by host UID 999) will appear owned by a different, meaningless UID inside the container's remapped view — the container's root can't actually chown or write to it as expected, because container-root maps to a host UID that has no permissions on that path.
  • Binding to genuinely privileged resources that check the real host UID (some device nodes, certain host IPC/network configuration syscalls) can still fail, since the kernel is evaluating the mapped, unprivileged UID, not container-perceived root.
  • Networking features requiring host network namespace or raw sockets are commonly harder to reconcile with rootless setups, often requiring slirp4netns or rootlesskit userspace networking with a real throughput cost compared to a normal bridge.

Production Implications

  • Set explicit /etc/subuid / /etc/subgid ranges per remapped user rather than relying on defaults, so the mapping is auditable and doesn't silently overlap between hosts in a fleet.
  • For bind mounts that need write access, either pre-chown the host directory to the mapped UID range or use named volumes, which Docker manages inside the correct mapped ownership automatically.
  • Rootless mode is the stronger default for CI runners and multi-tenant build agents specifically because it removes the "one kernel bug from real root" failure mode that traditional Docker carries.
  • Combine with --cap-drop=ALL and minimal --cap-add grants (see capability-based least privilege) — user namespace remapping and capability restriction are complementary layers, not substitutes for each other.

Key Takeaway

User namespace remapping severs the assumption that container root equals host root, turning even a successful container escape into an unprivileged host foothold instead of a full compromise.


advancedNetworking9 min+20 XP

Docker Networking Internals: How Custom Bridges Rewrite iptables NAT and FILTER Rules

Question

You create a custom bridge network and notice new `iptables` chains and rules appear on the host without you touching `iptables` directly. Explain what Docker is doing to the NAT and FILTER tables to make inter-container and container-to-external routing work, and describe a scenario where a conflicting host firewall rule could silently break container connectivity.

advancedNetworking9 min+20 XP

VXLAN Overlay Networks: How Multi-Host Containers Communicate by IP

Question

In a multi-host overlay network (e.g., Swarm), two containers on different physical hosts communicate directly by container IP. Explain the encapsulation mechanism (VXLAN) that makes this possible at the packet level, and identify the MTU-related failure mode this commonly introduces.

beginnerArchitecture4 min+10 XP

Container Lifecycle and PID 1: Why Containers Exit When Their Main Process Stops

Question

A container running a simple shell script exits immediately after starting, even though the script "runs forever" when tested locally. What container lifecycle rule explains this behavior?

advancedArchitecture8 min+20 XP

OCI Image Manifest vs. Runtime Spec: From Pulled Image to Running Container

Question

A container running a simple shell script exits immediately after starting, even though the script "runs forever" when tested locally. What container lifecycle rule explains this behavior?

advancedOperations9 min+20 XP

CFS CPU Throttling: Why --cpus=2 Causes Latency Spikes Under 200% Usage

Question

A service configured with `--cpus=2` shows periodic latency spikes even though average CPU usage sits well under 200%. Explain how CFS (Completely Fair Scheduler) quota-based throttling within a fixed period can cause this, and why average utilization metrics can be misleading here.

advancedSecurity8 min+20 XP

--pid=host: The Process Isolation Guarantee It Breaks — and When That's Justified

Question

A container running as an unprivileged process is still able to see and signal processes on the host when run with `--pid=host`. Explain precisely what isolation guarantee is being intentionally broken, and describe one legitimate production use case where this trade-off is justified.

beginnerImage Engineering4 min+10 XP

Docker Image Tagging: Why the latest Tag Breaks Reproducible Deployments

Question

Your team deploys using the `latest` tag and occasionally ends up with different code running on different hosts despite "not changing anything." Explain why tag-based deployment without immutable references is risky in production.

advancedImage Engineering9 min+20 XP

overlay2 vs. devicemapper/btrfs: Storage Driver Trade-offs at Container Density Scale

Question

Your team deploys using the `latest` tag and occasionally ends up with different code running on different hosts despite "not changing anything." Explain why tag-based deployment without immutable references is risky in production.

expertSecurity12 min+25 XP

seccomp Syscall Filtering: Diagnosing a Blocked clone() in a Hardened Profile

Question

A hardened production seccomp profile blocks an application from calling `clone()` with certain flags, causing an obscure runtime crash unrelated to any obvious security feature. Explain how seccomp filters operate at the syscall level, why default Docker seccomp profiles allow most syscalls but block dangerous ones, and how you'd methodically identify which specific syscall is being blocked.

expertSecurity11 min+25 XP

AppArmor vs. seccomp: Mandatory Access Control Beyond Syscall Filtering

Question

Contrast what AppArmor's mandatory access control profile enforces versus what seccomp enforces for the same container, and describe a concrete attack scenario that seccomp alone would not stop but a correctly scoped AppArmor profile would.

intermediateImage Engineering6 min+15 XP

Multi-Stage Docker Builds: Shrinking Go Images by Discarding the Compiler Toolchain

Question

Your Go application's final image is 900MB because it includes the full compiler toolchain. Design a multi-stage build that resolves this, and explain precisely what gets carried between stages and what gets discarded.

expertImage Engineering11 min+25 XP

oom_score_adj and PID 1: Why the OOM Killer Targets the Wrong Process

Question

Your Go application's final image is 900MB because it includes the full compiler toolchain. Design a multi-stage build that resolves this, and explain precisely what gets carried between stages and what gets discarded.

expertImage Engineering12 min+25 XP

cgroup OOM Killing: Why the Kernel Kills the Wrong Process in Your Container

Question

Your Go application's final image is 900MB because it includes the full compiler toolchain. Design a multi-stage build that resolves this, and explain precisely what gets carried between stages and what gets discarded.

expertArchitecture11 min+25 XP

live-restore: Zero-Downtime Docker Engine Upgrades and Their Limits

Question

You need to perform a zero-downtime Docker Engine upgrade on a host running stateful production containers. Explain how `live-restore` allows containers to keep running through a daemon restart, what it does *not* protect against, and what happens if the containerd/shim architecture itself needs an upgrade at the same time.

expertOperations12 min+25 XP

Debugging Distroless Containers: Two Real Techniques Without a Shell

Question

A production incident requires live debugging of a distroless container that has no shell, no package manager, and no coreutils. Walk through at least two distinct real-world techniques (e.g., ephemeral debug containers sharing namespaces, sidecar attach) to inspect its running process, filesystem, and network state without modifying the original image.

intermediateImage Engineering5 min+15 XP

Docker Layer Caching: Why COPY Order Determines Build Speed

Question

A Dockerfile does `COPY . .` before `RUN npm install`. Every single code change forces a full dependency reinstall during CI, adding 4 minutes per build. Explain the caching mechanic causing this and restructure the instructions to fix it.

expertImage Engineering13 min+25 XP

Hardening an Internet-Facing Container: A Layer-by-Layer Runtime Profile

Question

A Dockerfile does `COPY . .` before `RUN npm install`. Every single code change forces a full dependency reinstall during CI, adding 4 minutes per build. Explain the caching mechanic causing this and restructure the instructions to fix it.

expertNetworking12 min+25 XP

conntrack Table Exhaustion: Why Docker's NAT-Based Networking Drops Connections Under Load

Question

A high-throughput edge service running in containers starts silently dropping new connections under load, and `dmesg` shows conntrack table full errors. Explain how Docker's iptables-based NAT interacts with the kernel's connection tracking table, why containerized workloads are especially prone to exhausting it, and the tuning levers available.

expertOperations12 min+25 XP

PSI in cgroups v2: Finding the Real Bottleneck When Utilization Looks Fine

Question

Standard CPU/memory utilization metrics look healthy, but application-level latency at the edge is degrading under load. Explain how Pressure Stall Information (PSI) in cgroups v2 exposes resource contention that traditional utilization metrics miss, and how you'd use it to diagnose whether the bottleneck is CPU, memory, or I/O contention.

intermediateImage Engineering6 min+15 XP

BuildKit Cache Mounts: Persistent Dependency Caching Across Ephemeral CI Runners

Question

Even after reordering Dockerfile instructions for cache-friendliness, your team's CI runners (ephemeral, ban `--cache-from` layer reuse) still reinstall dependencies every run. What BuildKit feature addresses this specific problem, and how does it differ from ordinary layer caching?

expertImage Engineering11 min+25 XP

no-new-privileges: Why Capability Dropping Alone Doesn't Stop setuid Escalation

Question

Even after reordering Dockerfile instructions for cache-friendliness, your team's CI runners (ephemeral, ban `--cache-from` layer reuse) still reinstall dependencies every run. What BuildKit feature addresses this specific problem, and how does it differ from ordinary layer caching?

expertArchitecture13 min+25 XP

Inside a runc Breakout CVE: How /proc/self/exe Overwrite Attacks Worked

Question

Explain, at a mechanistic level, how a historical runc container-breakout vulnerability (such as the `/proc/self/exe` file-descriptor overwrite class of CVEs) allowed a malicious container to overwrite the host `runc` binary, and what defense-in-depth layers (user namespaces, read-only host binaries, monitoring) would have limited the blast radius even if the specific CVE were unpatched.

expertOperations11 min+25 XP

PID 1 and SIGTERM: Why Containers Get Hard-Killed Despite Correct Signal Handling

Question

During a rolling deployment, containers are hard-killed after a 10-second timeout, dropping in-flight requests, even though the application has SIGTERM handling implemented correctly. Diagnose the most likely architectural cause involving PID 1, process supervision, and signal propagation inside the container, and describe the fix.

intermediateNetworking5 min+15 XP

Default Bridge vs. User-Defined Bridge: Why Container Name Resolution Differs

Question

Two containers on the default `bridge` network can't resolve each other by container name, but two containers on a user-defined bridge network can. Explain the underlying difference in how Docker handles DNS resolution between these two network types.

expertNetworking13 min+25 XP

Image Supply Chain Security: Signing, Verification, and Admission Control at Deploy Time

Question

Two containers on the default `bridge` network can't resolve each other by container name, but two containers on a user-defined bridge network can. Explain the underlying difference in how Docker handles DNS resolution between these two network types.

intermediateNetworking6 min+15 XP

Host Networking vs. Bridge Networking: The Latency Trade-Off Behind --network host

Question

A latency-sensitive service performs noticeably better under `--network host` than the default bridge network. Explain the actual network path difference that causes this performance gap, and identify the operational trade-off the team is accepting by using host networking.

intermediateArchitecture5 min+15 XP

depends_on in Docker Compose: Why Container Startup Order Isn't Application Readiness

Question

A `docker-compose.yml` uses `depends_on` to ensure the database container starts before the API container, but the API still crashes on startup trying to connect. Explain why `depends_on` alone doesn't solve this problem and what actually needs to happen.

intermediateSecurity6 min+15 XP

UID Mapping in Docker: Why Bind-Mounted Files End Up Owned by Root

Question

A container runs as root by default, and a file it writes to a bind-mounted volume ends up owned by `root` on the host, breaking the host user's ability to edit it. Explain the UID mapping reality behind this, and describe two distinct strategies to prevent it.

intermediateSecurity7 min+15 XP

Running Containers as Non-Root: Dockerfile Changes and the Trade-Offs They Introduce

Question

Your security team mandates that no production container may run as UID 0. Walk through what changes are required in the Dockerfile and what operational issues (port binding, file permissions, package installs) commonly break as a result — and how to resolve each.

intermediateNetworking6 min+15 XP

Docker's Embedded DNS Resolver: Why External Hostname Lookups Intermittently Fail Under Load

Question

A container intermittently fails to resolve an external hostname under load, though `curl` works fine most of the time. Explain how Docker's embedded DNS resolver works and a plausible root cause for intermittent resolution failures.

intermediateOperations6 min+15 XP

Docker Compose Health Checks: Reporting True Application Readiness, Not Just Process State

Question

A Compose stack reports all containers as "running," yet the application is non-functional because the API started before the database finished initializing. Design a `HEALTHCHECK`-based solution and explain how it changes container state reporting versus a plain process check.

intermediateImage Engineering5 min+15 XP

Docker Build Context Bloat: How .dockerignore Prevents Sending Unnecessary Files to the Daemon

Question

Your CI logs show the build context being sent to the daemon is 1.2GB despite a small application. Explain the mechanism by which this bloat occurs and how `.dockerignore` interacts with the build process to prevent it.

intermediatePersistence6 min+15 XP

Named Volumes Across Hosts: Why Local Volumes Don't Follow Rescheduled Containers

Question

A team migrating from a single Docker host to a small Swarm/multi-host setup discovers that named volumes don't "follow" a rescheduled container to another node. Explain why this happens and what class of solution is required.