Hands-on, auto-graded exercises for the Amigoscode DevOps track. Every exercise runs inside a disposable Ubuntu container, so destructive commands are safe, the environment is identical for everyone, and a script checks your work with instant ✅ / ❌ feedback.
The goal: take you from Linux beginner to the practical, day-to-day skills a DevOps engineer relies on.
Two tools power these exercises - you don't need to know them deeply (you'll learn both properly later in the track), just enough to run the commands:
- Docker packages a whole Linux environment into a disposable container - a
mini Ubuntu machine that boots in seconds and throws away cleanly. Each exercise
runs in one, so you can break things (even
rm -rf) with zero risk to your real computer, and everyone gets the exact same environment. - make is a tiny command runner. Instead of typing long Docker commands, you run
short ones like
make startormake verify, andmakeruns the real command for you (defined in each course'sMakefile).
So make start S=01-the-terminal just means "use Docker to spin up the Ubuntu
sandbox for this exercise and drop me into it." In GitHub Codespaces both are
already installed - nothing to set up.
You'll keep your own copy of these exercises, and still be able to pull in new content whenever it's added.
Fork this repository →
this creates your-username/devops-exercises, which is yours to keep.
On your fork: Code → Codespaces → Create codespace on main.
Wait ~1-2 min while it provisions Docker + make + the exercise image (handled by
the included .devcontainer), then:
cd 01-linux-fundamentals
make start S=01-the-terminal # pristine Ubuntu shell, scenario seeded
# ...work in the container; when done, type 'exit' (or Ctrl+D) to leave, then:
make verify S=01-the-terminal # grade your work
make reset S=01-the-terminal # fresh startWhen new courses or fixes are published, open your fork on GitHub and click
Sync fork → Update branch. Because your work lives in a git-ignored ~/sandbox,
updates merge cleanly - you never lose progress.
The my-journey/ folder is yours - log notes, commands and
takeaways as you go, then commit and push to your fork. Over time it becomes a
public portfolio of your DevOps journey. It's never touched by upstream syncs,
so it stays conflict-free.
Clone your fork and run the same commands locally - you just need Docker and make installed:
git clone https://github.com/YOUR-USERNAME/devops-exercises.git
cd devops-exercises/01-linux-fundamentals
make build # once
make start S=01-the-terminal # enter a pristine Ubuntu shell, scenario seeded
# ...work in the container; when done, type 'exit' (or Ctrl+D) to leave, then:
make verify S=01-the-terminal # grade your work
make reset S=01-the-terminal # fresh start| # | Course | Status |
|---|---|---|
| 01 | Linux Fundamentals | ✅ 8 sections, fully tested |
| 02 | Vim | ✅ 3 sections, fully tested |
| 03 | Linux for Professionals | ✅ 5 sections, fully tested |
| 04 | Shell Scripting | ✅ 5 sections, fully tested |
| 05 | Git & GitHub Fundamentals | ✅ 4 sections, fully tested |
More courses in the DevOps track (Git for Professionals, Docker, CI/CD, AWS) will be added with the same format.
- One container per course, per-section seeds -
make start S=<section>drops you into a fresh Ubuntu shell with the scenario set up in~/sandbox. - Three tiers per section: warm-up → core → a real DevOps challenge.
- Auto-graded: each section ships a
verify.shthat scores your work. - Solutions included: stuck? every section has a
solutions.md- but try first.
devops-exercises/
├── .devcontainer/ # Codespaces config (Docker-in-Docker + make)
├── my-journey/ # your notes & progress (commit to your fork)
├── 01-linux-fundamentals/ # a course (one folder per course)
│ ├── Dockerfile # the shared Ubuntu exercise image
│ ├── Makefile # make build / start / verify / reset / stop
│ └── NN-topic/ # each section: README, seed.sh, verify.sh, solutions.md
├── 02-vim/
└── 03-linux-for-professionals/