The Application Is More Than Its Source Code
Runtimes, dependencies, configuration, and external services; why manually prepared machines drift; VM and container boundaries.
From “it works on my machine” to your first Kubernetes application — 2026 Edition

Overview
A hands-on introduction for developers meeting containers for the first time. One small Web · API · Redis application is packaged as an image, connected to its dependencies, hardened for delivery, orchestrated with a three-node Swarm, and finally rebuilt on Kubernetes with Deployments, Services, ConfigMaps, persistent volumes, and Ingress. Each chapter asks you to observe a concrete boundary and explain what the evidence proves — and the book shows the real output of every lab.
Docker 29 · kind 0.33 · Kubernetes v1.37 — every lab executed
26,034 words (21 chapters + 5 appendices)
Complete — preparing Kindle (KDP) publication
A deliberately small application: an Nginx web page calls an Express API, which increments a counter in Redis. The same three parts run as single containers, as a Compose project, as a Swarm stack, and finally as a Kubernetes application, so the platform’s responsibilities stay visible.
An enterprise cloud architect with more than 20 years of experience in software development, application architecture, and technical architecture. He has designed, built, and operated Kubernetes-based platforms and has taught developers and engineers through Inflearn. He is the founder and operator of AIDevOps.kr.
Table of Contents
Chapters 1-9 cover Docker fundamentals with one small application. Chapters 10-12 strengthen image and operational reasoning, Chapters 13-14 introduce orchestration with Docker Swarm, and Chapters 15-21 rebuild the same application on Kubernetes. Five appendices add a command reference, worked cases, and a troubleshooting lab.
Runtimes, dependencies, configuration, and external services; why manually prepared machines drift; VM and container boundaries.
Follow a command from the CLI to the engine, separate the image template from the container instance, and read the lifecycle.
Start a named web server, read both sides of a port mapping, and work through a failed request with evidence.
Layers, image references, the local image store, and why pulling, tagging, and pushing are separate operations.
The build context as an input boundary, cache-friendly ordering, CMD versus ENTRYPOINT, and what a successful build does not prove.
Read the application by its boundaries, build and start the API, and see why localhost inside a container is not your laptop.
A user-defined network and service names, one request traced end to end, and name resolution separated from connectivity.
The writable layer, named volumes, replacement versus restart, bind mounts, and cleanup commands that delete data.
One file for Web, API, and Redis; startup order versus readiness; and stopping an application without losing its data.
Multi-stage builds, a non-root user, health checks, BuildKit, buildx, and SBOMs — with the baseline recorded first.
A local registry, push and pull, digests that keep naming the tested image after a tag moves, and a release record.
Five tools for five questions, a bounded restart policy, a reproduced memory-limit kill, and a timeline before any fix.
Desired state and reconciliation, what automatic recovery does not recover, and control traffic versus request traffic.
A three-node nested Swarm: services and tasks, worker loss and replacement, and a failed update that rolls back.
API server, scheduler, kubelet, and controllers; installing kind and kubectl; following a declaration through the control loop.
A standalone Pod versus a Deployment, intentional scaling, and a failed rollout recovered with rollout undo.
Services select workloads, not instances; a deliberately broken selector; ClusterIP versus external exposure.
ConfigMaps and Secrets without rebuilding, a PersistentVolumeClaim for Redis, and emptyDir compared with persistent storage.
An Ingress rule is not a router: install Traefik deliberately and locate which component produced an error.
Map Compose responsibilities to Kubernetes objects, deploy into its own namespace, and prove replacement and persistence.
Explain one request end to end, keep a compact evidence record, and know the limits of an introductory system.
Docker and kubectl commands grouped by the question they answer.
What each file promises, and the indentation and quoting mistakes that change it.
A broken button, a release that never arrives, and a replacement Pod with an empty directory.
Where to read the authoritative documentation for each tool.
Pending, ImagePullBackOff, OOMKilled, and a configuration collision — diagnosed and recovered.
Companion Materials
Every companion/... path referenced throughout the book maps to the same path inside the zip downloadable from this page. The zip holds 32 files: the Mini CloudShop API and Web source, Dockerfiles, the Compose file, the Swarm lab, and every Kubernetes manifest — including four deliberately broken ones for the troubleshooting lab. This page is the official distribution point for the companion materials.
api/
The Express API (server.js, package.json) and its Dockerfile.
compose.yaml
Web, API, and Redis with a named volume for Redis data.
web/
The Nginx web page and the template that proxies /api to the API.
api/Dockerfile.secure
A multi-stage, non-root image with a HEALTHCHECK.
swarm/
Three nested Docker engines, a registry, and the stack file for the Swarm lab.
k8s/pod.yaml, deployment.yaml, service.yaml
A standalone Pod, a Deployment, and a ClusterIP Service.
k8s/config.yaml, deployment-config.yaml, redis.yaml, emptydir-pod.yaml
ConfigMap and Secret, Redis with a PersistentVolumeClaim, and an emptyDir comparison.
k8s/ingress.yaml
The first Ingress rule, served by Traefik.
k8s/app/
The full application in namespace cloudshop: configuration, Redis with a PVC, API, Web, and Ingress.
k8s/broken/
Four deliberately broken manifests: Pending, ImagePullBackOff, OOMKilled, and a missing REDIS_PORT.
README.md, LEARNING_RECORD.md
How to use the files, and a template for your learning record.
Publication Status
All chapters are complete and every lab has been run on Docker 29, kind 0.33, and Kubernetes v1.37; the book shows the real output. It is being prepared for Kindle (KDP) publication. The companion files below are free and final.
AIDevOps Cloud Native Series
This book is the entry point of the series: it takes a developer from a first container to a first Kubernetes application. The books below continue from there.