<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Jonasz Jozwicki</title>
    <description>The latest articles on Forem by Jonasz Jozwicki (@jonaszjozwicki).</description>
    <link>https://forem.com/jonaszjozwicki</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3806278%2F71d1f537-9c50-4d1a-b8e3-7e3c9ebef138.png</url>
      <title>Forem: Jonasz Jozwicki</title>
      <link>https://forem.com/jonaszjozwicki</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jonaszjozwicki"/>
    <language>en</language>
    <item>
      <title>Why Every Developer Should Have a Homelab in 2026</title>
      <dc:creator>Jonasz Jozwicki</dc:creator>
      <pubDate>Wed, 18 Mar 2026 23:00:00 +0000</pubDate>
      <link>https://forem.com/jonaszjozwicki/why-every-developer-should-have-a-homelab-in-2026-2lmp</link>
      <guid>https://forem.com/jonaszjozwicki/why-every-developer-should-have-a-homelab-in-2026-2lmp</guid>
      <description>&lt;p&gt;&lt;em&gt;Picture this: your own private cloud.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Virtual machines. Containers. Networking. Automation pipelines.&lt;br&gt;
All running quietly… in your own home.&lt;/p&gt;

&lt;p&gt;No cloud bills creeping up at 2AM.&lt;br&gt;
No rate limits.&lt;br&gt;
No “you don’t have permission for that.”&lt;/p&gt;

&lt;p&gt;Just pure infrastructure — and it’s yours.&lt;/p&gt;


&lt;h2&gt;
  
  
  Prefer video?
&lt;/h2&gt;

&lt;p&gt;I documented this entire setup step-by-step — if you'd rather watch than read:&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/aUWguvcsfA8"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;Otherwise, keep reading — I’ll break everything down here.&lt;/p&gt;

&lt;h2&gt;
  
  
  So… Why a Homelab?
&lt;/h2&gt;

&lt;p&gt;I work with real cloud environments every day — production systems, test environments, shared infrastructure.&lt;/p&gt;

&lt;p&gt;And while that’s great… it comes with limits.&lt;/p&gt;

&lt;p&gt;You can’t just:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;break things freely&lt;/li&gt;
&lt;li&gt;test risky ideas&lt;/li&gt;
&lt;li&gt;spin up weird experiments “just because”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There’s always structure. Ownership. Guardrails.&lt;/p&gt;

&lt;p&gt;And that’s exactly why I decided to build a homelab in 2026.&lt;/p&gt;

&lt;p&gt;Because sometimes the best way to learn…&lt;br&gt;
is to &lt;strong&gt;have a space where nothing matters except curiosity&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Is a Homelab, Really?
&lt;/h2&gt;

&lt;p&gt;A homelab is your &lt;strong&gt;personal data center&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That might sound dramatic — but it doesn’t have to be.&lt;/p&gt;

&lt;p&gt;It can be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an old PC gathering dust&lt;/li&gt;
&lt;li&gt;a mini PC from eBay&lt;/li&gt;
&lt;li&gt;a small cluster of machines&lt;/li&gt;
&lt;li&gt;or even a full rack (if you’re feeling ambitious)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Inside that setup, you can run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;virtual machines&lt;/li&gt;
&lt;li&gt;containers&lt;/li&gt;
&lt;li&gt;databases&lt;/li&gt;
&lt;li&gt;DNS servers&lt;/li&gt;
&lt;li&gt;reverse proxies&lt;/li&gt;
&lt;li&gt;Kubernetes clusters&lt;/li&gt;
&lt;li&gt;automation tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basically… anything you’d find in real-world infrastructure.&lt;/p&gt;

&lt;p&gt;Except here, you control everything.&lt;/p&gt;


&lt;h2&gt;
  
  
  You’re Not Playing — You’re Simulating the Internet
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;server&lt;/strong&gt; is just a computer that runs services for others.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;homelab&lt;/strong&gt; is what happens when you connect multiple services together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;apps talking to databases&lt;/li&gt;
&lt;li&gt;APIs talking to other APIs&lt;/li&gt;
&lt;li&gt;systems depending on each other&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s infrastructure.&lt;/p&gt;

&lt;p&gt;And when you build it yourself, something clicks.&lt;/p&gt;

&lt;p&gt;You stop seeing “apps”…&lt;/p&gt;

&lt;p&gt;…and start seeing &lt;strong&gt;systems&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  My Goal: Build a Private Cloud at Home
&lt;/h2&gt;

