Container Questβeta

Learn Docker and Kubernetes by running a real system and breaking it on purpose. Eight containers, five languages, 49 lessons.

You're reading the hosted version. The lessons are the real thing. Every terminal output below was captured by actually running that command against a live system on August 8, 2026: real hostnames, real image sizes, real errors. Nothing here is invented. What you can't do from a browser is run them yourself, so those play back as a recording. To do it for real: clone the repo and run make up.
0 of 49 complete
Chapter 0 · Getting started·5 min

Why any of this exists

Before any tool, the problem. Containers were not invented because someone wanted a new thing to learn. They were invented because of a specific, boring, expensive kind of pain that shows up everywhere software is written.

Picture a few situations you have probably already lived through.

A NEW PERSON JOINS THE TEAM. Their first day is supposed to be writing code. Instead it is three days of installing things: the right language version, a database, some tool nobody remembers needing. The setup guide is nine months out of date. Two steps fail for reasons specific to their laptop.

TWO PROJECTS DISAGREE. One needs Node 18. The other needs Node 24. They are both on your machine. You now maintain a version manager and think about it every time you switch folders.

IT WORKS HERE BUT NOT THERE. The tests pass on your machine and fail in CI. Nobody can explain why, so someone spends an afternoon adding print statements to a build server.

THE HANDOFF. You finish something and give it to whoever runs the servers. They ask what it needs. You write a list. The list is wrong, because you have forgotten the four things you installed months ago and now take for granted.

Every one of these is the same problem wearing different clothes: a program needs a specific world around it to run, that world is mostly invisible to the person who built it, and describing it in prose does not work.

A container is that world, captured. Not described in a README, not reproduced by hand, but packaged into one thing that behaves the same wherever it runs. That is genuinely the whole idea. Everything else in this course is detail.

The next lessons assume you have never run a Docker command. You will run someone else's container, pause to understand what that was, keep one running so you can look at it, then build one of your own. If you already know Docker and only want this project's fleet, skip ahead to "The system you're about to learn on".

1

Think of one time you hit a version of the problem above. It genuinely helps to have a real memory attached before the abstractions arrive.

2

Install Docker if you have not already. On a Mac, OrbStack is the lighter option and what this project was built against; Docker Desktop works identically for everything in this course. You need this before the next lesson.