The Lazy Dev Diaries – Episode 1: But It Works in My Container!

Chapter 1: Docker?… Inshallah, One Day
Let’s get this out of the way: Docker is a crutch, and that’s exactly why I use it.
Not because I’m ashamed of being lazy, but because I’ve fully embraced it. I don't want to manually configure anything twice, I don't want to debug setup issues on someone else’s laptop, and I definitely don’t want to explain how to install PostgreSQL for the hundredth time.
I’ve been lazily docker-compose up-ing my way through projects for years. It works. Maybe not on your boutique dev setup with its exotic Mac chip and artisanal shell scripts, but it works in my container, and that’s the standard I care about.
Docker is the ultimate toolkit for developers who optimize for effortless repetition. Not lazy in the “I cut corners” way. Lazy in the “I eliminate pain forever” way. If you're setting things up manually over and over again, you're not being diligent, you're just a human CI/CD pipeline cosplaying as productivity.
🚀 “But Isn’t Docker Overkill for Small Projects?”
Yes. And that’s the beauty of it.
The point isn’t whether it’s necessary. The point is (one of several points actually) I never want to hear the words “It works on my machine” ever again, not from me, not from anyone on my team, and definitely not from that guy who still uses pip install directly on his host system like it’s 2009 or the guy who manually installs .Net SDK on his Windows Server like it's 1998.
Using Docker is pre-emptive laziness. I’m saving myself from future me, from debugging weird dependency issues, from trying to remember which version of PostgreSQL worked with that one Node.js project during Ramadan when sleep-deprivation hits harder than memory leaks. I snapshot my sanity in a docker-compose.yaml file and move on.
It also gives this beautiful consistency to everything I deploy, a database, a custom app I made, a video game server, a random "to-do" app form the internet, all deploy the exact same way, on any server, without any side configurations or dependencies.

🧠 Docker ≠ Dumb
There’s this idea that if something’s easy, it must be cheating. That if you use Docker, you're skipping the “real work” of setup, configuration, and elbow-grease engineering. But that's nonsense.Docker isn't a shortcut for the clueless, it's a tool for people who know exactly what pain they're avoiding. It’s the decision not to spend your afternoon debugging Python on a Windows box, or remembering which Linux distro has the right package name for libpq-dev.
The smartest devs I know aren’t scared of complexity, they’re just ruthless about where to put their energy. Docker lets them focus on what they’re building, not the environment it’s running in.Also, have you noticed that nearly all serious open-source projects have aDockerfile? Take a hint already.

TL;DR
Dockerizing everything might look like overengineering, but it’s just strategic laziness. It's a shortcut past pain, inconsistency, and future regret. If you're still hand-installing dependencies and configuring services from scratch, ask yourself this: Who’s really working harder here?
Now grab a flimsy plastic cup of chai karak, enjoy the microplastics and caffeine in your blood stream, and endure me for two more chapters as I spoon-feed you how to containerize like a lazy wa7sh.
Chapter 2: Docker IRL
I Swear It Works on Windows.. Kind of
You got this far, so you're clearly one of us now. Let’s clear up a pain point before it sneaks up on you: your OS.
🪟Windows? Yeah, it can run Docker using WSL (Windows Subsystem for Linux). It's installable via the Windows package manager, no sketchy .exes or weird tutorials required. WSL is great for development: spinning up containers while you build stuff, test APIs, or casually run a Postgres instance. But it’s not built for unattended production, unless you enjoy Docker silently dying during a system update.
🐧Linux? Now we’re talking. It’s the battlefield-tested choice for production deployments, the kind that restart themselves without a dramatic sigh. I go with Ubuntu. Why? Because it just works, and because I’m too lazy to argue with Arch users.
The good news? Whether you use Windows or Linux, the Docker CLI works the same way. No surprises. docker ps behaves like docker ps. Your muscle memory remains unbothered. So master Docker on Windows, then log onto a Linux server and run Docker like you never even alt-tabbed.

Personally, I use Windows 🪟 as my everyday Docker playground, and Linux 🐧 to deploy things meant to run forever.
🚀 Get Docker
Follow the link and do the needful to install Docker, I trust this is not your first day using a computer?
Windows: https://apps.microsoft.com/detail/xp8cbj40xlbwkx?hl=en-GB&gl=GB
Linux: Linux | Docker Docs
Mac: Mac | Docker Docs
You may run into an error with Windows WSL, simply run wsl --update in Windows PowerShell/Terminal and you're good to go... after a reboot. See you soon!
Disclaimer: Docker Desktop for Windows is free for private use, paid for commercial use. Docker on Linux is free for anything. You can pull the Linux version to WSL or explore alternatives like Podman but if you're a noob; stick with Docker Desktop until you learn to walk.
Your First Container
So now I’m assuming you’ve got Docker installed and you're ready to make some magic. We’re not going to waste time with “hello world”, you deserve better. How about spinning up your own self-hosted Google Drive?
Sounds intimidating? It’s not. In fact, it’s just 2 steps. Seriously.
🪄 Step-by-Step: Instant Google Drive (Okay, Nextcloud)
- Press Win + X and choose Terminal (or open it however you like).
- Copy and paste the following command:
docker run -d --name nextcloud -p 8080:80 nextcloud
- Press [ENTER].
Boom. That’s it. Maybe that was technically three steps, but if you can microwave popcorn, you can do this.