&lt;p&gt;This year, I’m rebuilding my homelab from scratch.&lt;/p&gt;

&lt;p&gt;Not as a side experiment — but as a &lt;strong&gt;serious learning playground&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because I want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;full control over my environment&lt;/li&gt;
&lt;li&gt;a place to test ideas before production&lt;/li&gt;
&lt;li&gt;a sandbox where failure is fast and cheap&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And honestly?&lt;/p&gt;

&lt;p&gt;Also just to have fun.&lt;/p&gt;

&lt;p&gt;Because sometimes the best projects aren’t “necessary” —&lt;br&gt;
they’re just &lt;strong&gt;interesting enough to pull you in&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  What You Can Actually Do in a Homelab
&lt;/h2&gt;

&lt;p&gt;Here’s where things get fun.&lt;/p&gt;

&lt;p&gt;In your homelab, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;deploy your own cloud services&lt;/li&gt;
&lt;li&gt;build CI/CD pipelines&lt;/li&gt;
&lt;li&gt;host personal projects&lt;/li&gt;
&lt;li&gt;simulate production environments&lt;/li&gt;
&lt;li&gt;experiment with networking and security&lt;/li&gt;
&lt;li&gt;break things… and fix them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Over and over again.&lt;/p&gt;

&lt;p&gt;No tutorials. No constraints. Just iteration.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why This Matters for Developers
&lt;/h2&gt;

&lt;p&gt;Let’s be honest.&lt;/p&gt;

&lt;p&gt;Most developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;write code&lt;/li&gt;
&lt;li&gt;run it locally&lt;/li&gt;
&lt;li&gt;maybe deploy it to the cloud&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But very few truly understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how infrastructure is wired together&lt;/li&gt;
&lt;li&gt;how systems fail&lt;/li&gt;
&lt;li&gt;how services communicate under the hood&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A homelab changes that.&lt;/p&gt;

&lt;p&gt;It forces you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;think in systems&lt;/li&gt;
&lt;li&gt;debug real problems&lt;/li&gt;
&lt;li&gt;understand networking, storage, and compute&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that’s where you level up from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“someone who writes code”&lt;br&gt;
to&lt;br&gt;
“someone who understands how software lives in the real world”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  And No — You Don’t Need Expensive Gear
&lt;/h2&gt;

&lt;p&gt;You don’t need a data center.&lt;/p&gt;

&lt;p&gt;You can start with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an old PC&lt;/li&gt;
&lt;li&gt;8GB+ RAM&lt;/li&gt;
&lt;li&gt;a decent CPU&lt;/li&gt;
&lt;li&gt;a USB drive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;p&gt;Seriously.&lt;/p&gt;

&lt;p&gt;The magic isn’t in the hardware.&lt;br&gt;
It’s in what you &lt;strong&gt;build on top of it&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  Where I’m Starting
&lt;/h2&gt;

&lt;p&gt;For my setup, I’m using Proxmox — an open-source virtualization platform.&lt;/p&gt;

&lt;p&gt;It lets me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;run multiple virtual machines&lt;/li&gt;
&lt;li&gt;create lightweight containers&lt;/li&gt;
&lt;li&gt;manage everything from a web interface&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words — it becomes the &lt;strong&gt;control center of my homelab&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is where everything begins.&lt;/p&gt;


&lt;h2&gt;
  
  
  This Is Just the Beginning
&lt;/h2&gt;

&lt;p&gt;This post isn’t a tutorial.&lt;/p&gt;

&lt;p&gt;It’s the &lt;strong&gt;starting point&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the next steps, I’ll be building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a fully functional Proxmox node&lt;/li&gt;
&lt;li&gt;virtual machines and services&lt;/li&gt;
&lt;li&gt;networking between systems&lt;/li&gt;
&lt;li&gt;and eventually… a complete home infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step by step.&lt;/p&gt;


&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;A homelab isn’t about replacing the cloud.&lt;/p&gt;

&lt;p&gt;It’s about &lt;strong&gt;understanding it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It’s about having a place where you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;experiment freely&lt;/li&gt;
&lt;li&gt;learn deeply&lt;/li&gt;
&lt;li&gt;and build without limits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So if you’ve ever thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I want to get better at DevOps / infrastructure / backend…”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is your sign.&lt;/p&gt;

&lt;p&gt;Start small.&lt;/p&gt;

&lt;p&gt;Break things.&lt;/p&gt;

&lt;p&gt;Build again.&lt;/p&gt;


&lt;h2&gt;
  
  
  What’s Next?
