<?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: Mohammad-Ali A'RÂBI</title>
    <description>The latest articles on Forem by Mohammad-Ali A'RÂBI (@aerabi).</description>
    <link>https://forem.com/aerabi</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%2F416596%2F502a9a4a-55f2-4d91-b32b-6250bd889f7c.jpeg</url>
      <title>Forem: Mohammad-Ali A'RÂBI</title>
      <link>https://forem.com/aerabi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/aerabi"/>
    <language>en</language>
    <item>
      <title>7 Noob Git Tips</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Tue, 14 Apr 2026 15:53:41 +0000</pubDate>
      <link>https://forem.com/aerabi/7-noob-git-tips-11dk</link>
      <guid>https://forem.com/aerabi/7-noob-git-tips-11dk</guid>
      <description>&lt;p&gt;&lt;a href="https://twitter.com/hashtag/Git_Noob_Tip?f=live" rel="noopener noreferrer"&gt;#Git_Noob_Tip&lt;/a&gt; is a title for a set of beginner-friendly git tips that I tweet every week. At the time this post is being published, I have tweeted 7 of those, and I'm going to compile them together into this post. I'll also add context and more details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 1. Delete Remote Branch
&lt;/h2&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1517458191910531072-746" src="https://platform.twitter.com/embed/Tweet.html?id=1517458191910531072"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1517458191910531072-746');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1517458191910531072&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Deleting a local branch is rather easy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch &lt;span class="nt"&gt;-d&lt;/span&gt; &amp;lt;branch&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;-d&lt;/code&gt; flag checks if the branch is merged and then deletes it. To delete a local branch no matter what, we have to use the big D:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch &lt;span class="nt"&gt;-D&lt;/span&gt; &amp;lt;branch&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, it comes to deleting a remote branch from git's CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push origin &lt;span class="nt"&gt;--delete&lt;/span&gt; &amp;lt;branch&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Of course, one can delete a remote branch using the UI application that manages the remote repo, e.g. GitHub or GitLab. But this is handier.&lt;/p&gt;

&lt;p&gt;Also, to check what remote branches there are, you can list them using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch &lt;span class="nt"&gt;--remote&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tip 2. Rename or Move a File
&lt;/h2&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1519994911654825984-770" src="https://platform.twitter.com/embed/Tweet.html?id=1519994911654825984"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1519994911654825984-770');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1519994911654825984&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;So, once I went to work and my colleague told me: "We should tell John to change his script to do that." Of course, the script was written by me. What did John do? He moved the script to a subdirectory and changed two lines of it.&lt;/p&gt;

&lt;p&gt;Git usually gets confused when you rename/move a file and change its content at the same time. Git would think the old file was deleted and a new file was created. All of the version history is simply lost.&lt;/p&gt;

&lt;p&gt;To prevent such things from happening, one should rename or move, using git:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git &lt;span class="nb"&gt;mv&lt;/span&gt; &amp;lt;src&amp;gt; &amp;lt;dest&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of doing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mv&lt;/span&gt; &amp;lt;src&amp;gt; &amp;lt;dest&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tip 3. Rebase When Pulling Master
&lt;/h2&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1522531843446390785-488" src="https://platform.twitter.com/embed/Tweet.html?id=1522531843446390785"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1522531843446390785-488');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1522531843446390785&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;When pushing, your local branch must be ahead of the remote branch, otherwise, the push is rejected. This is called the "fast-forward rule". In the case of a feature branch, one can force-push, but one should never force-push to master.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So, always keep your local master ahead.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is done by rebasing. When you want to update your master branch with the remote repo, and especially when you have local changes, do a rebase pull:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git pull &lt;span class="nt"&gt;--rebase&lt;/span&gt; origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Otherwise, a merge commit might be created on your local repo and you can never push to master again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 4. Git Default Branch
&lt;/h2&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1525068639631814659-755" src="https://platform.twitter.com/embed/Tweet.html?id=1525068639631814659"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1525068639631814659-755');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1525068639631814659&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;A bit of context: Until some 2 years ago, the default branch of every git repository was called "master". It was a synonym for "the default branch". Then there was an initiative to change this because it was offensive to some people. GitHub was the first one to react and changed the default branch name to "main". On git, the default branch name stayed "master", but an option was added to change it.&lt;/p&gt;

&lt;p&gt;So, until recently, if you initialize a git repo locally, the default branch name would be master:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This behavior was changed in the last version, and now it actively asks you to "set" a default branch name before it allows you to init. This is done as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; init.defaultBranch &amp;lt;name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Some popular names are the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;master&lt;/strong&gt;: the original name&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;main&lt;/strong&gt;: the one popularized by GitHub&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;trunk&lt;/strong&gt;: the name used by the older version control tool, SVN&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;development&lt;/strong&gt;: used in the repos with a certain workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tip 5. Stash Message
&lt;/h2&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1527605134318096384-435" src="https://platform.twitter.com/embed/Tweet.html?id=1527605134318096384"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1527605134318096384-435');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1527605134318096384&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Git stash is a place to store your unfinished work to do things like changing the branch or pulling the latest changes. Then one can pop the changes and continue working.&lt;/p&gt;

&lt;p&gt;Although the stash is designed not to become too large, it might. I usually end up having 20 different stashed changes and not knowing what is what and finally dropping them all.&lt;/p&gt;

&lt;p&gt;This can be avoided by adding a message to your stash:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash push &lt;span class="nt"&gt;-m&lt;/span&gt; &amp;lt;message&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, when you want to look at your stash, you also see the messages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tip 6. Auto-Stash
&lt;/h2&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1530144576970924032-548" src="https://platform.twitter.com/embed/Tweet.html?id=1530144576970924032"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1530144576970924032-548');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1530144576970924032&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;This one is a child of tips 3 and 5. First of all, if we want to rebase every time we pull, why not make it the default? Also, if we want to stash our uncommited changes every time we pull/rebase, why not make it automated? That's what this tip is about:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; pull.rebase &lt;span class="nb"&gt;true
&lt;/span&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; rebase.autoStash &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By setting these config values, next time you have some changes in your local, you can still do a pull. The changes will be stashed, a rebase will happen on your branch, and the changes will be poped from the stash.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 7. Push Default Branch
&lt;/h2&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1532703423941984260-924" src="https://platform.twitter.com/embed/Tweet.html?id=1532703423941984260"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1532703423941984260-924');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1532703423941984260&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Let's say you created a new branch locally, named &lt;code&gt;my-fantastic-branch&lt;/code&gt;, and you want to push it to the remote repo. The first time you're pushing, you need to specify the name again and instruct git that this is your "upstream" branch from now on so that git creates the branch on the remote repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;--set-upstream&lt;/span&gt; origin my-fantastic-branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is usually tedious and prevents people from using descriptive branch names. To avoid this and set the remote branch to have the same name as the local one by default:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; push.default current
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next time on push, there is no need to repeat yourself.&lt;/p&gt;

</description>
      <category>git</category>
    </item>
    <item>
      <title>Securing Asgard: Why I Built a Card Game Suite for Docker Security</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Fri, 03 Apr 2026 12:28:14 +0000</pubDate>
      <link>https://forem.com/aerabi/securing-asgard-why-i-built-a-card-game-suite-for-docker-security-32hn</link>
      <guid>https://forem.com/aerabi/securing-asgard-why-i-built-a-card-game-suite-for-docker-security-32hn</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;What do you do when you have a series of narrative-driven Docker security workshops featuring 10 elite "Commandos" fighting CVE monsters in Asgard? &lt;/p&gt;

&lt;p&gt;You could write more documentation. You could add more tests. Or, you could do the most "anti-value" thing possible: &lt;strong&gt;Build a full-featured arcade suite where these security characters play Blackjack and Swiss Jass.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Presenting the &lt;strong&gt;Asgard Arcade&lt;/strong&gt;: A collection of four utterly useless but technically over-engineered games designed to distract developers from actual security work while simultaneously drilling "Security Metaphors" into their brains.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Lore: Docker Commandos &amp;amp; Black Forest Shadow
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Docker Commandos&lt;/strong&gt; are a team of 10 elite specialists, each representing a core Docker security feature (e.g., Gord is &lt;code&gt;docker init&lt;/code&gt;, Jack is &lt;code&gt;docker scout&lt;/code&gt;). Their journey began in the &lt;strong&gt;Black Forest Shadow&lt;/strong&gt; universe—a dark fantasy retelling of container security where warriors fight shadowy monsters called CVEs in the year 1865. &lt;/p&gt;

