Preparing for Docker & Kubernetes Interviews
Interviewers for DevOps, platform, and backend roles routinely probe whether you understand containers and orchestration well enough to reason about them under pressure, not just recite command syntax. This topic walks through commonly asked questions, organized from Docker fundamentals through Kubernetes operations, with answers that explain the underlying mechanism rather than just the surface-level fact. Use it to check your own understanding: if you can explain each answer in your own words without re-reading it, you are in good shape.
Cricket analogy: A cricket board's selection panel doesn't just want a player who recites the rulebook, but one who can read the game under pressure, and this topic is like a set of match-situation drills that test whether you truly understand tactics, not just memorized rules.
What is the difference between an image and a container?
An image is a read-only, layered template containing an application's filesystem and metadata (entrypoint, environment variables, exposed ports). A container is a running (or stopped) instance of an image with its own thin writable layer on top, plus its own process namespace, network namespace, and filesystem view. You can start many containers from the same image; each gets isolated runtime state, but they all share the same underlying read-only image layers on disk, which is why starting a new container is fast and cheap.
Cricket analogy: An image is like a printed team strategy manual with the batting order and field settings written down, and a container is like an actual match being played from that manual with its own live scorecard; many matches can be played from copies of the same manual, but each match's scorecard is independent even though the strategy pages are shared.
Why would you use a multi-stage build?
A multi-stage build lets you compile or build an application in one stage that has the full toolchain (compilers, build dependencies, SDKs) and then copy only the compiled artifacts into a slim final stage based on a minimal base image. This keeps the shipped image small and reduces its attack surface, because build tools, source code, and intermediate files never end up in the final image. A typical pattern is FROM golang:1.22 AS build to compile a binary, followed by FROM alpine and COPY --from=build /app/bin /app/bin to produce the runtime image.
Cricket analogy: A multi-stage build is like a player training with a full squad of coaches, physios, and analysts during preseason, then walking out for the actual match carrying only the bat and gloves needed to play, leaving all the bulky training gear behind, similar to FROM golang:1.22 AS build followed by FROM alpine.
What happens to data written inside a container when the container is removed?
Any data written to the container's writable layer is deleted permanently when the container is removed, because that layer only exists for the life of the container. To persist data beyond a container's lifecycle, you must use a volume (managed by Docker, e.g. via docker volume create) or a bind mount (a path on the host mapped into the container). Volumes are the preferred mechanism for stateful data like databases because they are portable across hosts with volume drivers and are not tied to the host's directory structure the way bind mounts are.
Cricket analogy: Data in a container's writable layer is like notes scribbled on a temporary whiteboard during a single net session that get wiped when the session ends, while a volume is like a permanent logbook kept in the pavilion, portable across grounds, unlike a bind mount which is like notes tied to one specific ground's noticeboard.
What is a Kubernetes Pod, and why isn't a container scheduled directly?
A Pod is the smallest deployable unit in Kubernetes; it wraps one or more containers that share the same network namespace (so they can talk to each other over localhost) and can share volumes. Kubernetes schedules Pods rather than bare containers because many real workloads need a tightly coupled helper alongside the main container, such as a sidecar for log shipping or a service-mesh proxy, and those containers need to share network identity and lifecycle. Containers within a Pod are always co-located on the same node and are started, stopped, and rescheduled together.
Cricket analogy: A Pod is like a batting partnership sharing the same end of the pitch and run count, such as a striker and a runner working together on the same physical crease, needed because some roles like a runner for an injured batter must stay tightly coupled and move together.
How does a Kubernetes Service pick which Pods to send traffic to?
A Service uses a label selector; any Pod whose labels match the selector is added as an endpoint. kube-proxy (or the CNI's equivalent) watches the Endpoints/EndpointSlice objects and programs iptables or IPVS rules on each node so that traffic to the Service's virtual IP is load-balanced across the matching, ready Pods. Because matching is purely label-based and dynamic, Pods can be added or removed (by a Deployment scaling or a rollout) and the Service automatically picks up the change without any manual reconfiguration.
Cricket analogy: A Service using a label selector is like a scoreboard operator who tracks anyone wearing the 'opening batter' jersey label, automatically updating the display whenever a substitution swaps who's wearing that jersey, without anyone manually reprogramming the scoreboard.
How would you debug a Pod stuck in CrashLoopBackOff?
Start with kubectl describe pod <name> to see recent events (OOMKilled, failed liveness probes, image pull errors) and kubectl logs <name> --previous to see the logs from the last crashed instance, since the current instance may not have logged anything useful yet. Common root causes are the application exiting due to a missing environment variable or config, a liveness probe that is too aggressive and kills a slow-starting process, or the container being OOMKilled because its memory limit is too low. If the container never starts at all, check the exit code in the Pod status and the events for scheduling or image-pull issues first.
Cricket analogy: kubectl describe pod is like reviewing the umpire's match report for recent incidents like a no-ball call or injury stoppage, and kubectl logs --previous is like reviewing footage from the previous over since the current over hasn't produced much footage yet; common causes are like a batter retiring due to cramp, an overly strict fitness test benching a player too early, or a player being sent off for exceeding the concussion substitute limit.
- Image = read-only template; container = running instance with a writable layer
- Order Dockerfile instructions from least- to most-frequently-changing to maximize cache hits
- Multi-stage builds strip build tools and source from the final runtime image
- Volumes persist data beyond a container's life; the writable layer does not
- User-defined bridge networks and Kubernetes Services both provide name-based discovery via DNS
- Deployments manage ReplicaSets to enable rolling updates and rollbacks
- Interviewers care more about *why* a mechanism works than the exact flag syntax
- Layer caching and multi-stage builds are the two biggest levers for build speed and image size
- Kubernetes networking (Services, DNS, kube-proxy) is a frequent deep-dive area — know the request path
- Debugging questions test whether you know where to look (describe, logs --previous, events) before guessing
- Understand the relationship between Deployment, ReplicaSet, and Pod — it comes up constantly
Practice what you learned
1. Why does putting COPY package.json and a dependency install step before COPY . . speed up Docker builds?
2. What is the primary purpose of a multi-stage Dockerfile build?
3. What happens to files written inside a running container's writable layer if the container is deleted without a volume attached?
4. What is the main job of a Kubernetes ReplicaSet within a Deployment?
5. A Service's list of backend Pods is determined by which mechanism?
6. Before debugging further, which two kubectl commands give the fastest insight into a CrashLoopBackOff Pod?
Was this page helpful?
You May Also Like
Image Layers and Build Caching
How Docker's layered filesystem and build cache work, and how to order Dockerfile instructions to maximize cache hits and minimize image size.
Multi-Stage Builds
How to use multiple FROM stages in a single Dockerfile to separate build-time tooling from the final runtime image, producing smaller, more secure images.
Deployments and ReplicaSets
Learn how Deployments manage ReplicaSets to declaratively run, scale, and update stateless Pod replicas in Kubernetes.
Horizontal Pod Autoscaling
Learn how the HorizontalPodAutoscaler automatically adjusts replica counts based on CPU, memory, or custom metrics to match workload demand.
Related Reading
Related Study Notes in DevOps
Browse all study notesNginx Study Notes
DevOps · 30 topics
DevOpsAnsible Study Notes
DevOps · 30 topics
DevOpsAdvanced Kubernetes Study Notes
Kubernetes · 30 topics
DevOpsAdvanced Bash Scripting Study Notes
Bash · 30 topics
DevOpsApache Kafka Study Notes
Kafka · 30 topics
DevOpsCI/CD Tools & Pipelines Study Notes
YAML · 37 topics