&lt;/h2&gt;

&lt;p&gt;This is just the starting point.&lt;/p&gt;

&lt;p&gt;In the next step, I’ll be setting up the Proxmox host properly — networking, storage, and all the small things that actually make it usable.&lt;/p&gt;

&lt;p&gt;If you want to see the full process in action, I documented this part here:&lt;br&gt;


  &lt;iframe src="https://www.youtube.com/embed/aUWguvcsfA8"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;And if you’re building your own homelab too — I’d genuinely love to hear what you’re running and what you’re planning to build.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>homelab</category>
      <category>cloud</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Things I Wish I Knew Before Building My Own IT Infrastructure</title>
      <dc:creator>Jonasz Jozwicki</dc:creator>
      <pubDate>Wed, 11 Mar 2026 23:00:00 +0000</pubDate>
      <link>https://forem.com/jonaszjozwicki/things-i-wish-i-knew-before-building-my-own-it-infrastructure-2ib2</link>
      <guid>https://forem.com/jonaszjozwicki/things-i-wish-i-knew-before-building-my-own-it-infrastructure-2ib2</guid>
      <description>&lt;h2&gt;
  
  
  How I Got Here
&lt;/h2&gt;

&lt;p&gt;Building a startup is hard these days. Building a &lt;strong&gt;tech startup&lt;/strong&gt; is even harder.&lt;/p&gt;

&lt;p&gt;My niche is Cloud and DevOps, so from the very beginning I wanted &lt;strong&gt;Platform as a Service&lt;/strong&gt; to be part of my offering. Naturally, I also needed a place where I could test the services I wanted to sell.&lt;/p&gt;

&lt;p&gt;So we decided to build our &lt;strong&gt;own datacenter&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Looking back, I had absolutely no idea what I was getting myself into.&lt;/p&gt;

&lt;p&gt;The funny thing is that I’m about &lt;strong&gt;7 months in&lt;/strong&gt;, and sometimes it feels like nothing really moved forward. We still don’t have anything publicly available yet. But that’s a story for another post.&lt;/p&gt;

&lt;p&gt;For now, I’d like to share some of the &lt;strong&gt;less obvious mistakes&lt;/strong&gt; I made while building a self-hosted IT infrastructure. Hopefully they’ll save someone else a few headaches.&lt;/p&gt;




&lt;h2&gt;
  
  
  Infrastructure as Code… and Coding &lt;em&gt;Everything&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Yes, you heard that right.&lt;/p&gt;

&lt;p&gt;These days everyone talks about &lt;strong&gt;Infrastructure as Code&lt;/strong&gt;, Terraform, automation, pipelines, and writing code for every piece of infrastructure.&lt;/p&gt;

&lt;p&gt;It’s cool. It sounds sexy. It’s also incredibly satisfying.&lt;/p&gt;

&lt;p&gt;But sometimes… it’s just not worth the hassle.&lt;/p&gt;

&lt;p&gt;I started with the idea that &lt;strong&gt;everything must be written as code&lt;/strong&gt;. Every configuration. Every service. Every system.&lt;/p&gt;

&lt;p&gt;Terraform.&lt;br&gt;
Ansible.&lt;br&gt;
Bash scripts.&lt;br&gt;
You name it.&lt;/p&gt;

&lt;p&gt;And while writing automation is fun, I eventually realized something important:&lt;/p&gt;

&lt;p&gt;Sometimes you're &lt;strong&gt;just fiddling with code instead of finishing the job&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There are moments when you need to ship something quickly. Sometimes a quick click in a UI is perfectly fine.&lt;/p&gt;

&lt;p&gt;In my case, I even wrote a &lt;strong&gt;full Bash script to auto-configure Proxmox&lt;/strong&gt;. Later I discovered that something very similar already existed:&lt;/p&gt;

&lt;p&gt;Proxmox VE Helper Scripts&lt;br&gt;
&lt;a href="https://community-scripts.github.io/ProxmoxVE/scripts?id=post-pve-install" rel="noopener noreferrer"&gt;https://community-scripts.github.io/ProxmoxVE/scripts?id=post-pve-install&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I basically &lt;strong&gt;did the work twice&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Lesson learned: automation is great, but &lt;strong&gt;don’t automate things that already have a perfectly good solution&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Sometimes it's okay to just click the button.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Backup Anything If I Can Recreate Everything From Code?
&lt;/h2&gt;

&lt;p&gt;This mistake came directly from the previous mindset.&lt;/p&gt;