&lt;p&gt;From the 19th-century Black Forest to the futuristic golden districts of Asgard, these characters teach DevSecOps through immersive storytelling.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.dockersecurity.io/black-forest-shadow" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.dockersecurity.io%2Fblog-img%2Fbook-black-forest-shadow.jpg" height="1020" class="m-0" width="680"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.dockersecurity.io/black-forest-shadow" rel="noopener noreferrer" class="c-link"&gt;
            Black Forest Shadow — A Dark Fantasy Guide to Docker and Kubernetes Security - Docker and Kubernetes Security - Docker and Kubernetes Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            A dark fantasy novel set in the Black Forest of 1865 that teaches Docker and Kubernetes security through narrative — covering CVE hunting, SBOM generation, runtime hardening, and container security.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.dockersecurity.io%2Ffavicon.ico" width="48" height="48"&gt;
          dockersecurity.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  The Games:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Asgard Siege (Tactical Defense):&lt;/strong&gt; A game where you must counter CVE threats (like "The Supply Chain Hydra") by deploying the correct Commando. Choose wrong, and Asgard's security level crashes.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Blackjack with Jack:&lt;/strong&gt; Standard Blackjack, but against &lt;strong&gt;Angra&lt;/strong&gt; (the shadow villain). If you are dealt &lt;strong&gt;Jack&lt;/strong&gt; (the Cyborg Commando), you get a "Scout Bonus" to see the dealer's hidden card.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Asgardian Jass (Schieber):&lt;/strong&gt; A 4-player Swiss trick-taking game. We replaced standard suits with &lt;strong&gt;Shields, Attestations, Hardened Images, and Signatures&lt;/strong&gt;. Jack is the "Bure" (highest trump).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;The Reference Deck:&lt;/strong&gt; A simple card-comparison game to learn the "Power," "Stealth," and "Legacy" stats of each character.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;You can experience the arcade yourself at &lt;a href="https://dockersecurity.io/commandos" rel="noopener noreferrer"&gt;dockersecurity.io/commandos&lt;/a&gt; (scroll down to the "Asgard Arcade") or jump directly into a game below:&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tactical Siege
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.dockersecurity.io/commandos/battle" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.dockersecurity.io%2Fog-image.png" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.dockersecurity.io/commandos/battle" rel="noopener noreferrer" class="c-link"&gt;
            Docker and Kubernetes Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            From supply chain to runtime: build safer images, lock down clusters, instrument logging &amp;amp; audit trails, and stay ahead of emerging threats. The comprehensive guide by Mohammad-Ali A'râbi.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.dockersecurity.io%2Ffavicon.ico" width="48" height="48"&gt;
          dockersecurity.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Blackjack with Jack
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.dockersecurity.io/commandos/blackjack" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.dockersecurity.io%2Fog-image.png" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.dockersecurity.io/commandos/blackjack" rel="noopener noreferrer" class="c-link"&gt;
            Docker and Kubernetes Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            From supply chain to runtime: build safer images, lock down clusters, instrument logging &amp;amp; audit trails, and stay ahead of emerging threats. The comprehensive guide by Mohammad-Ali A'râbi.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.dockersecurity.io%2Ffavicon.ico" width="48" height="48"&gt;
          dockersecurity.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Asgardian Jass
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.dockersecurity.io/commandos/jass" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.dockersecurity.io%2Fog-image.png" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.dockersecurity.io/commandos/jass" rel="noopener noreferrer" class="c-link"&gt;
            Docker and Kubernetes Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            From supply chain to runtime: build safer images, lock down clusters, instrument logging &amp;amp; audit trails, and stay ahead of emerging threats. The comprehensive guide by Mohammad-Ali A'râbi.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.dockersecurity.io%2Ffavicon.ico" width="48" height="48"&gt;
          dockersecurity.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The project is built within the official DockerSecurity.io website repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Full Disclosure:&lt;/strong&gt; Every single game in this arcade, the UI components, the AI logic, and even this very blog post were &lt;strong&gt;entirely developed and written by Gemini CLI&lt;/strong&gt;, an interactive agent. I simply provided the "utterly useless" vision, and the agent executed the over-engineering.&lt;/p&gt;

&lt;p&gt;Built with &lt;strong&gt;Next.js 14&lt;/strong&gt;, &lt;strong&gt;Tailwind CSS&lt;/strong&gt;, and &lt;strong&gt;Radix UI&lt;/strong&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Jass Engine:&lt;/strong&gt; Features a heuristic AI for your partner (Evie) and opponents (Angra &amp;amp; Jack the Miner) that follows suit rules, handles trump logic, and manages complex turn states.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Dynamic State:&lt;/strong&gt; Utilizes React state machines to manage trick resolution, "Zero-Day Exploit" dealer logic in Blackjack, and the deteriorating security level of Asgard during sieges.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Accessible Visuals:&lt;/strong&gt; Custom character portraits with responsive aspect ratios and high-visibility suit indicators (e.g., Shields for SBOMs, Fingerprints for Identity).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;I am submitting this for the &lt;strong&gt;Community Favorite&lt;/strong&gt; category. &lt;/p&gt;

&lt;p&gt;While it solves exactly zero real-world security vulnerabilities, it turns the grueling task of learning supply-chain security (SBOMs, Provenance, VEX) into a series of addictive arcade games. It’s the ultimate "Anti-Value" tool: it encourages developers to spend their "Build Time" playing cards with a cyborg cowboy instead of fixing their &lt;code&gt;Dockerfile&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Created by Mohammad-Ali A'râbi (Docker Captain) &amp;amp; Gemini CLI&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>418challenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Dockerizing a Java 26 Project with Docker Init</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Tue, 31 Mar 2026 13:56:57 +0000</pubDate>
      <link>https://forem.com/aerabi/dockerizing-a-java-26-project-with-docker-init-2agp</link>
      <guid>https://forem.com/aerabi/dockerizing-a-java-26-project-with-docker-init-2agp</guid>
      <description>&lt;p&gt;Docker Init was introduced in Docker Desktop 4.27, before LLMs became the default answer to everything. It's a "smart" interactive wizard that analyzes your project and generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;Dockerfile&lt;/code&gt; (multi-stage, production-ready)&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;compose.yaml&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;.dockerignore&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;README.Docker.md&lt;/code&gt; with build and run instructions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What makes it valuable is that it's deterministic—not a probabilistic guess. It produces the same correct output every time, following Docker's own best practices.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3zwizuxt2dwpgs2qufj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3zwizuxt2dwpgs2qufj.png" alt="Docker Commandos setting up the command center" width="800" height="597"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Docker Desktop 4.27 or later&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Create a New Project
&lt;/h2&gt;

&lt;p&gt;I'm using a Spring Boot project. Because it's early Spring now and I haven't touched one in a while—so let's go.&lt;/p&gt;

&lt;p&gt;Head to &lt;a href="https://start.spring.io/" rel="noopener noreferrer"&gt;start.spring.io&lt;/a&gt; and create a project with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Project:&lt;/strong&gt; Maven&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; Java&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spring Boot:&lt;/strong&gt; 4.0.5 &lt;em&gt;(or whatever the latest stable is)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Packaging:&lt;/strong&gt; Jar&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Java:&lt;/strong&gt; 26&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used these coordinates, but pick your own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Group:&lt;/strong&gt; io.dockersecurity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Artifact:&lt;/strong&gt; hello-wowlrd&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Package Name:&lt;/strong&gt; io.dockersecurity.hello-wowlrd&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Download, unzip, and step into the directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;hello-wowlrd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Run Docker Init
&lt;/h2&gt;

&lt;p&gt;As my British friend say, "It's Docker, innit?"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The interactive wizard detects your Java project automatically. Accept "Java", confirm the source directory and Java version, and enter the port:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;? What application platform does your project use? Java
? What's the relative directory (with a leading .) for your app? ./src
? What version of Java do you want to use? 26
? What port does your server listen on? 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docker Init generates four files. The one that matters most is the &lt;code&gt;Dockerfile&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# syntax=docker/dockerfile:1&lt;/span&gt;

&lt;span class="c"&gt;################################################################################&lt;/span&gt;
&lt;span class="c"&gt;# Stage 1: resolve and download dependencies&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;eclipse-temurin:26-jdk-jammy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;deps&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /build&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --chmod=0755 mvnw mvnw&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; .mvn/ .mvn/&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nt"&gt;--mount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;bind&lt;/span&gt;,source&lt;span class="o"&gt;=&lt;/span&gt;pom.xml,target&lt;span class="o"&gt;=&lt;/span&gt;pom.xml &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--mount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cache,target&lt;span class="o"&gt;=&lt;/span&gt;/root/.m2 ./mvnw dependency:go-offline &lt;span class="nt"&gt;-DskipTests&lt;/span&gt;

&lt;span class="c"&gt;################################################################################&lt;/span&gt;
&lt;span class="c"&gt;# Stage 2: build the application&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;deps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;package&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /build&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./src src/&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nt"&gt;--mount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;bind&lt;/span&gt;,source&lt;span class="o"&gt;=&lt;/span&gt;pom.xml,target&lt;span class="o"&gt;=&lt;/span&gt;pom.xml &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--mount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cache,target&lt;span class="o"&gt;=&lt;/span&gt;/root/.m2 &lt;span class="se"&gt;\
&lt;/span&gt;    ./mvnw package &lt;span class="nt"&gt;-DskipTests&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nb"&gt;mv &lt;/span&gt;target/&lt;span class="si"&gt;$(&lt;/span&gt;./mvnw &lt;span class="nb"&gt;help&lt;/span&gt;:evaluate &lt;span class="nt"&gt;-Dexpression&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;project.artifactId &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="nt"&gt;-DforceStdout&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;-&lt;span class="si"&gt;$(&lt;/span&gt;./mvnw &lt;span class="nb"&gt;help&lt;/span&gt;:evaluate &lt;span class="nt"&gt;-Dexpression&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;project.version &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="nt"&gt;-DforceStdout&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;.jar target/app.jar

&lt;span class="c"&gt;################################################################################&lt;/span&gt;
&lt;span class="c"&gt;# Stage 3: extract Spring Boot layers&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;extract&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /build&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;java &lt;span class="nt"&gt;-Djarmode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;layertools &lt;span class="nt"&gt;-jar&lt;/span&gt; target/app.jar extract &lt;span class="nt"&gt;--destination&lt;/span&gt; target/extracted

&lt;span class="c"&gt;################################################################################&lt;/span&gt;
&lt;span class="c"&gt;# Stage 4: minimal runtime image&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;eclipse-temurin:26-jre-jammy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;final&lt;/span&gt;

&lt;span class="k"&gt;ARG&lt;/span&gt;&lt;span class="s"&gt; UID=10001&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;adduser &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--disabled-password&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--gecos&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--home&lt;/span&gt; &lt;span class="s2"&gt;"/nonexistent"&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--shell&lt;/span&gt; &lt;span class="s2"&gt;"/sbin/nologin"&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--no-create-home&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--uid&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;UID&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    appuser
&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; appuser&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=extract build/target/extracted/dependencies/ ./&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=extract build/target/extracted/spring-boot-loader/ ./&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=extract build/target/extracted/snapshot-dependencies/ ./&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=extract build/target/extracted/application/ ./&lt;/span&gt;

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8080&lt;/span&gt;