🤔 What Just Happened?
Congrats, you’ve just launched Nextcloud, your own personal cloud storage server. Docker pulled the official Nextcloud image from Docker Hub, the "app store" for containerized software, and started it inside a lightweight container on your machine.
To access it, fire up your browser (please not Internet Explorer) and head to:
http://localhost:8080/
You're now the proud owner of a private cloud, a DIY Google Drive, if you will. LITERALLY. (Well, kind of.)

🌍 Where Is It Running?
Right now, the app is running on localhost, meaning your laptop is now the server. Yes, even if it’s balanced on a couch somewhere in Al Khoud.
With some additional setup (like Tailscale, Cloudflare Tunnels, or good old port forwarding with dynamic DNS), you could access this from anywhere in the world, from Salalah to Stockholm. But hey, that’s a story for a future episode of The Lazy Dev Diaries.

🛑 Stopping & Cleaning Up
Want to shut things down? Easy.
docker stop nextcloud
docker rm nextcloud
That stops the container and removes it from your local environment. Simple. There are a few more advanced cleanup steps, like removing images and volumes, and if you're on Windows, you can do most of it with a few clicks in the Docker Desktop app. Alternatively, just having a cheat sheet like this open on a second screen is 90% of the battle, and it's relevant for both Windows and Linux.

Or better yet, print it, laminate it, and pin it on the fridge right next to those random souvenir magnets from that one Malaysia trip. Respect.
🔮 Coming Up Next...
In the next chapter, we’ll go beyond solo containers and dive into spinning up and juggling multiple apps at once like a proper tech Jedi. Stay lazy, but smart.
Chapter 3: The Lazy Dev Ascends
So, you’ve installed Docker. You’ve spun up Nextcloud like it was a kettle of Karak. You’ve stopped and removed containers like a true system whisperer. But now it’s time to become what every lazy dev secretly dreams of:
A one-command infrastructure architect.
Let’s juggle multiple containers using Docker Compose, the tool that lets you launch entire environments with a single docker-compose up. No more pasting long commands. No more remembering ports. No more pretending you don’t want to automate everything.
🛠️ What Are We Building?
Let’s go back to Nextcloud, but this time, we’ll store its files and metadata in a proper PostgreSQL database.
We’ll also define volumes to keep your data safe across container restarts. Because even lazy devs respect persistence.
🧾 docker-compose.yaml (a.k.a. Dev Magic Scroll)
Here’s the full docker-compose.yaml, copy, paste, chill:
services:
db:
image: postgres:16
container_name: nextcloud_db
restart: always
environment:
POSTGRES_DB: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD: supersecret
volumes:
- db_data:/var/lib/postgresql/data
app:
image: nextcloud
container_name: nextcloud_app
restart: always
ports:
- 8080:80
environment:
POSTGRES_HOST: db
POSTGRES_DB: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD: supersecret
depends_on:
- db
volumes:
- nextcloud_data:/var/www/html
volumes:
db_data:
nextcloud_data:
Save it somewhere, make sure to save it as a ".yaml" file, not ".txt". You can just paste the above in notepad and save it.

Shift+Right click anywhere empty inside this folder and select open "Terminal" or "PowerShell", then run this command.
docker-compose up -d
You should see this

And that’s it. Seriously.
Docker spins up both the Nextcloud app and the database, connects them, creates volumes, and exposes the web interface at:
http://localhost:8080

You now have a cloud storage system running on top of a full database backend, all with one command. No setup screens. No fiddling with ports. No begging your Linux friend for help.
This works for 2 apps, this works for a thousand apps.. LET.. THAT.. SINK.. IN!
📦 What Just Happened?
You just became someone who runs multi-container environments from a single file. If you were to connect to the Postgres database directly, you will find Nextcloud has all its data there.
You’ve joined the ranks of people who say things like “oh yeah, I just spun up a stack,” while secretly sipping icy Vimto until it turns white and tasteless.
This is what Docker Compose is for. Clear infrastructure. Minimal effort. Reproducible environments.
Even if your laptop’s buried under chargers, mango juice spills, and a dusty router from Omantel, your containers are running smooth.
🪄 What’s Next?
Now that you’ve unlocked the power of Docker Compose, the real playground begins.
You could host your own password manager.
You could self-host RSS feeds, write code in the browser, automate your house, or run a VPN server from your closet.
You could even launch a private dev wiki that no one but you will ever read.
But that’s your journey now. I’ve just handed you the keys.
🏁 TL;DR: You're Officially Dangerous

You now know how to:
- Run containers like apps
- Clean them up without fear
- Launch complex stacks in one go
- Do it all while being gloriously, strategically lazy
So go ahead. Screenshot your Compose file.
Laminated fridge placement optional.
Legacy unlocked ya wa7sh!