&lt;p&gt;Since everything was defined as code, I convinced myself that &lt;strong&gt;traditional backups were unnecessary&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And to be fair, in many cases that actually works.&lt;/p&gt;

&lt;p&gt;If a VM breaks?&lt;br&gt;
Just recreate it with Terraform.&lt;/p&gt;

&lt;p&gt;Easy.&lt;/p&gt;

&lt;p&gt;But here’s the catch.&lt;/p&gt;

&lt;p&gt;Real life rarely follows the clean IaC model.&lt;/p&gt;

&lt;p&gt;Sometimes you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tweak something manually&lt;/li&gt;
&lt;li&gt;test a quick change&lt;/li&gt;
&lt;li&gt;forget to update your Terraform&lt;/li&gt;
&lt;li&gt;don’t want to rewrite a module for the 100th time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And suddenly your &lt;strong&gt;perfectly reproducible infrastructure isn’t perfectly reproducible anymore&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So yes, infrastructure as code helps a lot.&lt;/p&gt;

&lt;p&gt;But &lt;strong&gt;periodic backups still matter&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One important clarification though:&lt;/p&gt;

&lt;p&gt;This is about &lt;strong&gt;infrastructure backups&lt;/strong&gt;, not &lt;strong&gt;user data&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;User data should &lt;em&gt;always&lt;/em&gt; be backed up properly.&lt;/p&gt;

&lt;p&gt;For infrastructure itself, backups are just a &lt;strong&gt;safety net when reality drifts away from the code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Sometimes restoring a backup is simply faster than rebuilding everything.&lt;/p&gt;

&lt;p&gt;Old-school admin practices exist for a reason.&lt;/p&gt;




&lt;h2&gt;
  
  
  Documentation Doesn’t Need to Be Perfect
&lt;/h2&gt;

&lt;p&gt;Everyone keeps repeating the same advice:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Always document everything.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And yes, documentation is important.&lt;/p&gt;

&lt;p&gt;But it &lt;strong&gt;doesn’t need to be perfect&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At some point I started writing extremely detailed documentation for even the smallest tasks. Sometimes a simple setup ended up with &lt;strong&gt;multiple pages of documentation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Eventually I realized something funny.&lt;/p&gt;

&lt;p&gt;Many of those beautifully structured documents were &lt;strong&gt;never opened again&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Meanwhile the documents I actually used were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;quick notes&lt;/li&gt;
&lt;li&gt;work-in-progress docs&lt;/li&gt;
&lt;li&gt;messy personal guides&lt;/li&gt;
&lt;li&gt;short command snippets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not the polished ones.&lt;/p&gt;

&lt;p&gt;Turns out the most useful documentation is often the one that is &lt;strong&gt;fast to write and easy to search&lt;/strong&gt;, not the one that looks perfect.&lt;/p&gt;

&lt;p&gt;Write documentation for &lt;strong&gt;future you&lt;/strong&gt;, not for a technical writing award.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Classic Hypocrisy: No Monitoring for My Own Infrastructure
&lt;/h2&gt;

&lt;p&gt;This one is honestly embarrassing.&lt;/p&gt;

&lt;p&gt;One of the products I’m planning to launch is &lt;strong&gt;a SaaS observability platform for software houses&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Meanwhile my &lt;strong&gt;own infrastructure monitoring barely exists&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It’s somewhere near the top of my backlog, but not properly implemented yet.&lt;/p&gt;

&lt;p&gt;Which is ironic.&lt;/p&gt;

&lt;p&gt;If you're building infrastructure, &lt;strong&gt;monitoring should exist from day one&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;system metrics&lt;/li&gt;
&lt;li&gt;service health&lt;/li&gt;
&lt;li&gt;logs&lt;/li&gt;
&lt;li&gt;alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Otherwise you're basically flying blind.&lt;/p&gt;

&lt;p&gt;This is something I’m planning to fix soon and probably &lt;strong&gt;stream the entire setup process&lt;/strong&gt;, if anyone is interested.&lt;/p&gt;




&lt;h2&gt;
  
  
  Doing Everything “By the Book” and Thinking Too Big
&lt;/h2&gt;

&lt;p&gt;Another trap I fell into was trying to do &lt;strong&gt;everything the “proper” way&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Perfect architecture.&lt;br&gt;
Perfect processes.&lt;br&gt;
Perfect automation.&lt;/p&gt;

&lt;p&gt;But the reality of startups is different.&lt;/p&gt;