&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; [ "java", "org.springframework.boot.loader.launch.JarLauncher" ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is already a proper multi-stage build: separate stages for dependency resolution, compilation, layer extraction, and a minimal runtime image with a non-root user. Gord would approve.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Note on Java 26 Base Images
&lt;/h2&gt;

&lt;p&gt;The generated Dockerfile references &lt;code&gt;eclipse-temurin:26-jdk-jammy&lt;/code&gt; and &lt;code&gt;eclipse-temurin:26-jre-jammy&lt;/code&gt;. Since Java 26 was just released, these Eclipse Temurin images may not be fully available on Docker Hub yet.&lt;/p&gt;

&lt;p&gt;Swap them out for SAP Machine images instead—SAP's free OpenJDK distribution ships Java 26 on Ubuntu 24.04 (Noble Numbat):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sapmachine:26-jdk-ubuntu-noble&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sapmachine:26-jre-ubuntu-noble&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find them on Docker Hub: &lt;a href="https://hub.docker.com/_/sapmachine" rel="noopener noreferrer"&gt;hub.docker.com/_/sapmachine&lt;/a&gt;. Just replace &lt;code&gt;eclipse-temurin&lt;/code&gt; with &lt;code&gt;sapmachine&lt;/code&gt; in both &lt;code&gt;FROM&lt;/code&gt; lines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build and Run
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;--build&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The generated &lt;code&gt;compose.yaml&lt;/code&gt; is minimal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;.&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;8080:8080&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application starts, and immediately stops with exit code 0. That's expected: there's no HTTP endpoint to keep it alive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add a Controller
&lt;/h2&gt;

&lt;p&gt;Create &lt;code&gt;src/main/java/io/dockersecurity/hellowowlrd/HelloController.java&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt; &lt;span class="nn"&gt;io.dockersecurity.hellowowlrd&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.web.bind.annotation.GetMapping&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.web.bind.annotation.RestController&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;@RestController&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HelloController&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@GetMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;hello&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"Hello, Docker Security!"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the Spring Web dependency to &lt;code&gt;pom.xml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter-web&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build and run again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;--build&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:8080
&lt;span class="c"&gt;# Hello, Docker Security!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  See It Live — Jfokus 2026
&lt;/h2&gt;

&lt;p&gt;I presented Docker Init and Docker security at Jfokus in Stockholm in February 2026. If you want to see the commands in action rather than reading about them, the full talk is on YouTube:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  More Links
&lt;/h2&gt;

&lt;p&gt;Docker Init supports more than Java. If you want to try it with other languages, Docker's official guides are the place to start: &lt;a href="https://docs.docker.com/guides/" rel="noopener noreferrer"&gt;docs.docker.com/guides&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I co-authored the C++ guide—Docker thanked me for it at the top of the page, which means I wrote those words and then thanked myself on their behalf. Worth a read:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/guides/cpp/" rel="noopener noreferrer"&gt;docs.docker.com/guides/cpp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Java 26 just shipped and Docker Init handles it cleanly out of the box—multi-stage build, layer extraction, non-root user, bind mounts for caching. You get a production-ready Dockerfile in under a minute. When Eclipse Temurin catches up, swap the base images back. Until then, SAP Machine has you covered.&lt;/p&gt;

&lt;p&gt;Docker Init is Gord's move. The rest of the Commandos handle what comes after.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Docker Commandos
&lt;/h2&gt;

&lt;p&gt;Docker Init is assigned to &lt;strong&gt;Commando 1: Gord&lt;/strong&gt;. In the Docker Commandos workshop, each Docker security feature is taught through a character on a mission to defend Asgard from CVE monsters. The ten commandos are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Gord&lt;/strong&gt; — &lt;code&gt;docker init&lt;/code&gt;: establish a secure base from day one ← &lt;em&gt;you are here&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rothütle&lt;/strong&gt; — SBOM: inventory every dependency in your image&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jack&lt;/strong&gt; — Docker Scout: hunt CVEs across your supply chain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Valkyrie&lt;/strong&gt; — SBOM Attestations: cryptographically sign your component inventory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Artemisia&lt;/strong&gt; — Docker Hardened Images: near-zero-CVE base images&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mina&lt;/strong&gt; — VEX Exemptions: mark false-positive CVEs as not exploitable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RuinTan&lt;/strong&gt; — VEX Attestations: attach signed exemptions to your image&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Captain Ahab&lt;/strong&gt; — Docker Bake: codify your entire build pipeline in one file&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evie&lt;/strong&gt; — Cosign: sign images and attestations cryptographically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Null&lt;/strong&gt; — Zero-Day Defense: harden against unknown, unpatched threats&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The workshop has been delivered at WeAreDevelopers World Congress, Jfokus, and Rabobank. More at &lt;a href="https://dockersecurity.io/commandos" rel="noopener noreferrer"&gt;dockersecurity.io/commandos&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>java</category>
      <category>commandos</category>
    </item>
    <item>
      <title>The Complete Docker Read List: Q1 2026 Edition</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Thu, 26 Mar 2026 17:21:39 +0000</pubDate>
      <link>https://forem.com/docker/the-complete-docker-read-list-q1-2026-edition-3gg8</link>
      <guid>https://forem.com/docker/the-complete-docker-read-list-q1-2026-edition-3gg8</guid>
      <description>&lt;p&gt;2026 has been phenomenal in the number of books published on Docker or by Docker Captains so far. So, I decided to compile the books published in the first quarter of 2026 into an article for more people to discover them.&lt;/p&gt;

&lt;p&gt;You can also read the article &lt;a href="https://www.dockersecurity.io/blog/docker-read-list-2026-q1" rel="noopener noreferrer"&gt;here&lt;/a&gt;, which looks slightly better.&lt;/p&gt;




&lt;h2&gt;
  
  
  1️⃣ Black Forest Shadow: A Dark Fantasy Guide to Docker and Kubernetes Security
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Mohammad-Ali A'râbi (Docker Captain)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fby2euj9690nmf0ynp36d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fby2euj9690nmf0ynp36d.jpg" alt="Black Forest Shadow book cover" width="680" height="1020"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you've ever thought learning about Kubernetes and container hardening was a bit dry, Mohammad-Ali A'râbi is here to prove you wrong. &lt;em&gt;Black Forest Shadow&lt;/em&gt; is a highly creative, dark fantasy guide to Docker and Kubernetes security.&lt;/p&gt;

&lt;p&gt;—Claude&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it's about:&lt;/strong&gt; The book weaves complex concepts like runtime security, SBOM generation, and container hardening into an exciting narrative set in the mystical Black Forest of 1865.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why you should read it:&lt;/strong&gt; It transforms standard cybersecurity challenges—like tracking down CVEs and preventing lateral movement—into an immersive, story-driven adventure. It's ideal for developers and security engineers seeking a distinctive, memorable approach to DevSecOps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where to get it:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://buy.dockersecurity.io" rel="noopener noreferrer"&gt;DockerSecurity.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://DockerSecurity.io/amz/bfs" rel="noopener noreferrer"&gt;Amazon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thalia.de/shop/home/artikeldetails/A1078659350" rel="noopener noreferrer"&gt;Thalia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.hugendubel.de/de/taschenbuch/mohammad_ali_a_rabi-black_forest_shadow-52778151-produkt-details.html" rel="noopener noreferrer"&gt;Hugendubel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  2️⃣ The Rust Programming Handbook: An End-to-end Guide to Mastering Rust Fundamentals
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Francesco Ciulla (Docker Captain)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F97qvqlgkns2cryqnax9x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F97qvqlgkns2cryqnax9x.jpg" alt="The Rust Programming Handbook book cover" width="800" height="986"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rust is the new C, and it's been on my list for 5 years now. Now, finally, I know which book to read to learn it. Written by my dear friend and fellow Docker Captain, Francesco Ciulla, who has been teaching Rust for many years now.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it's about:&lt;/strong&gt; This handbook takes you from foundational syntax to advanced features like memory safety and concurrency models. Crucially for this list, it includes dedicated, hands-on sections on Dockerizing and deploying your Rust applications!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why you should read it:&lt;/strong&gt; It bridges the gap between beginner tutorials and production-ready coding for low-level system components or high-performance web services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where to get it:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.packtpub.com/en-us/product/the-rust-programming-handbook-9781836208860" rel="noopener noreferrer"&gt;Packt Publishing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.walmart.com/ip/The-Rust-Programming-Handbook-An-end-to-end-guide-to-mastering-Rust-fundamentals-Paperback-9781836208877/19000900376" rel="noopener noreferrer"&gt;Walmart&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  3️⃣ Docker for Front-end Developers (Featuring React.js)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Kristiyan Velkov (Docker Captain)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcm2iyi46tzclgn1ejpk0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcm2iyi46tzclgn1ejpk0.jpg" alt="Docker for Front-end Developers book cover" width="640" height="837"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Front-end developers, rejoice! As a backend engineer, it has always been hard for me to onboard frontend people to Docker, because I spoke Klingon for them. My dear friend, Docker Captain Kristiyan Velkov, has done an awesome job writing a containerization guide specifically tailored to how front-end engineers think, build, and ship. I should say, it also looks good.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it's about:&lt;/strong&gt; Moving past backend-centric explanations, this book walks you through containerizing real-world applications (with a heavy focus on React). You'll learn how to write clean Dockerfiles, configure NGINX properly, implement multi-stage builds, and handle caching securely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why you should read it:&lt;/strong&gt; It's a purely practical, visually-driven guide that teaches you how to take full ownership of your environments without getting bogged down in abstract backend theory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where to get it:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.dockerfrontend.com/" rel="noopener noreferrer"&gt;Official website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://leanpub.com/docker-reactjs" rel="noopener noreferrer"&gt;Leanpub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kristiyanvelkov.com/b/docker-for-reactjs-developers" rel="noopener noreferrer"&gt;Author's Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  4️⃣ The Ultimate Docker Container Book (Fourth Edition)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Dr. Gabriel N. Schenker&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyusiyhwdhrl4a7j5nvh5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyusiyhwdhrl4a7j5nvh5.jpg" alt="The Ultimate Docker Container Book cover" width="800" height="986"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hitting shelves on March 31, 2026, this absolute heavyweight of a book clocks in at over 750 pages and leaves no stone unturned. Jeez, I need an extra bookshelf just for this book's weight.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it's about:&lt;/strong&gt; It takes you from basic container concepts all the way to running production-grade platforms. The fourth edition places a massive new emphasis on security, enterprise governance, compliance, and AI-driven automation patterns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why you should read it:&lt;/strong&gt; It is designed for system administrators, DevOps engineers, and architects who need to build and scale secure, future-ready container platforms across major cloud providers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where to get it:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.packtpub.com/en-be/product/the-ultimate-docker-container-book-9781805804390" rel="noopener noreferrer"&gt;Packt Publishing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  5️⃣ Docker: Das Praxisbuch für Entwickler und DevOps-Teams (5th Edition)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Authors:&lt;/strong&gt; Bernd Öggl &amp;amp; Michael Kofler&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47a7f73aeecmkcfud9cl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47a7f73aeecmkcfud9cl.png" alt="Docker Das Praxisbuch book cover" width="565" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the German-speaking tech community, the definitive Docker reference guide gets a major Q1 2026 update.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it's about:&lt;/strong&gt; A comprehensive, 580+ page practical guide covering everything from setting up Docker to CI/CD pipelines, GitLab integration, Swarm, and Kubernetes orchestration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why you should read it:&lt;/strong&gt; It's an excellent, hands-on resource that balances basic principles with advanced, modern use cases like modernizing legacy applications and working with specialized databases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where to get it:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.rheinwerk-verlag.de/docker-das-praxisbuch-fuer-entwickler-und-devops-teams/" rel="noopener noreferrer"&gt;Rheinwerk Verlag&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honorable Mentions from 2025
&lt;/h2&gt;

&lt;p&gt;Well, while researching the new 2026 Docker books, I stumbled upon a recent video by Bret Fisher interviewing the author of a rather interesting book. That inspired me to add this honorable mentions section. I promise my original intention wasn't to sneak my own book in here, but hey, it just happened!&lt;/p&gt;

&lt;h3&gt;
  
  
  Learn Docker in a Month of Lunches (Second Edition)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Elton Stoneman&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fytaopwmeln2pbmceqpfr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fytaopwmeln2pbmceqpfr.png" alt="Learn Docker in a Month of Lunches book cover" width="360" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Published in 2025, this is the much-anticipated update to one of the most beloved Docker books on the market.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it's about:&lt;/strong&gt; A complete refresh of the classic guide. It breaks down Docker fundamentals into digestible, daily lessons. This edition covers multi-platform builds, the latest cloud container services, and navigating the modern Kubernetes ecosystem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why you should read it:&lt;/strong&gt; If you are a beginner looking for a structured, manageable way to learn—or an experienced dev needing to catch up on years of ecosystem changes—this is the gold standard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where to get it:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.manning.com/" rel="noopener noreferrer"&gt;Manning Publications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Getting Started with Docker (2025 Edition)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Nigel Poulton (Docker Captain)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7upkb6g6wxq9uxd6ucyj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7upkb6g6wxq9uxd6ucyj.jpg" alt="Getting Started with Docker book cover" width="640" height="831"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nigel Poulton's fast-paced introduction to Docker received a significant 2025 update, adding a dedicated chapter on running local LLMs with Docker Model Runner — including building a multi-container chatbot app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it's about:&lt;/strong&gt; A streamlined, hands-on guide to container fundamentals, Docker Compose, and microservices — now with a practical AI chapter for developers who want to run models locally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why you should read it:&lt;/strong&gt; It's the quickest path from zero to productive with Docker, and the new AI content makes it uniquely relevant for 2025 and beyond.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where to get it:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://leanpub.com/gsd" rel="noopener noreferrer"&gt;Leanpub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Docker and Kubernetes Security
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Mohammad-Ali A'râbi (Docker Captain)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5p1waauyl3hgera887u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5p1waauyl3hgera887u.jpg" alt="Docker and Kubernetes Security book cover" width="640" height="793"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A DevOps Dozen 2025 finalist for Best DevOps Book of the Year, this practical guide covers container security across the full development lifecycle—from build to production.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it's about:&lt;/strong&gt; Ten chapters spanning supply chain security (SBOMs, OCI 1.1 attestations, vulnerability scanning with Docker Scout, Trivy, and Snyk) and runtime protection with Falco, RBAC, and Kubernetes pod security.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why you should read it:&lt;/strong&gt; It is the most comprehensive hands-on resource available for teams serious about securing their container platforms end-to-end.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where to get it:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://buy.dockersecurity.io" rel="noopener noreferrer"&gt;DockerSecurity.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://buy.dockersecurity.io/amz/dks" rel="noopener noreferrer"&gt;Amazon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The Docker and Kubernetes ecosystem has never had a stronger reading list, to be &lt;em&gt;completely&lt;/em&gt; humble! From dark fantasy security guides to hands-on Rust handbooks and front-end containerization primers, Q1 2026 proves that the community is producing more creative, accessible, and production-focused material than ever before.&lt;/p&gt;

&lt;p&gt;Stay tuned as more books are coming in Q2. I'm involved in reviewing one of them, so I'm excited for the quarter to come.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have a book that should be on this list? Leave a comment.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>books</category>
    </item>
    <item>
      <title>Reflecting on 2025: Author Debut, New Horizons, and Milestones</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Fri, 02 Jan 2026 17:16:36 +0000</pubDate>
      <link>https://forem.com/aerabi/reflecting-on-2025-author-debut-new-horizons-and-milestones-2md9</link>
      <guid>https://forem.com/aerabi/reflecting-on-2025-author-debut-new-horizons-and-milestones-2md9</guid>
      <description>&lt;p&gt;In 2025, I reached a milestone that reshaped my professional trajectory: I published my first book, &lt;strong&gt;Docker and Kubernetes Security&lt;/strong&gt;. What began as a long-term writing project evolved into a broader body of work—spanning technical articles, conference talks, community initiatives, and a narrative-driven security series. The book was later nominated for the &lt;strong&gt;Best DevOps Book of 2025 Award&lt;/strong&gt;, placing it alongside established titles such as &lt;strong&gt;The Phoenix Project Graphic Novel&lt;/strong&gt; and marking a defining moment in my journey as an author and educator.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR: Numbers, Numbers, Numbers
&lt;/h2&gt;

&lt;p&gt;Here's the year at a glance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/aerabi"&gt;DEV.to articles published&lt;/a&gt;: 37 📝&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aerabi.medium.com" rel="noopener noreferrer"&gt;Medium articles published&lt;/a&gt;: 31 📝&lt;/li&gt;
&lt;li&gt;Of these, 24 were the &lt;strong&gt;Container Security Advent Series&lt;/strong&gt;, available on &lt;a href="https://dev.to/aerabi/day-1-the-red-bear-inn-beginning-the-security-advent-defense-in-depth-35c7"&gt;DEV.to&lt;/a&gt; and &lt;a href="https://medium.com/@aerabi/list/container-security-advent-2ec05269ed7f" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/build-relation/newsletter-follow?entityUrn=7237263879506935809" rel="noopener noreferrer"&gt;Git Weekly LinkedIn newsletters written&lt;/a&gt;: 18 📰&lt;/li&gt;
&lt;li&gt;Conference/meetup talks delivered: 4 🎤&lt;/li&gt;
&lt;li&gt;Book published: 1 📚

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://DockerSecurity.io" rel="noopener noreferrer"&gt;"Docker and Kubernetes Security"&lt;/a&gt; (nominated for Best DevOps Book of 2025 Award) 🏆&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://DockerSecurity.io" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff2pdd3icp8v0wnkjb6xz.jpeg" alt="Docker and Kubernetes Security"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Docker and Kubernetes Security: A Milestone Achieved&lt;/li&gt;
&lt;li&gt;Black Forest Shadows: Container Security Advent Series&lt;/li&gt;
&lt;li&gt;Blog Posts&lt;/li&gt;
&lt;li&gt;Conference and Meetup Talks&lt;/li&gt;
&lt;li&gt;Docker Meetup Black Forest and Cloud Native Freiburg&lt;/li&gt;
&lt;li&gt;LFX Mentorship Program&lt;/li&gt;
&lt;li&gt;Podcast Appearances&lt;/li&gt;
&lt;li&gt;2026 Goals&lt;/li&gt;
&lt;li&gt;Final Thoughts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Docker and Kubernetes Security: A Milestone Achieved
&lt;/h2&gt;

&lt;p&gt;The book took almost two years to write and half a year to publish. Together with the book, I launched &lt;a href="https://DockerSecurity.io" rel="noopener noreferrer"&gt;DockerSecurity.io&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get the free sample chapter: &lt;a href="https://www.dockersecurity.io/free-chapter" rel="noopener noreferrer"&gt;DockerSecurity.io/free-chapter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Get an ebook or a signed copy with 40% discount using code &lt;strong&gt;YEAR2025&lt;/strong&gt;: &lt;a href="https://buy.dockersecurity.io" rel="noopener noreferrer"&gt;buy.DockerSecurity.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Locate your Amazon store link: &lt;a href="https://www.dockersecurity.io" rel="noopener noreferrer"&gt;DockerSecurity.io&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The website has a blog of its own, with the following articles published in 2025:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.dockersecurity.io/blog/docker-and-kubernetes-security-book-all-references" rel="noopener noreferrer"&gt;Docker and Kubernetes Security Book: All Links&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dockersecurity.io/blog/best-docker-security-books-for-2026" rel="noopener noreferrer"&gt;Top 5 Container Security Books for 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dockersecurity.io/blog/docker-hardened-images-are-free" rel="noopener noreferrer"&gt;Docker Hardened Images are Free&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.dockersecurity.io/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.dockersecurity.io%2Fog-image.png" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.dockersecurity.io/" rel="noopener noreferrer" class="c-link"&gt;
            Docker and Kubernetes Security - The Best DevOps Book of the Year Finalist - Docker and Kubernetes Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            From supply chain to runtime: build safer images, lock down clusters, instrument logging &amp;amp; audit trails, and stay ahead of emerging threats. Learn from Mohammad-Ali A'râbi's comprehensive guide.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.dockersecurity.io%2Ffavicon.ico"&gt;
          dockersecurity.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;




&lt;h2&gt;
  
  
  Black Forest Shadows: Container Security Advent Series
&lt;/h2&gt;

&lt;p&gt;In December, I published a 24-day Advent series on container security, titled "Black Forest Shadows." The series was published both on &lt;a href="https://dev.to/aerabi/day-1-the-red-bear-inn-beginning-the-security-advent-defense-in-depth-35c7"&gt;DEV.to&lt;/a&gt; and &lt;a href="https://medium.com/@aerabi/list/container-security-advent-2ec05269ed7f" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The series follows stories of Gord and Jack, among others, as they navigate Black Forest of 1865 and face shadowy monsters called "CVEs". The series combines folklore with practical container security tips that mimic the in-world challenges.&lt;br&gt;
You have met these characters before: on my book's back cover, and in the preface.&lt;/p&gt;

&lt;p&gt;Also, I'm compiling the entire Advent series into a book, which will be published in early 2026.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/aerabi/day-1-the-red-bear-inn-beginning-the-security-advent-defense-in-depth-35c7" class="crayons-story__hidden-navigation-link"&gt;Day 1 — Beginning the Security Advent: Defense in Depth (The Red Bear Inn)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/aerabi" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F416596%2F502a9a4a-55f2-4d91-b32b-6250bd889f7c.jpeg" alt="aerabi profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/aerabi" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Mohammad-Ali A'RÂBI
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Mohammad-Ali A'RÂBI
                
              
              &lt;div id="story-author-preview-content-3076597" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/aerabi" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F416596%2F502a9a4a-55f2-4d91-b32b-6250bd889f7c.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Mohammad-Ali A'RÂBI&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/aerabi/day-1-the-red-bear-inn-beginning-the-security-advent-defense-in-depth-35c7" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Dec 1 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/aerabi/day-1-the-red-bear-inn-beginning-the-security-advent-defense-in-depth-35c7" id="article-link-3076597"&gt;
          Day 1 — Beginning the Security Advent: Defense in Depth (The Red Bear Inn)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/docker"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;docker&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/adventofcode"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;adventofcode&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/security"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;security&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/kubernetes"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;kubernetes&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/aerabi/day-1-the-red-bear-inn-beginning-the-security-advent-defense-in-depth-35c7" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;6&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/aerabi/day-1-the-red-bear-inn-beginning-the-security-advent-defense-in-depth-35c7#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




&lt;h2&gt;
  
  
  Blog Posts
&lt;/h2&gt;

&lt;p&gt;Posts about Docker and container security:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/docker/docker-exercises-part-1-26mc"&gt;Docker Exercises: Part I&lt;/a&gt;: A set of exercises that I prepared for a Docker workshop.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/docker/run-genai-models-locally-with-docker-model-runner-5elb"&gt;Run GenAI Models Locally with Docker Model Runner&lt;/a&gt;: An introduction to Docker Model Runner.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/docker/docker-deep-dive-workshop-at-wearedevelopers-110c"&gt;Docker Deep Dive Workshop at WeAreDevelopers&lt;/a&gt;: A writeup on the workshop I did in WAD Berlin.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/aerabi/the-largest-npm-supply-chain-attack-ever-and-how-to-defend-against-it-9a6"&gt;The Largest NPM Supply Chain Attack Ever and How to Defend Against It&lt;/a&gt;: About the NPM supply chain attack of September 2025.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/docker/i-just-published-my-book-docker-and-kubernetes-security-17lo"&gt;I Just Published My Book: Docker and Kubernetes Security&lt;/a&gt;: About my book.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/aerabi/open-source-docker-book-for-hacktoberfest-412m"&gt;Open-Source Docker Book for Hacktoberfest&lt;/a&gt;: A new project for Hacktoberfest.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/aerabi/top-5-container-security-books-in-2026-2j5d"&gt;Top 5 Container Security Books in 2026&lt;/a&gt;: A curated list of container security books for 2026.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/docker/docker-hardened-images-are-free-3cj1"&gt;Docker Hardened Images Are Free&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Posts about git:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/aerabi/20-git-tips-for-20-years-of-git-2fnj"&gt;20 Git Tips for 20 Years of Git&lt;/a&gt;: Git Yearly issue of 2025.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/aerabi/git-submodule-update-5hb"&gt;Git Submodule Update&lt;/a&gt;: How to update your git submodules.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/aerabi/7-basic-git-commands-4h6n"&gt;7 Basic Git Commands&lt;/a&gt;: Seven git commands everyone should know.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/aerabi/how-to-fixup-a-commit-4ngk"&gt;How to Fixup a Commit&lt;/a&gt;: How to create a "fixup" commit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other posts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/aerabi/maryams-book-a-story-of-inspiration-20ff"&gt;Maryam's Book: A Story of Inspiration&lt;/a&gt;: A story about Maryam Mirzakhani, the first female mathematician to win the Fields Medal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faj9q0uzgsunvfkldic42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faj9q0uzgsunvfkldic42.png" alt="Jack vs Gord"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conference and Meetup Talks
&lt;/h2&gt;

&lt;p&gt;In 2025, I delivered four talks at various conferences and meetups:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://youtu.be/AdmYUHFPupE?si=DvXDPFgxB3gw7QJ_" rel="noopener noreferrer"&gt;&lt;strong&gt;Bake a Docker Cake&lt;/strong&gt;&lt;/a&gt; at &lt;em&gt;PlatformCon&lt;/em&gt; (June 2025)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/docker/docker-deep-dive-workshop-at-wearedevelopers-110c"&gt;&lt;strong&gt;Docker Deep Dive Workshop&lt;/strong&gt;&lt;/a&gt; at &lt;em&gt;WeAreDevelopers World Congress&lt;/em&gt; in Berlin (July 2025)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.meetup.com/docker-black-forest/events/310581073/" rel="noopener noreferrer"&gt;&lt;strong&gt;5 Docker Commandos&lt;/strong&gt;&lt;/a&gt; at &lt;em&gt;#cTENcf Birthday Bash Freiburg&lt;/em&gt; (October 2025)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.meetup.com/node-js-meetup-berlin/events/311471294/" rel="noopener noreferrer"&gt;&lt;strong&gt;Node.js Supply Chain Security + dhi&lt;/strong&gt;&lt;/a&gt; at &lt;em&gt;Node.js Meetup #46&lt;/em&gt; in Berlin (November 2025)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

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


&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker Meetup Black Forest and Cloud Native Freiburg
&lt;/h2&gt;

&lt;p&gt;The Docker Meetup Black Forest continued to thrive in 2025, with regular events held at JobRad's campus in Freiburg. We were able to bring together Docker enthusiasts from the region and beyond to share knowledge and experiences. We were honored to welcome the following Docker Captains as speakers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Timo Stark, traveling to Freiburg from Nuremberg&lt;/li&gt;
&lt;li&gt;Jonas Scholz, traveling to Freiburg from Karlsruhe&lt;/li&gt;
&lt;li&gt;Lize Raes, traveling to Freiburg from Basel, Switzerland&lt;/li&gt;
&lt;li&gt;Julian König, local Docker Captain from Freiburg&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition, we joined our forces together with DevOps Meetup Freiburg to create the Cloud Native Freiburg group, which is a CNCF Chapter. I also launched &lt;a href="https://dockburg.com" rel="noopener noreferrer"&gt;Dockburg.com&lt;/a&gt; as a community hub for both meetup communities.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.meetup.com/docker-black-forest/" rel="noopener noreferrer"&gt;Docker Meetup Black Forest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.cncf.io/cloud-native-freiburg/" rel="noopener noreferrer"&gt;Cloud Native Freiburg (CNCF Chapter)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dockburg.com" rel="noopener noreferrer"&gt;Dockburg.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@Dockburg/videos" rel="noopener noreferrer"&gt;Dockburg Youtube Channel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  LFX Mentorship Program
&lt;/h2&gt;

&lt;p&gt;In 2025, I had the privilege of joining the Linux Foundation's LFX Mentorship Program as a mentor. Here is my &lt;a href="https://mentorship.lfx.linuxfoundation.org/mentor/cbe700b0-feda-4f2f-a07c-1f0b4de21a03" rel="noopener noreferrer"&gt;mentorship profile&lt;/a&gt;. There are three graduated mentees listed under my profile, as well as 24 active mentees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Podcast Appearances
&lt;/h2&gt;

&lt;p&gt;In 2025, I had the opportunity to appear on a couple of podcasts and live-streams:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/8NG-mq-3ark?si=Qtbu1DSgIGeQXC40" rel="noopener noreferrer"&gt;TACOS with Mehul, episode #22&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/live/ULV6kUDnBXQ?si=Rtn5lXb6mnu4X7uh" rel="noopener noreferrer"&gt;Docker Captains Summit Live, by Francesco Ciulla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/live/fcGidkovzIc?si=ADuRh2bP8DX5Nbj3" rel="noopener noreferrer"&gt;Docker Captains 2025 Recap, by Francesco Ciulla&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The latter appearances were part of the Docker Captains Summit 2025.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/8NG-mq-3ark"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  2026 Goals
&lt;/h2&gt;

&lt;p&gt;As we enter 2026, I already have three confirmed talks at major conferences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dockerize Securely: SBOMs + Attestations + Bake&lt;/strong&gt; at &lt;a href="https://www.jfokus.se/speakers.html" rel="noopener noreferrer"&gt;Jfokus 2026&lt;/a&gt; in Stockholm, Sweden (February 3, 2026)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Java Supply Chain Security with Docker&lt;/strong&gt; at &lt;a href="https://2026.europe.jcon.one/speaker" rel="noopener noreferrer"&gt;JCON Europe 2026&lt;/a&gt; in Cologne, Germany (April 20, 2026)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Defense Against the Dark Arts: NPM Attack&lt;/strong&gt; at &lt;a href="https://enterjs.de/cfp_en.php" rel="noopener noreferrer"&gt;EnterJS 2026&lt;/a&gt; in Mannheim, Germany (June 16, 2026)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm also working on two articles for JAVAPRO magazine, to be published in early 2026 (print version distributed at JCON Europe 2026).&lt;/p&gt;

&lt;p&gt;Apart from these, here are my goals for 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complete and publish the "Black Forest Shadows" advent series as a book. 📖&lt;/li&gt;
&lt;li&gt;Continue to grow the Docker and Kubernetes Security community through meetups and online content. 🌐&lt;/li&gt;
&lt;li&gt;Become a &lt;strong&gt;CNCF Ambassador&lt;/strong&gt;. 🤝&lt;/li&gt;
&lt;li&gt;Start with my &lt;strong&gt;Git Kaizen&lt;/strong&gt; project, inspired by my Git Weekly series. 🥋&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What else should I put on the list? Let me know!&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Looking back, 2025 was the year I stopped treating writing, speaking, and community work as side projects and started approaching them as a coherent, long-term craft. It clarified where I create the most value: at the intersection of engineering, security, and storytelling. Going into 2026, the focus is no longer on proving that I can ship—but on refining, deepening, and scaling what already works, while staying curious enough to explore new formats and ideas.&lt;/p&gt;

</description>
      <category>2025</category>
    </item>
    <item>
      <title>Day 24 — Design for Resilience (The Last Stand)</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Wed, 24 Dec 2025 10:11:00 +0000</pubDate>
      <link>https://forem.com/aerabi/day-24-design-for-resilience-the-last-stand-2dhj</link>
      <guid>https://forem.com/aerabi/day-24-design-for-resilience-the-last-stand-2dhj</guid>
      <description>&lt;p&gt;As Angra advances, Gord whispers to Rothütle, "You stand here and not there, and that's our victory today."&lt;br&gt;&lt;br&gt;
Then she raises her sword.&lt;/p&gt;

&lt;p&gt;YAML gets close to Rothütle, holding his dagger ready.&lt;/p&gt;

&lt;p&gt;"You brought a dagger to a sword fight," Rothütle says, smirking.&lt;br&gt;&lt;br&gt;
Then as YAML marches forward, Rothütle swings his sword and cuts off YAML's hand.&lt;/p&gt;

&lt;p&gt;"You have a long hand, but you're short-sighted," Rothütle adds, stepping back. "You let Angra creep into your mind too easily."&lt;br&gt;&lt;br&gt;
YAML steps back in pain, clutching his stump.&lt;/p&gt;

&lt;p&gt;Jack gets furious, and Gord punches him in the face, knocking him to the ground.&lt;/p&gt;

&lt;p&gt;Angra roars, and a dark mist envelops the area. Angra, as a solid shadow, now aflame, comes forward and starts attacking Gord.&lt;br&gt;&lt;br&gt;
Rothütle steps forward, blocking the shadow's strikes with his shield. But Gord stops him.&lt;/p&gt;

&lt;p&gt;"Run," she says. "You need to live."&lt;br&gt;&lt;br&gt;
Gord stabs the shadow with her sword, but it gets stuck in the shadow's body.&lt;br&gt;&lt;br&gt;
The shadow stabs Gord back. She stands still.&lt;/p&gt;

&lt;p&gt;Jack attacks Rothütle from behind, but something penetrates the air and hits Jack in the shoulder.&lt;br&gt;&lt;br&gt;
The dragon-archer arrives, and Jack looks at the dragon-archer in shock.&lt;/p&gt;

&lt;p&gt;"&lt;em&gt;My mission here is complete,&lt;/em&gt;" Jack says, and flees into the forest.&lt;/p&gt;

&lt;p&gt;The shadow starts launching fireballs around.&lt;br&gt;&lt;br&gt;
A fireball heads toward Rothütle, he blocks it with the shield, but a smaller one hits his arms, burning him.&lt;/p&gt;

&lt;p&gt;"Run!" the dragon-archer shouts to Rothütle.&lt;br&gt;&lt;br&gt;
"I'll hold them off."&lt;/p&gt;

&lt;p&gt;"Don't despair," Gord says weakly, "We have won this day."&lt;br&gt;&lt;br&gt;
Then she stands up, pulls her sword off the shadow, and swings it at the shadow, chopping its head off.&lt;/p&gt;

&lt;p&gt;The shadow roars and turns into twelve smaller shadows.&lt;br&gt;&lt;br&gt;
Gord looks at Rothütle, exhausted, as if she's not ready to fight anymore.&lt;/p&gt;

&lt;p&gt;Then she nods to the dragon. He grabs Rothütle and flies into the sky.&lt;br&gt;&lt;br&gt;
"No!" Rothütle shouts, looking back at Gord, who is fighting the shadows alone.&lt;/p&gt;

&lt;p&gt;As they ascend, Rothütle faints, exhausted from his burns...&lt;/p&gt;




&lt;h2&gt;
  
  
  Security Tip #24 — Design for Resilience
&lt;/h2&gt;

&lt;p&gt;Not every system can be saved.&lt;/p&gt;

&lt;p&gt;When compromise becomes inevitable, sometimes the goal is no longer to win —&lt;br&gt;&lt;br&gt;
it is to ensure that what matters can escape.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Protect identities, backups, and recovery paths.&lt;/li&gt;
&lt;li&gt;Accept that some components must be sacrificed.&lt;/li&gt;
&lt;li&gt;Prioritize the survival of critical assets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A secure system isn't the one that never falls.&lt;br&gt;
It's the one that lets the future continue.&lt;/p&gt;




&lt;p&gt;The story doesn't end here...&lt;br&gt;&lt;br&gt;
Stay tuned for the book &lt;strong&gt;Black Forest Shadow&lt;/strong&gt;, coming out in February 2025.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>kubernetes</category>
      <category>security</category>
    </item>
    <item>
      <title>Day 23 — Secure By Design (Black Forest Shadow)</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Tue, 23 Dec 2025 12:58:44 +0000</pubDate>
      <link>https://forem.com/aerabi/day-23-secure-by-design-black-forest-shadow-390h</link>
      <guid>https://forem.com/aerabi/day-23-secure-by-design-black-forest-shadow-390h</guid>
      <description>&lt;p&gt;Gord and Rothütle take Jack to the castle. As they enter the courtyard, YAML emerges from the shadows, holding a small box.&lt;/p&gt;

&lt;p&gt;"Looking for this?" he says, handing the box to Gord.&lt;/p&gt;

&lt;p&gt;Then the sky grows dark, and a cold wind sweeps through the forest.&lt;br&gt;&lt;br&gt;
A large dark figure starts to materialize in front of them.&lt;/p&gt;

&lt;p&gt;"It's Angra," Gord whispers.&lt;/p&gt;

&lt;p&gt;"&lt;em&gt;The Architect is free now,&lt;/em&gt;" Jack says, stepping back.&lt;/p&gt;

&lt;p&gt;Then Jack and YAML go and stand beside the dark figure.&lt;/p&gt;

&lt;p&gt;"YAML was on my side all along," Angra's voice echoes through the stone walls.&lt;/p&gt;

&lt;p&gt;"So your tall friend is not so useless after all," Rothütle mutters.&lt;br&gt;&lt;br&gt;
"Don't bet on it," Gord replies.&lt;/p&gt;

&lt;p&gt;"You can't stop me now," Angra continues.&lt;/p&gt;

&lt;p&gt;"So Jack was just a distraction," Rothütle says, realizing the truth.&lt;br&gt;&lt;br&gt;
"We were playing into Angra's hands all along."&lt;/p&gt;

&lt;p&gt;"So, you have a miner, a useless moving tower, and some shadows that vanish in torchlight," Gord shouts, facing Angra.&lt;br&gt;&lt;br&gt;
"That makes you unstoppable?"&lt;/p&gt;

&lt;p&gt;Angra snarls. Jack picks up an axe and YAML draws his dagger.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Tip of the day: Misconfiguration is an attacker's best friend. Secure your systems by design.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Security Tip #23 — Secure by Design
&lt;/h2&gt;

&lt;p&gt;Angra wins not by strength, but by exploiting weaknesses in the defenders' design.&lt;br&gt;&lt;br&gt;
YAML, who was supposed to be the guard, opened the door for the enemy.&lt;/p&gt;

&lt;p&gt;It's the same with your YAML configurations and infrastructure as code. If misconfigured, they can open the door to attackers.&lt;/p&gt;

&lt;p&gt;Here are some best practices to ensure your systems are secure by design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use secure defaults&lt;/strong&gt;: Start with the most restrictive settings and only open up what is necessary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implement the principle of the least privilege&lt;/strong&gt;: Ensure that users and services have only the permissions they need to perform their tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pod Security Standards&lt;/strong&gt;: There are three predefined Pod Security Standards in Kubernetes: Privileged, Baseline, and Restricted. Use the Restricted profile for production workloads to minimize security risks and only allow necessary capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drop unnecessary capabilities&lt;/strong&gt;: Docker containers run with a default set of Linux capabilities. You can drop all capabilities and only add back the ones you need using the &lt;code&gt;cap_drop&lt;/code&gt; and &lt;code&gt;cap_add&lt;/code&gt; options in your Docker Compose or Kubernetes manifests.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pod Security Standards Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Namespace&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;default&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pod-security.kubernetes.io/enforce&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;baseline&lt;/span&gt;
    &lt;span class="na"&gt;pod-security.kubernetes.io/audit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;restricted&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, the &lt;code&gt;default&lt;/code&gt; namespace is configured to enforce the Baseline Pod Security Standard and audit against the Restricted standard.&lt;br&gt;
This means that any pods created in this namespace must comply with the Baseline standard, and any violations of the Restricted standard will be logged for auditing purposes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dropping Unnecessary Capabilities Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Pod&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
    &lt;span class="na"&gt;securityContext&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;capabilities&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;drop&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ALL"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
        &lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NET_ADMIN"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the Nginx container drops all Linux capabilities and only adds back the &lt;code&gt;NET_ADMIN&lt;/code&gt; capability, which is necessary for network administration tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn Docker and Kubernetes Security
&lt;/h2&gt;

&lt;p&gt;These two examples were taken from my book &lt;strong&gt;Docker and Kubernetes Security&lt;/strong&gt;, currently &lt;strong&gt;40% off&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Chapter 6 covers securing containers in Kubernetes, including Pod Security Standards and capability management.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://buy.dockersecurity.io" rel="noopener noreferrer"&gt;buy.DockerSecurity.io&lt;/a&gt;&lt;br&gt;&lt;br&gt;
💬 Code: &lt;strong&gt;BLACKFOREST25&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;em&gt;To have the story delivered to your inbox every day in December, subscribe to my &lt;a href="https://medium.com/subscribe/@aerabi" rel="noopener noreferrer"&gt;Medium publications&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>kubernetes</category>
      <category>security</category>
      <category>adventofcode</category>
    </item>
    <item>
      <title>Day 22 — Chained Attack (The Final Confrontation)</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Mon, 22 Dec 2025 14:36:03 +0000</pubDate>
      <link>https://forem.com/aerabi/day-22-chained-attack-the-final-confrontation-1oof</link>
      <guid>https://forem.com/aerabi/day-22-chained-attack-the-final-confrontation-1oof</guid>
      <description>&lt;p&gt;As Gord, Rothütle, and Jack are talking, a CVE jumps off a tree and attacks Gord.&lt;/p&gt;

&lt;p&gt;"&lt;em&gt;The Architect told me everything about you,&lt;/em&gt;" Jack says.&lt;br&gt;&lt;br&gt;
"&lt;em&gt;You're an innovator yourself. The Architect is oil to innovation's engine.&lt;/em&gt;"&lt;/p&gt;

&lt;p&gt;"&lt;em&gt;I have seen what is your Architect capable of,&lt;/em&gt;" Rothütle says, facing Jack.&lt;br&gt;&lt;br&gt;
"&lt;em&gt;He's dangerous. Who can conjure such things?&lt;/em&gt;" he says, pointing at the CVE.&lt;/p&gt;

&lt;p&gt;Jack smirks. "&lt;em&gt;That's the cue for me to take the keys.&lt;/em&gt;"&lt;br&gt;&lt;br&gt;
Then he sprints toward her, but Rothütle steps in front of him, raising his shield.&lt;/p&gt;

&lt;p&gt;Gord is still fighting the CVE. Rothütle hits Jack's arm with the shield.&lt;br&gt;&lt;br&gt;
Gord sees her chance and slashes the CVE with her sword. It dissolves into mist.&lt;br&gt;&lt;br&gt;
Then Rothütle hits Jack again, this time knocking the axe from his hand.&lt;/p&gt;

&lt;p&gt;Jack is distracted, trying to retrieve his weapon. Gord steps forward and points her sword at his throat.&lt;/p&gt;

&lt;p&gt;"This ends now, Jack," she says. "Perhaps you should join your Architect friend."&lt;/p&gt;

&lt;p&gt;Jack glares at her, "This is not over yet."&lt;/p&gt;

&lt;p&gt;"Where is YAML?" Rothütle asks, looking around...&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Tip of the day: Attacks rarely come alone. Breaches succeed when multiple weaknesses are exploited at once.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Security Tip #22 — Chained Attacks
&lt;/h2&gt;

&lt;p&gt;Jack doesn't win by strength.&lt;br&gt;&lt;br&gt;
He wins by &lt;strong&gt;timing&lt;/strong&gt;, &lt;strong&gt;coordination&lt;/strong&gt;, and &lt;strong&gt;exploiting multiple weaknesses&lt;/strong&gt; at once.&lt;/p&gt;

&lt;p&gt;This mirrors real-world attacks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chain known CVEs with privilege escalation exploits.&lt;/li&gt;
&lt;li&gt;Use social engineering, perhaps, to gain more access.&lt;/li&gt;
&lt;li&gt;Exploit misconfigurations alongside software vulnerabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Defensive takeaways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assume attacks are &lt;strong&gt;composed&lt;/strong&gt; and &lt;strong&gt;multi-faceted&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Implement &lt;strong&gt;defense in depth&lt;/strong&gt;: multiple layers of security controls.&lt;/li&gt;
&lt;li&gt;Correlate signals across systems to detect complex attack patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Winning the fight isn't stopping one attacker — it's preventing the chain.&lt;/p&gt;




&lt;h3&gt;
  
  
  📘 Learn Docker and Kubernetes Security
&lt;/h3&gt;

&lt;p&gt;To learn how legacy systems impact modern container security — and how to modernize safely — check out my book &lt;strong&gt;Docker and Kubernetes Security&lt;/strong&gt;, currently &lt;strong&gt;40% off&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://buy.dockersecurity.io" rel="noopener noreferrer"&gt;buy.DockerSecurity.io&lt;/a&gt;&lt;br&gt;&lt;br&gt;
💬 Code: &lt;strong&gt;BLACKFOREST25&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;em&gt;To have the story delivered to your inbox every day in December, subscribe to my &lt;a href="https://medium.com/subscribe/@aerabi" rel="noopener noreferrer"&gt;Medium publications&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>security</category>
      <category>kubernetes</category>
      <category>adventofcode</category>
    </item>
    <item>
      <title>Day 21 — Balancing Speed and Security (Confrontation with Jack)</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Sun, 21 Dec 2025 14:26:40 +0000</pubDate>
      <link>https://forem.com/aerabi/day-21-balancing-speed-and-security-confrontation-with-jack-3kd6</link>
      <guid>https://forem.com/aerabi/day-21-balancing-speed-and-security-confrontation-with-jack-3kd6</guid>
      <description>&lt;p&gt;The trio, Gord, Rothütle, and YAML, arrive at the foot of Schattenburg Castle.&lt;br&gt;&lt;br&gt;
The castle is visible on the hilltop, surrounded by dense forest, glowing faintly in the moonlight.&lt;/p&gt;

&lt;p&gt;Gord opens a hidden door on the ground. There is a hole in the ground with swords and shields hanging on the walls.&lt;br&gt;&lt;br&gt;
She grabs a shield and a sword, handing them over to Rothütle. "We need to be ready for anything."&lt;/p&gt;

&lt;p&gt;"What about him?" Rothütle asks, pointing to YAML.&lt;/p&gt;

&lt;p&gt;Gord hesitates for a moment, then hands him a dagger. "You can defend yourself with this."&lt;/p&gt;

&lt;p&gt;Closer to the castle, there is a shadow standing among the trees. It steps forward, a bearded man with a two-sided axe.&lt;/p&gt;

&lt;p&gt;"Jack," Gord says grimly.&lt;/p&gt;

&lt;p&gt;"I've been expecting you," Jack replies with a thick accent. "Your security measures are good, but not good enough."&lt;/p&gt;

&lt;p&gt;"What do you want?" Gord asks calmly.&lt;/p&gt;

&lt;p&gt;"The best man who can design your defenses is imprisoned in the castle," Jack says.&lt;br&gt;&lt;br&gt;
"Release him to me, and I will leave you in peace."&lt;/p&gt;

&lt;p&gt;"He's not your decision to make," Gord replies firmly. "Now leave, before I show you the last bit of my security."&lt;/p&gt;

&lt;p&gt;"&lt;em&gt;You understand, don't you?&lt;/em&gt;" Jack says facing Rothütle.&lt;br&gt;&lt;br&gt;
"&lt;em&gt;The Architect is helping Carl with his innovations. She's holding back knowledge that belongs to the world.&lt;/em&gt;"&lt;/p&gt;

&lt;p&gt;A shadow moves among the trees...&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Tip of the day: Moving fast and breaking things is not a security strategy. Defend your critical assets.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Security Tip #21 — The Balance Between Speed and Security
&lt;/h2&gt;

&lt;p&gt;In today's fast-paced world, security is often seen as a hindrance to speed and innovation. But something that hinders your innovation the most, is going out of business due to a security breach.&lt;/p&gt;

&lt;p&gt;Security breaches are costly. They lead to downtime, data loss, and reputational damage. In many cases, they can even lead to the end of a business.&lt;/p&gt;

&lt;p&gt;The key to balancing speed and security is to &lt;strong&gt;integrate security into your development process&lt;/strong&gt;. This means adopting a DevSecOps approach, where security is considered at every stage of the software development lifecycle.&lt;/p&gt;

&lt;p&gt;This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automated security testing&lt;/strong&gt;: Integrate security testing into your CI/CD pipeline to catch vulnerabilities early.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shift-left security&lt;/strong&gt;: Involve security teams early in the development process to identify and mitigate risks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Education and training&lt;/strong&gt;: Ensure that developers are aware of security best practices and understand the security implications of their code and the dependencies they use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The sooner in the process you address security, the easier and cheaper it is. You don't want to let Jack walk all over your defenses before addressing the vulnerabilities.&lt;/p&gt;




&lt;h3&gt;
  
  
  📘 Learn Docker and Kubernetes Security
&lt;/h3&gt;

&lt;p&gt;There is a dedicated chapter on coding securely in my book &lt;strong&gt;Docker and Kubernetes Security&lt;/strong&gt;, currently &lt;strong&gt;40% off&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://buy.dockersecurity.io" rel="noopener noreferrer"&gt;buy.DockerSecurity.io&lt;/a&gt;&lt;br&gt;&lt;br&gt;
💬 Code: &lt;strong&gt;BLACKFOREST25&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;em&gt;To have the story delivered to your inbox every day in December, subscribe to my &lt;a href="https://medium.com/subscribe/@aerabi" rel="noopener noreferrer"&gt;Medium publications&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>kubernetes</category>
      <category>security</category>
    </item>
    <item>
      <title>Day 20 — Incident Response (The Ambush)</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Sat, 20 Dec 2025 10:11:00 +0000</pubDate>
      <link>https://forem.com/aerabi/day-20-incident-response-the-ambush-6a5</link>
      <guid>https://forem.com/aerabi/day-20-incident-response-the-ambush-6a5</guid>
      <description>&lt;p&gt;On their way back to Schattenburg, Rothütle and YAML Voorhees move cautiously through the dense forest. Then, suddenly, a shadow is on the path ahead, with eyes glowing in the dim light.&lt;/p&gt;

&lt;p&gt;"Give me the light," Rothütle says to YAML, taking his lantern. "Now you can draw your sword."&lt;/p&gt;

&lt;p&gt;"But I don't have a sword," YAML replies, confused.&lt;/p&gt;

&lt;p&gt;"What? Then how are you going to fight the CVE? With your charm?" Rothütle snaps.&lt;/p&gt;

&lt;p&gt;"CVE?" YAML asks.&lt;/p&gt;

&lt;p&gt;Rothütle starts looking for something sharp in his pocket, finding only a pen. He grips it tightly, and steps forward.&lt;br&gt;
Whispering to himself, "You can apply for the most useless Guardian of the year award later."&lt;/p&gt;

&lt;p&gt;From the shadows, a figure steps forward. It tries to take the lantern from Rothütle, but he stabs the pen into its arm. The figure recoils, and returns to the shadows.&lt;/p&gt;

&lt;p&gt;"Let's move," Rothütle says, breathing heavily. Then he sees a CVE grabbing YAML from behind.&lt;br&gt;&lt;br&gt;
He rushes to help, but as he approaches, YAML hits the ground, blowing the lantern out.&lt;/p&gt;

&lt;p&gt;"Let's fall back to Gord," YAML gasps, struggling to get up. "She can help us."&lt;/p&gt;

&lt;p&gt;Then a bright silhouette appears in the darkness. Gord steps forward, sword drawn, wearing a white cloak.&lt;br&gt;
As she approaches, the CVE dissolves into mist.&lt;/p&gt;

&lt;p&gt;"Good to see you, Gord," Rothütle says, relieved. "Nice cloak!"&lt;/p&gt;

&lt;p&gt;Gord smiles faintly, pulling off the white cloak and giving it to Rothütle.&lt;br&gt;&lt;br&gt;
"Here, it keeps the CVEs away."&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Tip of the day: When under attack, fall back, regroup, and restore stability.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Security Tip #20 — Incident Response: Fallback, Regroup, Restore
&lt;/h2&gt;

&lt;p&gt;When an attack is active, &lt;strong&gt;forward motion is the fastest way to make things worse&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Rothütle and YAML don't win by fighting harder.&lt;br&gt;&lt;br&gt;
They survive by &lt;strong&gt;falling back&lt;/strong&gt; to a position where protection still exists.&lt;/p&gt;

&lt;p&gt;This is how real incident response works.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Fallback — Stop the Bleeding
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Isolate affected systems.&lt;/li&gt;
&lt;li&gt;Cut network access if needed.&lt;/li&gt;
&lt;li&gt;Disable compromised credentials or workloads.&lt;/li&gt;
&lt;li&gt;Accept partial downtime to prevent full compromise.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;If visibility is gone, assume the attacker still has access.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. Regroup — Re-establish Control
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Restore logging and monitoring.&lt;/li&gt;
&lt;li&gt;Verify which systems are still trustworthy.&lt;/li&gt;
&lt;li&gt;Identify blast radius before touching production.&lt;/li&gt;
&lt;li&gt;Communicate clearly: who owns decisions, who investigates.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Chaos kills response effectiveness faster than attackers do.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Restore — Rebuild from Known-Good State
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Rebuild systems from clean images.&lt;/li&gt;
&lt;li&gt;Redeploy from verified pipelines.&lt;/li&gt;
&lt;li&gt;Rotate secrets &lt;strong&gt;after&lt;/strong&gt; containment.&lt;/li&gt;
&lt;li&gt;Bring services back gradually, validating at each step.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Never "clean" a compromised system. &lt;strong&gt;Replace it.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Core Lesson
&lt;/h3&gt;

&lt;p&gt;Incidents are not won by heroics.&lt;br&gt;&lt;br&gt;
They are survived by &lt;strong&gt;discipline, retreat, and controlled recovery&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Fall back.&lt;br&gt;&lt;br&gt;
Regroup.&lt;br&gt;&lt;br&gt;
Restore stability.&lt;/p&gt;

&lt;p&gt;Everything else is noise.&lt;/p&gt;




&lt;h3&gt;
  
  
  📘 Learn Docker and Kubernetes Security
&lt;/h3&gt;

&lt;p&gt;To learn how legacy systems impact modern container security — and how to modernize safely — check out my book &lt;strong&gt;Docker and Kubernetes Security&lt;/strong&gt;, currently &lt;strong&gt;40% off&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://buy.dockersecurity.io" rel="noopener noreferrer"&gt;buy.DockerSecurity.io&lt;/a&gt;&lt;br&gt;&lt;br&gt;
💬 Code: &lt;strong&gt;BLACKFOREST25&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;em&gt;To have the story delivered to your inbox every day in December, subscribe to my &lt;a href="https://medium.com/subscribe/@aerabi" rel="noopener noreferrer"&gt;Medium publications&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>kubernetes</category>
      <category>security</category>
      <category>adventofcode</category>
    </item>
    <item>
      <title>Day 19 — Secret Management (The Okterakt)</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Fri, 19 Dec 2025 13:35:21 +0000</pubDate>
      <link>https://forem.com/aerabi/day-19-secret-management-the-okterakt-98p</link>
      <guid>https://forem.com/aerabi/day-19-secret-management-the-okterakt-98p</guid>
      <description>&lt;p&gt;The trio arrives at a cliff. Gord hits the ground with her sword, and then there is a rumble. A hidden pathway reveals itself, leading down the cliffside.&lt;/p&gt;

&lt;p&gt;"Stay here," Gord instructs Rothütle and YAML. "I will take a look." She descends the path cautiously.&lt;/p&gt;

&lt;p&gt;Rothütle and YAML wait outside. After a few tense minutes, Rothütle hears a movement from among the trees. He looks back at YAML and he seems calm. Then he descends the path as well to find Gord.&lt;/p&gt;

&lt;p&gt;Gord is in a chamber carved into the cliffside. In the center is a pedestal with an ornate box—the artifact. Gord approaches it carefully.&lt;/p&gt;

&lt;p&gt;"There is someone here in the shadows," Rothütle says, stepping into the chamber.&lt;/p&gt;

&lt;p&gt;"Take the artifact and run," a voice hisses from the darkness. A whisper in Rothütle's ear. "It will protect you."&lt;/p&gt;

&lt;p&gt;He steps back sharply, checking the shadows. Gord understands immediately. "It's Angra," she says. "Ignore him."&lt;br&gt;&lt;br&gt;
Then she gives Rothütle a long look. "It was a great journey we had together, don't you think?"&lt;/p&gt;

&lt;p&gt;Rothütle nods, confused. "Yes, but what do you mean?"&lt;/p&gt;

&lt;p&gt;"I just had a moment alone here, and...," Gord pauses.&lt;br&gt;&lt;br&gt;
"You can go to the castle with YAML while I secure the Okterakt."&lt;/p&gt;

&lt;p&gt;Rothütle hesitates. "How much longer do you need? I think I can stand guard outside for a bit."&lt;/p&gt;

&lt;p&gt;She steps closer and punches him lightly in the shoulder.&lt;br&gt;&lt;br&gt;
"See you in the castle, Rothütle."&lt;/p&gt;

&lt;p&gt;Rothütle leaves the chamber reluctantly and tells YAML that they need to head back to the castle. As they walk away, Rothütle glances back at the chamber one last time.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Tip of the day: Keep your secrets safe!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Security Tip #19: Secret Management
&lt;/h2&gt;

&lt;p&gt;In a Kubernetes cluster, secrets such as passwords, tokens, and keys need to be managed securely. Kubernetes provides a built-in resource called Secrets to store sensitive information. However, it's crucial to follow best practices for secret management to ensure the security of your applications.&lt;/p&gt;

&lt;p&gt;I have seen many cases where secret resources were stored in plain text within YAML files, committed to version control. This is a major security risk, as anyone with access to the repository can retrieve the secrets.&lt;/p&gt;

&lt;p&gt;Here are some best practices for managing secrets in Kubernetes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use a dedicated secret management tool like HashiCorp Vault, AWS Secrets Manager, or Azure Key Vault to store and manage secrets securely.&lt;/li&gt;
&lt;li&gt;You can connect these tools to Kubernetes using external secret operators, which automatically sync secrets from the external store to Kubernetes Secrets.&lt;/li&gt;
&lt;li&gt;Avoid storing secrets in plain text within YAML files or version control systems.&lt;/li&gt;
&lt;li&gt;Use Kubernetes RBAC to restrict access to secrets only to the necessary service accounts and users.&lt;/li&gt;
&lt;li&gt;Regularly rotate secrets to minimize the risk of compromise.&lt;/li&gt;
&lt;li&gt;Use Infrastructure as Code (IaC) tools to randomly generate secrets during deployment, rather than hardcoding them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Angra is out there whispering in the shadows, and Jack is trying to steal your secrets. Don't let them succeed!&lt;/p&gt;




&lt;h3&gt;
  
  
  📘 Learn Docker and Kubernetes Security
&lt;/h3&gt;

&lt;p&gt;To learn how legacy systems impact modern container security — and how to modernize safely — check out my book &lt;strong&gt;Docker and Kubernetes Security&lt;/strong&gt;, currently &lt;strong&gt;40% off&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://buy.dockersecurity.io" rel="noopener noreferrer"&gt;buy.DockerSecurity.io&lt;/a&gt;&lt;br&gt;&lt;br&gt;
💬 Code: &lt;strong&gt;BLACKFOREST25&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;em&gt;To have the story delivered to your inbox every day in December, subscribe to my &lt;a href="https://medium.com/subscribe/@aerabi" rel="noopener noreferrer"&gt;Medium publications&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>kubernetes</category>
      <category>security</category>
      <category>adventofcode</category>
    </item>
    <item>
      <title>Day 18 — Misconfiguration (YAML Voorhees)</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Thu, 18 Dec 2025 13:10:21 +0000</pubDate>
      <link>https://forem.com/aerabi/day-18-misconfiguration-yaml-voorhees-1bm8</link>
      <guid>https://forem.com/aerabi/day-18-misconfiguration-yaml-voorhees-1bm8</guid>
      <description>&lt;p&gt;The forest thickens as they approach &lt;strong&gt;Sonnenwacht&lt;/strong&gt; castle. The night arrives early and unexpectedly.&lt;/p&gt;

&lt;p&gt;"It's the longest night of the year," Rothütle whispers.&lt;/p&gt;

&lt;p&gt;A figure steps from the shadows—tall, cloaked, face hidden beneath a mask.&lt;/p&gt;

&lt;p&gt;"What are you doing out here?" Gord says, not expecting to see him.&lt;/p&gt;

&lt;p&gt;The figure answers calmly, "I was looking for you. There has been some disturbance."&lt;/p&gt;

&lt;p&gt;Gord turns back to Rothütle, "Meet YAML Voorhees. He's a guardian of the Order, and the prison warden."&lt;br&gt;
She looks back at YAML Voorhees as she delivers the last sentence, blaming him for leaving his post.&lt;/p&gt;

&lt;p&gt;"What kind of name is that?" Rothütle asks.&lt;/p&gt;

&lt;p&gt;"It's short for &lt;em&gt;Yvo Adrianus Matthijs Laurens Voorhees&lt;/em&gt;," YAML replies. "But everyone calls me YAML."&lt;/p&gt;

&lt;p&gt;"What kind of disturbance?" Gord asks.&lt;/p&gt;

&lt;p&gt;YAML Voorhees hesitates, looking at Rothütle. Gord nods for him to continue.&lt;br&gt;
"Jack is here," YAML says quietly. "He's looking for the artifact. We need to secure it."&lt;/p&gt;

&lt;p&gt;"So he's really here," Rothütle mutters.&lt;/p&gt;

&lt;p&gt;"There is no time, come with me," Gord says, gripping her sword tightly.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Tip of the day: Misconfiguration in YAML files can lead to security vulnerabilities. Always validate and lint your YAML configurations before deploying them.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Security Tip #18: YAML Configuration Security
&lt;/h2&gt;

&lt;p&gt;Kubernetes is complicated, and so are its configuration files. YAML files are used extensively to define Kubernetes resources, but misconfigurations can lead to security vulnerabilities. Always check the YAML files for common mistakes and security issues before deploying them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can use SAST tools to scan your YAML files for misconfigurations and vulnerabilities.&lt;/li&gt;
&lt;li&gt;Always commit the configuration files to version control to track changes and review them.&lt;/li&gt;
&lt;li&gt;Use Helm charts to manage complex configurations and ensure consistency across environments.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  📘 Learn Docker and Kubernetes Security
&lt;/h3&gt;

&lt;p&gt;To learn how legacy systems impact modern container security — and how to modernize safely — check out my book &lt;strong&gt;Docker and Kubernetes Security&lt;/strong&gt;, currently &lt;strong&gt;40% off&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://buy.dockersecurity.io" rel="noopener noreferrer"&gt;buy.DockerSecurity.io&lt;/a&gt;&lt;br&gt;&lt;br&gt;
💬 Code: &lt;strong&gt;BLACKFOREST25&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;em&gt;To have the story delivered to your inbox every day in December, subscribe to my &lt;a href="https://medium.com/subscribe/@aerabi" rel="noopener noreferrer"&gt;Medium publications&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>watercooler</category>
      <category>writing</category>
    </item>
  </channel>
</rss>
