<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Containers on Tom Meurs</title>
    <link>https://tommeurs.nl/en/tags/containers/</link>
    <description>Recent content in Containers on Tom Meurs</description>
    <generator>Hugo</generator>
    <language>en</language>
    <copyright>© Tom Meurs</copyright>
    <lastBuildDate>Tue, 29 Sep 2026 09:00:00 +0200</lastBuildDate>
    <atom:link href="https://tommeurs.nl/en/tags/containers/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Supply Chain Security in GitLab CI: SBOM, cosign, and the Policy That Blocks</title>
      <link>https://tommeurs.nl/en/posts/supply-chain-security-gitlab-ci/</link>
      <pubDate>Tue, 29 Sep 2026 09:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/en/posts/supply-chain-security-gitlab-ci/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; A pipeline that scans images and writes an SBOM, with nothing checking either at admission, had been green for a year and had stopped nothing. Four steps below: an SBOM Trivy can read back, a cosign signature on the digest with the key in Vault, the SBOM attached as an attestation, and a Kyverno policy that refuses the rest. Then a table of which SLSA Build L3 requirements a self-hosted GitLab runner meets, and the two it doesn&amp;rsquo;t.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simulation, Emulation, Virtualization, and Containers: The Restaurant Metaphor</title>
      <link>https://tommeurs.nl/en/posts/simulation-emulation-virtualization-containers/</link>
      <pubDate>Mon, 23 Feb 2026 20:18:00 +0100</pubDate>
      <guid>https://tommeurs.nl/en/posts/simulation-emulation-virtualization-containers/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Simulation models a thing without running it. Emulation runs it by rebuilding the hardware in software. Virtualization runs several complete operating systems on one machine. Containers run several apps on one kernel. Below, one restaurant per term, a table, and the four mix-ups I hear most.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;So what&amp;rsquo;s the difference between a container and a virtual machine?&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;I get this question a lot, usually from someone smart who&amp;rsquo;s been nodding along in meetings and doesn&amp;rsquo;t quite want to admit they&amp;rsquo;re fuzzy on it. The honest answer is that most explanations make it worse. They open with &amp;ldquo;hypervisor&amp;rdquo;, &amp;ldquo;kernel sharing&amp;rdquo; and &amp;ldquo;hardware abstraction&amp;rdquo;, and now the person has four new terms to be confused about instead of one.&lt;/p&gt;</description>
    </item>
    <item>
      <title>When not to use Kubernetes</title>
      <link>https://tommeurs.nl/en/posts/when-not-to-use-kubernetes/</link>
      <pubDate>Sat, 17 Jan 2026 10:00:00 +0100</pubDate>
      <guid>https://tommeurs.nl/en/posts/when-not-to-use-kubernetes/</guid>
      <description>&lt;p&gt;I write a lot about Kubernetes, and I run it at home every day. I like it.&lt;/p&gt;&#xA;&lt;p&gt;So it might surprise you that I spend a fair amount of my time talking people out of it.&lt;/p&gt;&#xA;&lt;p&gt;The situation I keep walking into goes like this. A small team, one product, a roadmap full of features customers are waiting for, and someone has decided the first milestone is a Kubernetes cluster. Three nodes minimum, etcd, a &lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;Container Network Interface: the plugin contract Kubernetes uses to give a pod its network. Cilium, Calico and Flannel are implementations of it.&#34;&gt;CNI&lt;/span&gt;&#xA;, an ingress controller, cert-manager, a monitoring stack. Weeks of work before a single customer sees anything. Everyone nods along, because that&amp;rsquo;s what a serious setup is supposed to look like.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Container Image Scanning with Trivy in Your CI Pipeline</title>
      <link>https://tommeurs.nl/en/posts/trivy-container-scanning/</link>
      <pubDate>Sun, 08 Jun 2025 10:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/en/posts/trivy-container-scanning/</guid>
      <description>&lt;p&gt;Pull a base image, copy in your code, push it to production. That&amp;rsquo;s the loop most of us run on autopilot. The part nobody looks at is the base image itself, which quietly drags in a few hundred packages you never chose. Any one of them could carry a known &lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;Common Vulnerabilities and Exposures: the public identifier for one specific vulnerability, in the form CVE-2026-1234. The identifier says nothing about severity.&#34;&gt;CVE&lt;/span&gt;&#xA;, and you&amp;rsquo;d have no idea.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitLab CI for Kubernetes: From Commit to Deployment</title>
      <link>https://tommeurs.nl/en/posts/gitlab-ci-kubernetes/</link>
      <pubDate>Thu, 15 May 2025 20:33:00 +0200</pubDate>
      <guid>https://tommeurs.nl/en/posts/gitlab-ci-kubernetes/</guid>
      <description>&lt;p&gt;For a long time my CI lived on someone else&amp;rsquo;s servers. Push code, wait for a hosted runner, watch the minutes tick down against a monthly quota, hope the provider doesn&amp;rsquo;t change the rules next quarter. It worked, right up until I started asking where my source code actually sat while it was being built, and who else could see it.&lt;/p&gt;&#xA;&lt;p&gt;So I moved GitLab in-house. I run it self-hosted now, on my own hardware, next to the clusters it deploys to. That&amp;rsquo;s &lt;a href=&#34;https://tommeurs.nl/en/posts/sovereign-infrastructure/&#34;&gt;sovereignty&lt;/a&gt; applied to CI/CD: my code, my builds, my artifacts, no vendor that can change pricing, deprecate a feature I depend on, or read my repositories without me knowing.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