&lt;p&gt;Sometimes &lt;strong&gt;speed matters more than perfection&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What matters most is &lt;strong&gt;delivering value&lt;/strong&gt;, especially to clients.&lt;/p&gt;

&lt;p&gt;Ambition is great. Big plans are important.&lt;/p&gt;

&lt;p&gt;But when you're:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bootstrapping&lt;/li&gt;
&lt;li&gt;low on budget&lt;/li&gt;
&lt;li&gt;early in the journey&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;it’s often better to &lt;strong&gt;start small and evolve&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can always improve things later.&lt;/p&gt;

&lt;p&gt;You can’t improve something that was never shipped.&lt;/p&gt;




&lt;h2&gt;
  
  
  What mistakes did you make?
&lt;/h2&gt;

&lt;p&gt;Building infrastructure is one of those things where you only learn by doing… and by breaking things along the way.&lt;/p&gt;

&lt;p&gt;These are just a few mistakes I made in the first months.&lt;/p&gt;

&lt;p&gt;I’m sure there are many more waiting for me in the future.&lt;/p&gt;

&lt;p&gt;So now I’m curious:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What’s the biggest mistake you made while building infrastructure?&lt;/li&gt;
&lt;li&gt;What’s something you wish someone told you earlier?&lt;/li&gt;
&lt;li&gt;Did you also fall into the “automate absolutely everything” trap?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’d love to hear your stories. I suspect I’m not the only one who learned some of these lessons the hard way.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
      <category>infrastructure</category>
      <category>homelab</category>
    </item>
    <item>
      <title>Docker Finally Clicked When I Understood This One Thing</title>
      <dc:creator>Jonasz Jozwicki</dc:creator>
      <pubDate>Thu, 05 Mar 2026 18:12:44 +0000</pubDate>
      <link>https://forem.com/jonaszjozwicki/docker-finally-clicked-when-i-understood-this-one-thing-3jci</link>
      <guid>https://forem.com/jonaszjozwicki/docker-finally-clicked-when-i-understood-this-one-thing-3jci</guid>
      <description>&lt;p&gt;For a long time, Docker felt for me like a collection of mysterious commands copied from StackOverflow. &lt;/p&gt;

&lt;p&gt;I knew the basics:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build
docker run
docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But if someone asked me &lt;em&gt;what Docker actually was&lt;/em&gt;, I would probably say something vague like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“It packages your app so it runs everywhere.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Technically correct.&lt;/p&gt;

&lt;p&gt;Not very helpful.&lt;/p&gt;

&lt;p&gt;Docker finally clicked when I understood one simple mental model.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Problem Docker Solves
&lt;/h2&gt;

&lt;p&gt;If you’ve worked on any team project long enough, you’ve probably heard this conversation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“It works on my machine.”&lt;br&gt;
“Well… it doesn’t work on mine.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Different operating systems.&lt;/p&gt;

&lt;p&gt;Different library versions.&lt;/p&gt;

&lt;p&gt;Different runtime environments.&lt;/p&gt;

&lt;p&gt;A Node project might work perfectly on one laptop but fail on another because someone installed a slightly different version.&lt;/p&gt;

&lt;p&gt;Multiply that problem across teams, staging servers, CI pipelines, and production infrastructure.&lt;/p&gt;

&lt;p&gt;That’s where Docker comes in.&lt;/p&gt;

&lt;p&gt;Docker lets you package &lt;strong&gt;everything your application needs&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the runtime&lt;/li&gt;
&lt;li&gt;system libraries&lt;/li&gt;
&lt;li&gt;dependencies&lt;/li&gt;
&lt;li&gt;configuration&lt;/li&gt;
&lt;li&gt;the application itself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of it goes into a single isolated unit.&lt;/p&gt;

&lt;p&gt;That unit is called a &lt;strong&gt;container&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Mental Model That Made Docker Click
&lt;/h2&gt;

&lt;p&gt;The analogy that made this make sense for me comes from the shipping industry.&lt;/p&gt;

&lt;p&gt;Before standardized containers existed, cargo shipping was chaotic.&lt;/p&gt;

&lt;p&gt;Ships carried:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;wooden crates&lt;/li&gt;
&lt;li&gt;barrels&lt;/li&gt;
&lt;li&gt;sacks&lt;/li&gt;
&lt;li&gt;oddly shaped equipment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every time cargo moved from a ship to a truck or train, workers had to handle each item individually.&lt;/p&gt;

&lt;p&gt;Then shipping containers were introduced.&lt;/p&gt;

&lt;p&gt;Everything goes into &lt;strong&gt;the same standardized box&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ships move the box.&lt;/p&gt;

&lt;p&gt;Trucks move the box.&lt;/p&gt;

&lt;p&gt;Trains move the box.&lt;/p&gt;

&lt;p&gt;Nobody touches what’s inside.&lt;/p&gt;

&lt;p&gt;Docker applies that exact idea to software.&lt;/p&gt;

&lt;p&gt;Instead of shipping code and hoping the environment matches, you ship a &lt;strong&gt;container&lt;/strong&gt; that already includes the entire environment.&lt;/p&gt;

&lt;p&gt;Your laptop.&lt;/p&gt;

&lt;p&gt;Your teammate’s machine.&lt;/p&gt;

&lt;p&gt;A cloud server.&lt;/p&gt;

&lt;p&gt;Same container. Same behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Docker Concepts That Matter
&lt;/h2&gt;

&lt;p&gt;Once the mental model clicked, the core pieces of Docker became much easier to understand.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Images
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;Docker image&lt;/strong&gt; is the blueprint.&lt;/p&gt;

&lt;p&gt;It describes everything needed to run an application:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which base system to start from&lt;/li&gt;
&lt;li&gt;which packages to install&lt;/li&gt;
&lt;li&gt;which files to copy into the environment&lt;/li&gt;
&lt;li&gt;what command should run when the container starts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of an image as a template.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Containers
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;container&lt;/strong&gt; is a running instance of an image.&lt;/p&gt;

&lt;p&gt;One image can create many containers.&lt;/p&gt;

&lt;p&gt;A simple analogy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Image → cookie cutter&lt;/li&gt;
&lt;li&gt;Container → cookie&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Registries
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;registry&lt;/strong&gt; is where Docker images are stored.&lt;/p&gt;

&lt;p&gt;The most popular one is &lt;strong&gt;Docker Hub&lt;/strong&gt;, which acts like a huge library of prebuilt environments.&lt;/p&gt;

&lt;p&gt;Need a database?&lt;/p&gt;

&lt;p&gt;There’s an image for that.&lt;/p&gt;

&lt;p&gt;Need a web server?&lt;/p&gt;

&lt;p&gt;There’s an image for that too.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Moment Docker Usually Clicks
&lt;/h2&gt;

&lt;p&gt;Docker usually makes sense when you run your first real container.&lt;/p&gt;

&lt;p&gt;For example, this single command launches a full web server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:80 nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s break that down.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Creates and starts a container.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;d&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Runs it in the background.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;p 8080:80&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Maps port 8080 on your machine to port 80 inside the container.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nginx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The image that contains the web server.&lt;/p&gt;

&lt;p&gt;Once it starts, open your browser and go to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And just like that, you’re running a real Nginx server.&lt;/p&gt;

&lt;p&gt;No manual installs.&lt;/p&gt;

&lt;p&gt;No system configuration.&lt;/p&gt;

&lt;p&gt;One command.&lt;/p&gt;

&lt;p&gt;That’s when Docker usually clicks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happens Behind the Scenes
&lt;/h2&gt;

&lt;p&gt;When you run a container, Docker automatically:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;checks if the image exists locally&lt;/li&gt;
&lt;li&gt;downloads it if needed&lt;/li&gt;
&lt;li&gt;creates the container environment&lt;/li&gt;
&lt;li&gt;starts the process inside the container&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The container runs until the process stops or you shut it down.&lt;/p&gt;

&lt;p&gt;You can inspect running containers with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And see all containers, including stopped ones, with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker ps -a
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  A Full Beginner Walkthrough
&lt;/h2&gt;

&lt;p&gt;I recently recorded a full beginner walkthrough where I explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what Docker actually is&lt;/li&gt;
&lt;li&gt;images vs containers&lt;/li&gt;
&lt;li&gt;running your first container&lt;/li&gt;
&lt;li&gt;launching an Nginx web server&lt;/li&gt;
&lt;li&gt;basic container management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything happens live in the terminal so you can follow along step by step.&lt;/p&gt;

&lt;p&gt;If you're interested, you can watch it here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=x2sahRjVtGc" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=x2sahRjVtGc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Curious About Your Experience
&lt;/h2&gt;

&lt;p&gt;Docker tends to "click" at different moments for different people.&lt;/p&gt;

&lt;p&gt;For some it's when they run their first container.&lt;/p&gt;

&lt;p&gt;For others it's when they build their first image.&lt;/p&gt;

&lt;p&gt;I'm curious:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When did Docker finally make sense for you?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
