<?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>Seven Docker Tips Every Engineer Should Know (from Docker Captains)</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Mon, 25 May 2026 07:25:00 +0000</pubDate>
      <link>https://forem.com/docker/seven-docker-tips-every-engineer-should-know-from-docker-captains-3o1h</link>
      <guid>https://forem.com/docker/seven-docker-tips-every-engineer-should-know-from-docker-captains-3o1h</guid>
      <description>&lt;p&gt;Between June and August 2025, Docker shared a short series of practical tips from Docker Captains on Twitter/X. The format was brief, but the advice is worth unpacking. This post is revisiting those seven tips with a little more context and newer examples.&lt;/p&gt;

&lt;p&gt;Here are the seven tips, in the chronological order they were shared!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start New Projects with Docker Init
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Captain intro:&lt;/strong&gt; &lt;a href="https://www.docker.com/captains/mohammad-ali-arabi/" rel="noopener noreferrer"&gt;Mohammad-Ali A'rabi&lt;/a&gt; is a Docker Captain from Freiburg, Germany, a backend software engineer, Docker community leader, and the author of &lt;a href="https://www.dockersecurity.io/docker-and-kubernetes-security" rel="noopener noreferrer"&gt;&lt;em&gt;Docker and Kubernetes Security&lt;/em&gt;&lt;/a&gt;. His work often sits at the intersection of practical engineering, education, community, and secure-by-default container workflows.&lt;/p&gt;

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

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



&lt;/p&gt;

&lt;p&gt;The tweet points to &lt;code&gt;docker init&lt;/code&gt; as the fastest way to get a clean Docker setup for a new project:&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 command analyzes your project and generates a set of files that follow Docker's best practices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Dockerfile&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.dockerignore&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;compose.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;README.Docker.md&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read the following article for a detailed walkthrough of &lt;code&gt;docker init&lt;/code&gt; with a Java project: &lt;a href="https://www.dockersecurity.io/blog/dockerize-java-26-with-docker-init" rel="noopener noreferrer"&gt;Dockerize Java 26 with Docker Init&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Clean Up Docker Disk Usage Carefully
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Captain intro:&lt;/strong&gt; &lt;a href="https://www.docker.com/contributors/rafael-pazini/" rel="noopener noreferrer"&gt;Rafael Pazini&lt;/a&gt; is a Docker Captain from Sao Paulo, Brazil, and a Senior Software Engineer at Pluto TV. He has more than 10 years of experience building scalable applications, with expertise in distributed systems, microservices, Docker, and Kubernetes.&lt;/p&gt;

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

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



&lt;/p&gt;

&lt;p&gt;The command &lt;code&gt;docker system prune&lt;/code&gt; is no stranger to Docker users:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker system prune &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;--volumes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The terminal will say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - unused build cache

Are you sure you want to continue? [y/N]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;BTW, did you know &lt;code&gt;[y/N]&lt;/code&gt; means "default to No if the user just presses Enter"?&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;-a&lt;/code&gt; flag removes &lt;em&gt;all&lt;/em&gt; unused images, not just dangling ones. The &lt;code&gt;--volumes&lt;/code&gt; flag adds unused volumes to the cleanup list. Check it out, and the warning verifies it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all anonymous volumes not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few more handy commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker rmi &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;docker images &lt;span class="nt"&gt;-q&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;  &lt;span class="c"&gt;# Force-remove all images&lt;/span&gt;
docker volume &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;docker volume &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-q&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;  &lt;span class="c"&gt;# Remove all volumes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Satisfaction!&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Use Multi-Stage Builds
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Captain intro:&lt;/strong&gt; &lt;a href="https://www.docker.com/captains/karan-verma/" rel="noopener noreferrer"&gt;Karan Verma&lt;/a&gt; is a Docker Captain from Jalandhar, India. He is a software engineer and community leader who has been active in the Docker community in Jalandhar since 2017, with a focus that includes AI and MLOps.&lt;/p&gt;

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

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



&lt;/p&gt;

&lt;p&gt;It's not only AI images that can get big. It's better to trim images down, AI or not. It's cost-effective, faster to deploy, and more secure by reducing the attack surface. Multi-stage builds are the way to go for that.&lt;/p&gt;

&lt;p&gt;To add to that, &lt;code&gt;docker init&lt;/code&gt; already generates a multi-stage Dockerfile for you.&lt;/p&gt;

&lt;p&gt;Also, make sure the final stage is hardened with a non-root user and limited privileges. For example, use a base image with no package manager, no shell, and no extra tools.&lt;/p&gt;

&lt;p&gt;Another important tip is to generate SBOM attestations during the build:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;--sbom&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; my-image:latest &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command doesn't automatically include all stages in the SBOM, so you need to add the following line to each stage in your Dockerfile to ensure they are included:&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="k"&gt;ARG&lt;/span&gt;&lt;span class="s"&gt; BUILDKIT_SBOM_SCAN_CONTEXT=true&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;&amp;lt;image&amp;gt;&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;stage&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Choose Lightweight, Version-Pinned Base Images
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Captain intro:&lt;/strong&gt; &lt;a href="https://www.docker.com/contributors/sergio-lopes/" rel="noopener noreferrer"&gt;Sergio Lopes&lt;/a&gt; is a Docker Captain from Sao Paulo, Brazil, and a Principal Backend Engineer at Banco Itau Unibanco S.A. Docker highlights his long backend engineering background and expertise in developer productivity, Kubernetes, modern application development, and observability.&lt;/p&gt;

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

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



&lt;/p&gt;

&lt;p&gt;This tweet is from July 2025, but the advice is evergreen. Use Docker Hardened Images (DHI) for base images, and pin to a specific version. The DHI are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lightweight&lt;/li&gt;
&lt;li&gt;Open-source&lt;/li&gt;
&lt;li&gt;Secure-by-default&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check the catalog at &lt;a href="https://dhi.io" rel="noopener noreferrer"&gt;dhi.io&lt;/a&gt; and pick the right image for your language and use case. Search for "node", get into the &lt;a href="https://hub.docker.com/hardened-images/catalog/dhi/node" rel="noopener noreferrer"&gt;Node.js image catalog&lt;/a&gt;:&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%2Fr0ms7meghy1vt90ky3p7.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%2Fr0ms7meghy1vt90ky3p7.png" alt="DHI Node.js Catalog" width="799" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then go to the "Images" tab to see &lt;a href="https://hub.docker.com/hardened-images/catalog/dhi/node/images" rel="noopener noreferrer"&gt;the full list&lt;/a&gt;:&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%2Ff2iifvjnl9thpkwbffw7.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%2Ff2iifvjnl9thpkwbffw7.png" alt="DHI Node.js Images" width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the list of images:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If there is a lock, it's not free to use. Just skip it.&lt;/li&gt;
&lt;li&gt;There are Debian and Alpine variants.&lt;/li&gt;
&lt;li&gt;There are "dev" variants with build tools and "prod" variants without them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find a version, and your Dockerfile should start like this:&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;# The build stage&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;dhi.io/node:26.2.0-debian13-dev&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;build&lt;/span&gt;

&lt;span class="c"&gt;# The production stage&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; dhi.io/node:26.2.0-debian13&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dev image has 10 CVEs and the prod image has 0.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Use Docker Scout Quickview
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Captain intro:&lt;/strong&gt; &lt;a href="https://www.docker.com/contributors/khushboo-verma/" rel="noopener noreferrer"&gt;Khushboo Verma&lt;/a&gt; is a Docker Captain and Platform Engineer at Appwrite in Bengaluru, India. She is also a community builder and speaker, with Docker listing her expertise in developer productivity, modern application development, and observability.&lt;/p&gt;

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

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



&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;docker scout quickview&lt;/code&gt; command is a fast way to get a snapshot of your image's security posture. It checks for known CVEs, lists dependencies, and provides metadata about the base image. This is especially useful in CI pipelines to catch vulnerabilities before pushing images to a registry.&lt;/p&gt;

&lt;p&gt;Let's do it on the DHI Node.js image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker scout quickview dhi.io/node:26.2.0-debian13
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    i New version 1.21.0 available (installed version is 1.20.3) at https://github.com/docker/scout-cli
    ✓ SBOM obtained from attestation, 20 packages found
    ✓ Provenance obtained from attestation
    ✓ VEX statements obtained from attestation

    i Base image was auto-detected. To get more accurate results, build images with max-mode provenance attestations.
      Review docs.docker.com ↗ for more information.

 Target   │  dhi.io/node:26.2.0-debian13  │    0C     0H     0M     0L
   digest │  f3fb2a06abd6                 │
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, there are no CVEs, and the image has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SBOM attestation with 20 packages&lt;/li&gt;
&lt;li&gt;Provenance attestation&lt;/li&gt;
&lt;li&gt;VEX statements attestation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to learn more about these concepts, check out the Docker Commandos workshop on Docker Labspaces: &lt;a href="https://www.dockersecurity.io/commandos" rel="noopener noreferrer"&gt;Docker Commandos&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Use .dockerignore
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Captain intro:&lt;/strong&gt; &lt;a href="https://www.docker.com/captains/anjan-kumar-reddy-ayyadapu/" rel="noopener noreferrer"&gt;Anjan Kumar Reddy Ayyadapu&lt;/a&gt; is a Docker Captain and Senior Architect Solution Leader at Cloudera Inc. Docker lists his expertise across AI/ML, CI/CD, Kubernetes, observability, developer productivity, and software secure supply chain work.&lt;/p&gt;

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

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



&lt;/p&gt;

&lt;p&gt;The tweet compares &lt;code&gt;.dockerignore&lt;/code&gt; to &lt;code&gt;.gitignore&lt;/code&gt;, which is exactly the right mental model. &lt;code&gt;.gitignore&lt;/code&gt; decides what should not enter version control; &lt;code&gt;.dockerignore&lt;/code&gt; decides what should not enter the Docker build context.&lt;/p&gt;

&lt;p&gt;Two points on that!&lt;/p&gt;

&lt;p&gt;When doing a &lt;code&gt;docker build&lt;/code&gt; command, it usually looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; my-image:latest &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;.&lt;/code&gt; at the end is not the Dockerfile path; it's the build context path. It means, "send the current directory and all its contents to the Docker daemon for the build".&lt;/p&gt;

&lt;p&gt;Anjan says &lt;em&gt;blacklist&lt;/em&gt; some files with &lt;code&gt;.dockerignore&lt;/code&gt;, I would say &lt;em&gt;whitelist&lt;/em&gt; some files with &lt;code&gt;.dockerignore&lt;/code&gt;. Start with a clean slate, and add only what you need. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# .dockerignore
*

!src/
!package.json
!package-lock.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. Limit Container Privileges
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Captain intro:&lt;/strong&gt; &lt;a href="https://www.docker.com/captains/mohammad-ali-arabi/" rel="noopener noreferrer"&gt;Mohammad-Ali A'rabi&lt;/a&gt; appears again in Docker's series, this time with a security tip. It's not me promoting myself, it's Docker!&lt;/p&gt;

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

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



&lt;/p&gt;

&lt;p&gt;Just for context: Linux capabilities are granular permissions that can be independently enabled or disabled for processes. Similar to the whitelisting approach of &lt;code&gt;.dockerignore&lt;/code&gt;, you can start with a clean slate by dropping all capabilities and then adding only the ones your application needs. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--cap-drop&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ALL &lt;span class="nt"&gt;--cap-add&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;NET_ADMIN my-image:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's similar in a Kubernetes pod spec:&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;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;my-pod&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;my-container&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;my-image:latest&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;To learn more about Linux capabilities and how to use them in Docker and Kubernetes, check out the book &lt;a href="https://www.dockersecurity.io/docker-and-kubernetes-security" rel="noopener noreferrer"&gt;Docker and Kubernetes Security&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;I wish Docker starts sharing more tips from Docker Captains, and I hope this post helps expand on the original tweets with more context and examples. If you have any questions or want to share your own Docker tips, feel free to reach out on &lt;a href="https://www.linkedin.com/in/aerabi/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or &lt;a href="https://x.com/MohammadAliEN" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Happy Dockerizing!&lt;/p&gt;

</description>
      <category>docker</category>
    </item>
    <item>
      <title>My Cloud-Native Journey: Docker, Kubernetes, Security, and Open Source</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Wed, 20 May 2026 22:06:56 +0000</pubDate>
      <link>https://forem.com/aerabi/my-cloud-native-journey-docker-kubernetes-security-and-open-source-5588</link>
      <guid>https://forem.com/aerabi/my-cloud-native-journey-docker-kubernetes-security-and-open-source-5588</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Over the past year, I published &lt;em&gt;Docker and Kubernetes Security&lt;/em&gt;, evolved the Docker Black Forest meetup into a CNCF chapter, delivered 15 global engagements across 6 countries, and joined LFX and GSoC as mentor. This post reflects on my journey from Docker Captain to CNCF Ambassador applicant, focused on education through storytelling and building secure supply chains.&lt;/p&gt;

&lt;p&gt;In early 2024, I wrote an article titled &lt;a href="https://www.dockersecurity.io/blog/how-to-become-a-docker-captain" rel="noopener noreferrer"&gt;How to Become a Docker Captain&lt;/a&gt;, chronicling my journey from a casual Docker user in 2015 to an official community leader. Today, as a Senior Backend Engineer at &lt;strong&gt;JobRad GmbH&lt;/strong&gt;, a &lt;strong&gt;Docker Captain&lt;/strong&gt;, and a &lt;strong&gt;Snyk Ambassador&lt;/strong&gt;, my perspective on infrastructure has grown. Containers don't live in a vacuum—they are part of a massive, interconnected cloud-native ecosystem.&lt;/p&gt;

&lt;p&gt;As I submit my application for the &lt;strong&gt;CNCF Ambassador&lt;/strong&gt; program, I wanted to take a moment for a mid-year check-in to reflect on the community work, authorship, and open-source contributions I've been focused on between May 2025 and May 2026.&lt;/p&gt;

&lt;p&gt;Here is what the journey has looked like over the past year.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Build a Cloud-Native Community
&lt;/h2&gt;

&lt;p&gt;Back in 2022, I founded the &lt;strong&gt;Docker Black Forest&lt;/strong&gt; meetup because I was looking for a local community to join. Over time, as our discussions expanded beyond containerization into Kubernetes and secure supply chains, I joined forces with the &lt;strong&gt;DevOps Meetup Freiburg&lt;/strong&gt; to evolve into a broader &lt;strong&gt;Cloud Native Freiburg&lt;/strong&gt; chapter. This was a natural progression, as the lines between DevOps, containers, and cloud-native technologies are increasingly blurred.&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%2Fljv2ckbfkyjmz0ljbgdj.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%2Fljv2ckbfkyjmz0ljbgdj.jpg" alt="Cloud Native Freiburg and Docker Black Forest" width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dockburg.com" rel="noopener noreferrer"&gt;DockBurg.com&lt;/a&gt; is the community hub, that brings &lt;strong&gt;Cloud Native Freiburg&lt;/strong&gt; and &lt;strong&gt;Docker Black Forest&lt;/strong&gt; together under one roof.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://community.cncf.io/cloud-native-freiburg/" rel="noopener noreferrer"&gt;Cloud Native Freiburg&lt;/a&gt; is the &lt;strong&gt;CNCF Chapter&lt;/strong&gt;. Since its founding in April 2025, we have had 10 in-person events, with an average attendance of 20 people.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.meetup.com/docker-black-forest/" rel="noopener noreferrer"&gt;Docker Freiburg and Black Forest&lt;/a&gt; with about 400 members, 19 events, and a rating of 4.7/5 across ~50 reviews on &lt;strong&gt;Meetup.com&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.meetup.com/devops-freiburg/" rel="noopener noreferrer"&gt;DevOps Meetup Freiburg&lt;/a&gt; with about 600 members, 25 events, and a rating of 4.7/5 across ~40 reviews on &lt;strong&gt;Meetup.com&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And we had some high-profile speakers, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lize Raes&lt;/strong&gt;, &lt;strong&gt;Docker Captain&lt;/strong&gt;, &lt;strong&gt;Java Champion&lt;/strong&gt;, and Developer Advocate at &lt;strong&gt;Oracle&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timo Stark&lt;/strong&gt;, &lt;strong&gt;Docker Captain&lt;/strong&gt; and Head of IT&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jonas Scholz&lt;/strong&gt;, &lt;strong&gt;Docker Captain&lt;/strong&gt; and Co-founder of &lt;strong&gt;Sliplane&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&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/docker-and-kubernetes-security" 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/docker-and-kubernetes-security" rel="noopener noreferrer" class="c-link"&gt;
            Docker and Kubernetes Security: Implementing Supply Chain Security and Runtime Security for Containers from Development to Production - Docker and Kubernetes Security - Docker and Kubernetes Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Learn to secure containers and clusters—from supply chain to runtime. This comprehensive guide covers Docker fundamentals, Kubernetes security, CI/CD integration, and future trends.
          &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;
  
  
  2. Write the Book (and Tell a Story)
&lt;/h2&gt;

&lt;p&gt;In October 2025, after nearly two years of writing and 170 git commits, I published my book, &lt;a href="https://www.dockersecurity.io/docker-and-kubernetes-security" rel="noopener noreferrer"&gt;&lt;em&gt;Docker and Kubernetes Security&lt;/em&gt;&lt;/a&gt;. It was an absolute honor to see it nominated as a finalist for the &lt;strong&gt;Best DevOps Book of the Year&lt;/strong&gt; at the &lt;strong&gt;DevOps Dozen 2025&lt;/strong&gt; awards. To support the book's educational mission, I also launched &lt;a href="https://DockerSecurity.io" rel="noopener noreferrer"&gt;DockerSecurity.io&lt;/a&gt; as an accompanying platform, where I publish regular updates and made the first two chapters available for free to the community.&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%2F3ggm53q7s8m7byrh8ast.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%2F3ggm53q7s8m7byrh8ast.jpg" alt="Docker and Kubernetes Security book at Docker Captains Summit 2025" width="800" height="693"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But let's be honest: Security policies can be dry and cause cognitive fatigue. To fix this, I experimented with narrative-driven technical fiction:&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;ul&gt;
&lt;li&gt;In December 2025, I launched the &lt;em&gt;Black Forest Shadows: Container Security Advent Series&lt;/em&gt;, publishing 24 sequential parts across &lt;strong&gt;DEV.to&lt;/strong&gt; and &lt;strong&gt;Medium&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;This series utilized an 1865 folklore setting where &lt;strong&gt;CVE&lt;/strong&gt;s were literal monsters, helping junior engineers grasp complex DevSecOps principles.&lt;/li&gt;
&lt;li&gt;This highly successful experiment is evolving into a full publication titled &lt;a href="https://www.dockersecurity.io/black-forest-shadow" rel="noopener noreferrer"&gt;&lt;em&gt;Black Forest Shadow: A Dark Fantasy Guide to Docker and Kubernetes Security&lt;/em&gt;&lt;/a&gt;, which was published on Friday the 13th of March 2026.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I was also involved in reviewing &lt;em&gt;Operational AI with Docker&lt;/em&gt; by &lt;strong&gt;Ajeet Singh Raina&lt;/strong&gt; and &lt;strong&gt;Harsh Manvar&lt;/strong&gt;, which was published in May 2026. I had the honor of being a technical reviewer for the book, and I shared some exclusive behind-the-scenes insights about it in my &lt;a href="https://www.dockersecurity.io/blog/book-review-operational-ai-with-docker" rel="noopener noreferrer"&gt;book review&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Black Forest Commandos: Talks and Workshops
&lt;/h2&gt;

&lt;p&gt;In June 2025, I did a short talk at &lt;strong&gt;PlatformCon 2025&lt;/strong&gt; about "10 Docker commands you didn't know about". It was a mix of AI and security.&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/talk/bake-a-docker-cake-platformcon-2025" 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%2Ftalk-2025-platformcon-bake-a-docker-cake.jpg" height="450" 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/talk/bake-a-docker-cake-platformcon-2025" rel="noopener noreferrer" class="c-link"&gt;
            Bake a Docker Cake — Talk by Mohammad-Ali A'râbi - Docker and Kubernetes Security - Docker and Kubernetes Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            A PlatformCon talk on 10 lesser-known Docker commands for improving development workflows, vulnerability scanning, supply chain security, and local AI workflows.
          &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;p&gt;There I talked about &lt;strong&gt;Docker Scout&lt;/strong&gt;, &lt;strong&gt;Trivy&lt;/strong&gt;, &lt;strong&gt;Cosign&lt;/strong&gt;, &lt;strong&gt;SBOM&lt;/strong&gt; attestations, and &lt;strong&gt;Docker Bake&lt;/strong&gt; (hence the name of the talk: &lt;em&gt;Bake a Docker Cake&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;In October 2025, I did a workshop version of the same talk at the &lt;strong&gt;WeAreDevelopers World Congress&lt;/strong&gt; in Berlin, which was a huge success. The workshop was attended by 40 people, while 100 more were waiting behind the doors to be let in.&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/workshop/wearedevelopers-world-congress-2025" 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%2Fwe-are-developers-2025.jpg" height="450" class="m-0" width="799"&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/workshop/wearedevelopers-world-congress-2025" rel="noopener noreferrer" class="c-link"&gt;
            Docker Deep Dive with a Docker Captain — Docker Commandos Workshop - Docker and Kubernetes Security - Docker and Kubernetes Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            The workshop that started it all. Over 100 people queued for 40 seats at WeAreDevelopers World Congress 2025. Covered Docker Init, Docker Bake, SBOMs, attestations, and Docker Scout.
          &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;p&gt;I did the same internally at &lt;strong&gt;JobRad&lt;/strong&gt;, and called it &lt;em&gt;10 Docker Commandos&lt;/em&gt;, which is a play on "10 Docker commands" (as in German, the word for &lt;em&gt;command&lt;/em&gt; is &lt;em&gt;Kommando&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;In early 2026, I took the main stage at &lt;strong&gt;Jfokus 2026&lt;/strong&gt; in Stockholm to teach "Dockerize Securely".&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/talk/dockerize-securely-jfokus-2026" 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%2Fjcomic-1a.png" height="355" 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/talk/dockerize-securely-jfokus-2026" rel="noopener noreferrer" class="c-link"&gt;
            Dockerize Securely — Talk by Mohammad-Ali A'râbi - Docker and Kubernetes Security - Docker and Kubernetes Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            A Jfokus talk on building secure container images using SBOMs, OCI 1.1 attestations, and Docker Bake, told through the narrative of the Docker Commandos in Asgard.
          &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;p&gt;I was telling a story about the &lt;em&gt;Black Forest Commandos&lt;/em&gt; defending the realm of &lt;strong&gt;Asgard&lt;/strong&gt; against &lt;strong&gt;CVE&lt;/strong&gt; monsters. It was &lt;strong&gt;Asgard&lt;/strong&gt;, because we were in Sweden and the conference was Viking-themed.&lt;/p&gt;

&lt;p&gt;On the same week, I turned the talk into a blog post for &lt;strong&gt;JAVAPRO&lt;/strong&gt;, and created 10 original &lt;em&gt;Black Forest Commandos&lt;/em&gt; personas, each representing a different Docker command or security tool.&lt;/p&gt;

&lt;p&gt;The blog post is published on &lt;strong&gt;JAVAPRO's&lt;/strong&gt; website:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://javapro.io/2026/03/19/10-docker-commandos-docker-commands-to-hunt-the-predator/" rel="noopener noreferrer"&gt;10 Docker Commandos: Docker Commands to Hunt the Predator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Later, &lt;strong&gt;Rabobank&lt;/strong&gt; and &lt;strong&gt;Docker, Inc.&lt;/strong&gt; jointly invited me to do a workshop on behalf of &lt;strong&gt;Docker&lt;/strong&gt; at their internal conference in Utrecht, Netherlands. The workshop was attended by 50 people, and the &lt;strong&gt;Commandos&lt;/strong&gt; traveled to Utrecht.&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/workshop/rabobank-2026" 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%2F10-commandos-asgard.png" height="447" 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/workshop/rabobank-2026" rel="noopener noreferrer" class="c-link"&gt;
            Docker Commandos v1.5 — Docker Commandos Workshop - Docker and Kubernetes Security - Docker and Kubernetes Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Docker Commandos v1.5 at Rabobank, part of their Docker Champions program. Full supply-chain security pipeline from Docker Init to cryptographic signing and zero-day runtime defense.
          &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;p&gt;The 10 &lt;strong&gt;Commandos&lt;/strong&gt; are (from left to right):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://www.dockersecurity.io/wiki/gord" rel="noopener noreferrer"&gt;&lt;strong&gt;Gord&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Docker Init&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dockersecurity.io/wiki/rothuetle" rel="noopener noreferrer"&gt;&lt;strong&gt;Rothütle&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Docker SBOM&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dockersecurity.io/wiki/jack" rel="noopener noreferrer"&gt;&lt;strong&gt;Jack&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Docker Scout&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dockersecurity.io/wiki/the-valkyrie" rel="noopener noreferrer"&gt;&lt;strong&gt;The Valkyrie&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;SBOM&lt;/strong&gt; Attestations&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dockersecurity.io/wiki/artemisia" rel="noopener noreferrer"&gt;&lt;strong&gt;Artemisia&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Docker Hardened Images&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dockersecurity.io/wiki/mina" rel="noopener noreferrer"&gt;&lt;strong&gt;Mina&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;VEX&lt;/strong&gt; Exemptions&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dockersecurity.io/wiki/ruintan" rel="noopener noreferrer"&gt;&lt;strong&gt;RuinTan&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;VEX&lt;/strong&gt; Attestations&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dockersecurity.io/wiki/captain-ahab" rel="noopener noreferrer"&gt;&lt;strong&gt;Captain Ahab&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Docker Bake&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dockersecurity.io/wiki/evie" rel="noopener noreferrer"&gt;&lt;strong&gt;Evie&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Cosign&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dockersecurity.io/wiki/agent-null" rel="noopener noreferrer"&gt;&lt;strong&gt;Agent Null&lt;/strong&gt;&lt;/a&gt; - &lt;strong&gt;Zero-Day&lt;/strong&gt; Defense&lt;/li&gt;
&lt;/ol&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%2Fqzthzseikmlxozrwhhss.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%2Fqzthzseikmlxozrwhhss.png" alt="10 Docker Commandos" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Black Forest Commandos&lt;/strong&gt; then went to Cologne for &lt;strong&gt;JCON Europe 2026&lt;/strong&gt;, where I used &lt;strong&gt;Docker Labspaces&lt;/strong&gt; to launch the &lt;em&gt;Docker Commandos&lt;/em&gt; workshop.&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/workshop/jcon-europe-2026" 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%2Fworkshops%2Fcommandos-in-cologne.png" height="597" 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/workshop/jcon-europe-2026" rel="noopener noreferrer" class="c-link"&gt;
            Java Supply Chain Security with Docker — Docker Commandos Workshop - Docker and Kubernetes Security - Docker and Kubernetes Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Docker Commandos adapted for a Java audience at JCON Europe 2026. Supply chain security, SBOMs, and attestations — using Docker tooling with a Java project as the target.
          &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;br&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose &lt;span class="nt"&gt;-f&lt;/span&gt; oci://docker.io/aerabi/docker-commandos-labspace up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The team is called &lt;em&gt;Black Forest Commandos&lt;/em&gt; because they are a continuation of the &lt;em&gt;Black Forest Shadows&lt;/em&gt; story, but the workshop series are called &lt;em&gt;Docker Commandos&lt;/em&gt; being the Dutch and German name meaning "Docker Commands".&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%2Fwww.dockersecurity.io%2Fgalleries%2Ftalks%2Fbeyond-sboms-devopsdays-zurich-2026%2Fon-stage-2.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%2Fwww.dockersecurity.io%2Fgalleries%2Ftalks%2Fbeyond-sboms-devopsdays-zurich-2026%2Fon-stage-2.jpg" alt="On the stage of DevOpsDays Zurich" width="799" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Commandos&lt;/strong&gt; went on the stage of &lt;strong&gt;DevOpsDays Zurich&lt;/strong&gt; in May 2026 and will be at &lt;strong&gt;EnterJS&lt;/strong&gt; in Mannheim in June 2026, where I will talk about "Defense Against the Dark Arts: NPM Attack".&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Black Forest Commandos&lt;/em&gt; are in:&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/commandos" 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%2F10-commandos-asgard.png" height="447" 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" rel="noopener noreferrer" class="c-link"&gt;
            Black Forest Commandos — Narrative-Driven Container Security Workshop - Docker and Kubernetes Security - Docker and Kubernetes Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            A hands-on container security workshop told through the story of 10 commandos fighting CVE monsters in Asgard. Covering SBOMs, attestations, hardened images, VEX, Docker Bake, Cosign, and zero-day defense. (Previously known as Docker Commandos).
          &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;ul&gt;
&lt;li&gt;&lt;a href="https://www.dockersecurity.io/workshop-series/docker-commandos" rel="noopener noreferrer"&gt;&lt;em&gt;Docker Commandos&lt;/em&gt; in-person workshop series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker Labspaces&lt;/strong&gt; DIY workshops&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asgard Arcade&lt;/strong&gt;: a set of card games published on &lt;a href="https://dockersecurity.io/commandos" rel="noopener noreferrer"&gt;DockerSecurity.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dockersecurity.io/blog/swiss-jass-commandos-edition-is-now-on-google-play" rel="noopener noreferrer"&gt;&lt;em&gt;Swiss Jass: Commandos Edition&lt;/em&gt;&lt;/a&gt;: a Commando-themed version of the popular Swiss card game, &lt;strong&gt;Jass&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Upcoming: &lt;em&gt;Black Forest Commandos: Asgard Mission&lt;/em&gt;, comic book that follows the &lt;strong&gt;Commandos&lt;/strong&gt; on a mission to &lt;strong&gt;Asgard&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I started doing the comic book as I was asked a few times.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Mentor the Next Generation
&lt;/h2&gt;

&lt;p&gt;I started writing in 2021 since I was mentoring a few junior engineers at work, and I realized those answers could be useful for a wider audience. I also wanted to give back to the community that had given me so much. So, mentoring others has always been more educational for me than for the mentees.&lt;/p&gt;

&lt;p&gt;Because I joined a team of senior engineers at &lt;strong&gt;JobRad&lt;/strong&gt;, I suddenly found myself without junior colleagues to mentor. To fill that gap, I turned to the open-source world:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In 2025, I joined the &lt;strong&gt;Linux Foundation Mentorship (LFX)&lt;/strong&gt; Program. I had the immense privilege of managing a cohort of 24 active mentees, successfully guiding three of them to full graduation.&lt;/li&gt;
&lt;li&gt;This term, I am acting as a primary mentor for &lt;strong&gt;The Linux Foundation&lt;/strong&gt; during &lt;strong&gt;Google Summer of Code (GSoC) 2026&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Alongside my co-mentors, I am guiding our mentee through a highly critical engineering project: "&lt;a href="https://summerofcode.withgoogle.com/programs/2026/projects/Oo4W6HPR" rel="noopener noreferrer"&gt;CISA 2025 SBOM Conformance and SPDX 3 Support&lt;/a&gt;".&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Contribute to the Core
&lt;/h2&gt;

&lt;p&gt;I still remember going to my favorite café every Sunday to write. That habit hasn't died.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I am a frequent contributor to &lt;strong&gt;DEV.to&lt;/strong&gt; (76 total articles, 37 in 2025) and &lt;strong&gt;Medium&lt;/strong&gt; (93 total, 31 in 2025), alongside my dedicated posts on &lt;a href="https://DockerSecurity.io/blog" rel="noopener noreferrer"&gt;DockerSecurity.io/blog&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I continue to author the &lt;a href="https://www.linkedin.com/newsletters/git-weekly-7237263879506935809/" rel="noopener noreferrer"&gt;&lt;em&gt;Git Weekly&lt;/em&gt;&lt;/a&gt; newsletter, which has 500 subscribers and 29 issues published so far.&lt;/li&gt;
&lt;li&gt;In 2026, I started the &lt;a href="https://www.linkedin.com/newsletters/docker-security-dispatch-7444856603549446144/" rel="noopener noreferrer"&gt;&lt;em&gt;Docker Security Dispatch&lt;/em&gt;&lt;/a&gt; to keep the &lt;strong&gt;DevSecOps&lt;/strong&gt; community updated on container security postures and &lt;strong&gt;CVE&lt;/strong&gt; alerts. With only 2 issues published so far, it has already attracted 400 subscribers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm honored to be on the &lt;strong&gt;Docker's&lt;/strong&gt; official docs workgroup, where I contribute to the guides and reference documentation. I co-authored the &lt;strong&gt;C++&lt;/strong&gt; guide and have added the security sections to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Impact at a Glance
&lt;/h2&gt;

&lt;p&gt;Since May 2025, I've had the privilege of sharing my journey and knowledge across various stages and formats. Here is a summary of my impact:&lt;/p&gt;

&lt;h3&gt;
  
  
  Speaking &amp;amp; Training Engagements
&lt;/h3&gt;

&lt;p&gt;Between May 2025 and July 2026, I will have delivered a total of &lt;strong&gt;15 engagements&lt;/strong&gt; across &lt;strong&gt;6 countries&lt;/strong&gt; and &lt;strong&gt;online&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;8 Talks&lt;/strong&gt; 🎤&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4 Workshops&lt;/strong&gt; 🛠️&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3 Interviews&lt;/strong&gt; 🎙️&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Locations included: &lt;strong&gt;Germany 🇩🇪&lt;/strong&gt; (9), &lt;strong&gt;Sweden 🇸🇪&lt;/strong&gt; (1), &lt;strong&gt;Switzerland 🇨🇭&lt;/strong&gt; (1), &lt;strong&gt;Netherlands 🇳🇱&lt;/strong&gt; (1), and &lt;strong&gt;Global/Online 🌐&lt;/strong&gt; (3).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Legend:&lt;/strong&gt; 🎤 Talk | 🛠️ Workshop | 🎙️ Interview&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Event / Venue&lt;/th&gt;
&lt;th&gt;Location&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;27.06.2025&lt;/td&gt;
&lt;td&gt;🎤 &lt;a href="https://www.dockersecurity.io/talk/bake-a-docker-cake-platformcon-2025" rel="noopener noreferrer"&gt;Bake a Docker Cake&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;PlatformCon 2025&lt;/td&gt;
&lt;td&gt;Online 🌐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;08.07.2025&lt;/td&gt;
&lt;td&gt;🛠️ &lt;a href="https://www.dockersecurity.io/workshop/wearedevelopers-world-congress-2025" rel="noopener noreferrer"&gt;Docker Deep Dive with a Docker Captain&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;WeAreDevelopers World Congress&lt;/td&gt;
&lt;td&gt;Berlin 🇩🇪&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25.07.2025&lt;/td&gt;
&lt;td&gt;🎙️ &lt;a href="https://www.dockersecurity.io/interview/tacos-podcast" rel="noopener noreferrer"&gt;Docker Captain, DevSecOps, and Developer Advocacy&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;TACOS Podcast&lt;/td&gt;
&lt;td&gt;Online 🌐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11.09.2025&lt;/td&gt;
&lt;td&gt;🛠️ &lt;a href="https://www.dockersecurity.io/workshop/jobrad-2025" rel="noopener noreferrer"&gt;10 Docker Commandos&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;JobRad GmbH&lt;/td&gt;
&lt;td&gt;Freiburg 🇩🇪&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;01.10.2025&lt;/td&gt;
&lt;td&gt;🎤 &lt;a href="https://www.dockersecurity.io/talk/ctencf-birthday-bash-freiburg" rel="noopener noreferrer"&gt;5 Docker Commandos&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;#cTENcf Birthday Bash Freiburg&lt;/td&gt;
&lt;td&gt;Freiburg 🇩🇪&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;06.11.2025&lt;/td&gt;
&lt;td&gt;🎤 Node.js Supply Chain Security + dhi&lt;/td&gt;
&lt;td&gt;Node.js Meetup #46&lt;/td&gt;
&lt;td&gt;Berlin 🇩🇪&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;03.02.2026&lt;/td&gt;
&lt;td&gt;🎤 &lt;a href="https://www.dockersecurity.io/talk/dockerize-securely-jfokus-2026" rel="noopener noreferrer"&gt;Dockerize Securely: SBOMs + Attestations + Bake&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Jfokus 2026&lt;/td&gt;
&lt;td&gt;Stockholm 🇸🇪&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27.03.2026&lt;/td&gt;
&lt;td&gt;🛠️ &lt;a href="https://www.dockersecurity.io/workshop/rabobank-2026" rel="noopener noreferrer"&gt;Docker Commandos v1.5&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Rabobank Utrecht&lt;/td&gt;
&lt;td&gt;Utrecht 🇳🇱&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20.04.2026&lt;/td&gt;
&lt;td&gt;🛠️ &lt;a href="https://www.dockersecurity.io/workshop/jcon-europe-2026" rel="noopener noreferrer"&gt;Java Supply Chain Security with Docker&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;JCON Europe 2026&lt;/td&gt;
&lt;td&gt;Cologne 🇩🇪&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20.04.2026&lt;/td&gt;
&lt;td&gt;🎙️ &lt;a href="https://www.dockersecurity.io/interview/baruch-sadogursky-jcon-2026" rel="noopener noreferrer"&gt;Interview with Baruch Sadogursky at JCON Europe&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;JAVAPRO / Tessl&lt;/td&gt;
&lt;td&gt;Cologne 🇩🇪&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24.04.2026&lt;/td&gt;
&lt;td&gt;🎙️ &lt;a href="https://www.dockersecurity.io/interview/jobrad-podcast-writing-tech-book" rel="noopener noreferrer"&gt;Writing a Tech Book: Docker and Kubernetes Security&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;JobRad Podcast: Increase Cycle Time&lt;/td&gt;
&lt;td&gt;Freiburg 🇩🇪&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;06.05.2026&lt;/td&gt;
&lt;td&gt;🎤 &lt;a href="https://www.dockersecurity.io/talk/beyond-sboms-devopsdays-zurich-2026" rel="noopener noreferrer"&gt;Beyond SBOMs: The Future of Container Supply Chain Security&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;DevOpsDays Zurich 2026&lt;/td&gt;
&lt;td&gt;Zurich 🇨🇭&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16.06.2026&lt;/td&gt;
&lt;td&gt;🎤 &lt;a href="https://www.dockersecurity.io/talk/defense-against-the-dark-arts-npm-attack-enterjs-2026" rel="noopener noreferrer"&gt;Defense Against the Dark Arts: NPM Attack&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;EnterJS 2026&lt;/td&gt;
&lt;td&gt;Mannheim 🇩🇪&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;09.07.2026&lt;/td&gt;
&lt;td&gt;🎤 &lt;a href="https://www.dockersecurity.io/talk/dockerize-java-securely-wearedevelopers-2026" rel="noopener noreferrer"&gt;Dockerize Java Securely: SBOMs + Attestations + Bake&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;WeAreDevelopers World Congress&lt;/td&gt;
&lt;td&gt;Berlin 🇩🇪&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10.07.2026&lt;/td&gt;
&lt;td&gt;🎤 &lt;a href="https://www.dockersecurity.io/talk/beyond-sboms-wearedevelopers-2026" rel="noopener noreferrer"&gt;Beyond SBOMs: The Future of Container Supply Chain Security&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;WeAreDevelopers World Congress&lt;/td&gt;
&lt;td&gt;Berlin 🇩🇪&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Pillars of Impact
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pillar of Impact&lt;/th&gt;
&lt;th&gt;Key Highlights&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Community Leadership&lt;/td&gt;
&lt;td&gt;Evolving local meetups into the CNCF Cloud Native Freiburg chapter with ~1,000 combined members.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Content &amp;amp; Authorship&lt;/td&gt;
&lt;td&gt;Publishing &lt;em&gt;Docker and Kubernetes Security&lt;/em&gt;, launching DockerSecurity.io, and maintaining multiple blogs and newsletters.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speaking &amp;amp; Training&lt;/td&gt;
&lt;td&gt;Delivering the &lt;em&gt;Docker Commandos&lt;/em&gt; workshops globally, from Jfokus in Sweden to JCON in Cologne.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open Source Mentorship&lt;/td&gt;
&lt;td&gt;Managing 24 LFX mentees and serving as a primary mentor for GSoC 2026.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Conclusion: The Path Ahead
&lt;/h2&gt;

&lt;p&gt;The theme of the year has been &lt;strong&gt;Education by Storytelling&lt;/strong&gt;. It started with the &lt;em&gt;Black Forest Shadows&lt;/em&gt; series, evolved into the &lt;em&gt;Black Forest Commandos&lt;/em&gt;, and now I'm working on a comic book about the Commandos' mission to Asgard. There also have been some spin-offs, like the &lt;em&gt;Swiss Jass: Commandos Edition&lt;/em&gt; card game or my other article on &lt;strong&gt;JAVAPRO&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://javapro.io/2026/04/23/the-whispering-jar-java-security-lessons-hidden-in-a-fantasy-tale/" rel="noopener noreferrer"&gt;The Whispering JAR: Java Security Lessons Hidden in a Fantasy Tale&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm excited to see what the next year will bring. Perhaps I'll see you in &lt;strong&gt;Black Forest&lt;/strong&gt;, in &lt;strong&gt;Asgard&lt;/strong&gt;, or maybe at the next &lt;strong&gt;KubeCon&lt;/strong&gt;!&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%2Fb1zhdveanklh775qes4h.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%2Fb1zhdveanklh775qes4h.png" alt="Gord and Rothütle in the Black Forest" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>kubernetes</category>
      <category>security</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Book Review: Operational AI with Docker</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Wed, 20 May 2026 07:32:00 +0000</pubDate>
      <link>https://forem.com/docker/book-review-operational-ai-with-docker-73d</link>
      <guid>https://forem.com/docker/book-review-operational-ai-with-docker-73d</guid>
      <description>&lt;p&gt;In my &lt;a href="https://www.dockersecurity.io/blog/docker-read-list-2026-q1" rel="noopener noreferrer"&gt;Q1 2026 Docker Read List&lt;/a&gt;, I dropped a little hint that I was involved in reviewing an exciting upcoming book for Q2. Well, the secret is finally out! I had the absolute honor of being a technical reviewer for &lt;em&gt;Operational AI with Docker&lt;/em&gt;, written by my friends and fellow experts &lt;strong&gt;Ajeet Singh Raina&lt;/strong&gt; and &lt;strong&gt;Harsh Manvar&lt;/strong&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/blog/docker-read-list-2026-q1" 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%2Fdocker-read-list-2026-q1.png" height="447" 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/blog/docker-read-list-2026-q1" rel="noopener noreferrer" class="c-link"&gt;
            The Complete Docker Read List: Q1 2026 Edition - Docker and Kubernetes Security - Docker and Kubernetes Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            A curated reading list of the best books on Docker and Kubernetes for the first quarter of 2026, featuring releases from Docker Captains and industry experts.
          &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;p&gt;I love a good narrative in my technical books. The authors definitely brought some drama to the text, which I absolutely loved about this book. I had the chance to review the last four chapters of the book, and would love to share some exclusive behind-the-scenes insights about the book, as well as my thoughts on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authors
&lt;/h2&gt;

&lt;p&gt;Well, the authors need no introduction, but I'll still give you one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ajeet Singh Raina&lt;/strong&gt; was a Docker Captain for six years until he was hired by Docker as a Developer Advocate. He was my first point of contact when I started my journey in the Docker community, and we published three blog posts together on the Docker blog. He is an absolute legend, the man behind the Collabnix Community, and a great mentor to many in the container ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Harsh Manvar&lt;/strong&gt; is a Senior Software Engineer at Oracle, a Docker Captain, and a CNCF Ambassador. Similarly, he is also an absolute star in the Indian container ecosystem, and has been a great mentor to many in the community. I had the pleasure of meeting him in person at the Docker Captains Summit in 2025, when he shared with me his plans for the book, and I was immediately excited about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Book's Final Act: From MCP to KAgent
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chapter 6&lt;/strong&gt;. The authors introduced the &lt;em&gt;Docker MCP Gateway&lt;/em&gt; flawlessly. Before getting into the details, they did a great job of setting the stage by showing exactly why we need a gateway, and why it is painful to connect different MCP servers directly. It's great that the authors let you feel the pain, instead of just telling you about it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chapters 7 and 8&lt;/strong&gt;. These chapters dive heavily into using AI agents and orchestrating multiple AI agents using Python. The chapters are packed with multiple examples and Docker Compose projects. The chapters might feel a bit overwhelming or tedious for readers, but it perfectly shows how one can use AI agents in a real-world scenario, and create a complex system that can solve a problem end-to-end. These two chapters are practically every Hollywood movie 70 minutes in, when it feels we're at impossible odds, and there is no way out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chapter 9&lt;/strong&gt;. The grand finale covers Docker Sandboxes, Docker Agent, and KAgent. Let me tell you, this is an awesome way to end the book. It suddenly becomes clear that any pain we had to endure in Chapter 8 was entirely intentional: it was just to make the out-of-the-box experience of Docker Agent and KAgent shine! Suddenly eagles come and Frodo is on his way to Valinor!&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The book is purely practical, impossibly fresh, and skillfully dramatic. It teaches you the basics and the advanced features of Docker MCP, Docker Agent, and KAgent. It lets you feel the pain and the joy of better tools. It is a must-read for anyone interested in the future of AI and how it can be operationalized using Docker. It's a great read, sometimes a bit overwhelming, but always rewarding. You need it in your library, and you need to read it.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>ai</category>
      <category>books</category>
    </item>
    <item>
      <title>Swiss Jass: Commandos Edition is Now on the Google Play Store</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Mon, 18 May 2026 12:18:30 +0000</pubDate>
      <link>https://forem.com/aerabi/swiss-jass-commandos-edition-is-now-on-the-google-play-store-iac</link>
      <guid>https://forem.com/aerabi/swiss-jass-commandos-edition-is-now-on-the-google-play-store-iac</guid>
      <description>&lt;p&gt;&lt;strong&gt;Swiss Jass: Commandos Edition&lt;/strong&gt; is now available on the Google Play Store! This mobile card game app brings the classic Swiss card game Jass to your phone, featuring a unique Black Forest Commandos theme.&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://play.google.com/store/apps/details?id=dev.containersecurity.games.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%2Fplay-lh.googleusercontent.com%2F6qhEe4YmmyqfTBd09Xs60o1aRcZLci2GvolpGbsWc2jlHXHj2duOawfdgWdaxhSa698HmU8Vu81PZgAlX5qy3TU" height="512" class="m-0" width="512"&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://play.google.com/store/apps/details?id=dev.containersecurity.games.jass" rel="noopener noreferrer" class="c-link"&gt;
            Swiss Jass: Commandos Edition - Apps on Google Play
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Play a mobile-friendly version of Jass with Black Forest Commandos characters.
          &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.gstatic.com%2Fandroid%2Fmarket_images%2Fweb%2Ffavicon_v3.ico" width="32" height="32"&gt;
          play.google.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The book &lt;em&gt;Docker and Kubernetes Security&lt;/em&gt; started with a battle scene between &lt;strong&gt;Gord&lt;/strong&gt;, &lt;strong&gt;Rothütle&lt;/strong&gt;, &lt;strong&gt;Jack&lt;/strong&gt;, and a CVE monster. Those three characters we met again in &lt;em&gt;Black Forest Shadow&lt;/em&gt;, with &lt;strong&gt;Evie&lt;/strong&gt; joining them. The events of &lt;em&gt;Black Forest Shadow&lt;/em&gt; are set in late 1865, happening over 3 days in the Black Forest. The Commandos are on a mission to stop CVE monsters from spreading chaos across the region.&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;p&gt;Between those events and the &lt;em&gt;Asgard Mission&lt;/em&gt;, the characters recruit new members: &lt;strong&gt;Mina&lt;/strong&gt; (aka Wilhelmina), &lt;strong&gt;Agent Null&lt;/strong&gt;, &lt;strong&gt;The Valkyrie&lt;/strong&gt;, and &lt;strong&gt;Captain Ahab&lt;/strong&gt;. The Commandos are now a team of 8, and they are summoned by Thor to go to Asgard and stop the CVE monsters from invading the realm of the gods. During this mission, two new Commandos join them: &lt;strong&gt;Artemisia&lt;/strong&gt; and &lt;strong&gt;RuinTan&lt;/strong&gt;.&lt;br&gt;
Those events are depicted in the workshop series &lt;em&gt;Docker Commandos&lt;/em&gt; as well as the upcoming comic book &lt;em&gt;Black Forest Commandos: Asgard Mission&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Characters
&lt;/h2&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%2Fjo9q0ti6bk7n5y1yzsx4.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%2Fjo9q0ti6bk7n5y1yzsx4.png" alt="Black Forest Commandos" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;Black Forest Commandos&lt;/em&gt; are a team of 10 characters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gord&lt;/strong&gt;: The leader of the Commandos, a skilled strategist and fighter. She wears plate armor and wields a sword glowing blue with the power of the &lt;em&gt;Okterakt&lt;/em&gt;, a time-manipulation device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rothütle&lt;/strong&gt;: The second-in-command, a master of strategy and tactics. He wears a red fedora and an orange T-shirt, showing that he's a member of the Red Team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jack&lt;/strong&gt;: The wildcard of the group, he started off helping the CVE monsters but later switched sides to join the Commandos. He was a miner in the &lt;em&gt;Black Forest Shadow&lt;/em&gt; book, but in the &lt;em&gt;Asgard Mission&lt;/em&gt; he's a cyborg soldier with advanced scouting abilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evie&lt;/strong&gt;: The cowgirl and infiltrator of the Commandos. She wears a brown cowboy hat and a leather jacket, is a skilled sniper and scout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mina&lt;/strong&gt;: The pale undead assassin of the Commandos. She had a dispute with Hades, the god of the underworld, and was cursed to be alive. She can't eat, but gets energy from photosynthesis. She wears black tactical gear and has dark hair.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Null&lt;/strong&gt;: The masked tactical soldier of the Commandos. No one knows anything about him, not even his name. He likes an MP5SD and wears a skull balaclava.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Valkyrie&lt;/strong&gt;: The blonde guardian of the Commandos. She wears modern tactical armor and has tattooed arms. She's a fierce fighter and protector of the team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Captain Ahab&lt;/strong&gt;: The bearded veteran of the Commandos. He's a naval captain and mostly chauffeurs the team around.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Artemisia&lt;/strong&gt;: An Amazonian warrior who joins the Commandos during the Asgard Mission. She has fought in the Battle of Salamis and was sent to Asgard after she was angered by Zeus for not siding with the Olympians during the battle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RuinTan&lt;/strong&gt;: The hulking champion of the Commandos. He was honored with immortality by the prophet Zarathustra in 1500 BC, and bears the name RuinTan, literally meaning "bronze-bodied". He wears heavy golden armor and wields a massive sword.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Gameplay
&lt;/h2&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%2F09agc60nwrf1uteep5if.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%2F09agc60nwrf1uteep5if.jpg" alt="Swiss Jass: Commandos Edition trump select" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Swiss Jass&lt;/strong&gt;, also known as &lt;strong&gt;Schieber Jass&lt;/strong&gt;, is a popular trick-taking card game in Switzerland. The game is played with a 36-card deck, which is a standard deck with the 2s, 3s, 4s, and 5s removed. The Swiss suits are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bells (Schellen)&lt;/li&gt;
&lt;li&gt;Acorns (Eicheln)&lt;/li&gt;
&lt;li&gt;Roses (Rosen)&lt;/li&gt;
&lt;li&gt;Shields (Schilten)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the &lt;em&gt;Commandos Edition&lt;/em&gt;, you can use the Commandos suits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shields&lt;/li&gt;
&lt;li&gt;Attestations&lt;/li&gt;
&lt;li&gt;Hardened&lt;/li&gt;
&lt;li&gt;Signatures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each suit has 9 cards, ranked from highest to lowest as follows:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank (French)&lt;/th&gt;
&lt;th&gt;Rank (Swiss)&lt;/th&gt;
&lt;th&gt;Commandos name&lt;/th&gt;
&lt;th&gt;Points&lt;/th&gt;
&lt;th&gt;Points in Trump&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A = Ace&lt;/td&gt;
&lt;td&gt;D = Deuce&lt;/td&gt;
&lt;td&gt;Artemisia&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K = King&lt;/td&gt;
&lt;td&gt;K = König&lt;/td&gt;
&lt;td&gt;Gord&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q = Queen&lt;/td&gt;
&lt;td&gt;O = Ober&lt;/td&gt;
&lt;td&gt;Rothütle&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;J = Jack&lt;/td&gt;
&lt;td&gt;U = Under&lt;/td&gt;
&lt;td&gt;Jack&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;10 / Banner&lt;/td&gt;
&lt;td&gt;Agent Null&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Mina&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;The Valkyrie&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Captain Ahab&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;RuinTan&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The game is played with four players in two fixed partnerships. The objective is to be the first team to reach 1000 points across multiple rounds. Each round consists of 9 tricks, and players must follow suit if they can. Players can always play a trump card.&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%2Fpxqdickrpg01q504srfb.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%2Fpxqdickrpg01q504srfb.jpg" alt="Swiss Jass: Commandos Edition table" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the beginning of each round, players can choose a trump suit or play &lt;em&gt;Schieben&lt;/em&gt; to pass the decision to their partner. In the trump suit, &lt;strong&gt;Jack the Buur&lt;/strong&gt; (the Jack) is the highest card, followed by &lt;strong&gt;Mina the Nell (the 9)&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;You can download &lt;strong&gt;Swiss Jass: Commandos Edition&lt;/strong&gt; on the Google Play Store &lt;a href="https://play.google.com/store/apps/details?id=dev.containersecurity.games.jass" rel="noopener noreferrer"&gt;here&lt;/a&gt;. The app is free to play and has no ads or in-app purchases.&lt;/p&gt;

&lt;p&gt;On the website, there is also the &lt;strong&gt;Asgard Arcade&lt;/strong&gt;, a collection of mini-games inspired by the Commandos and the Asgard Mission. You can play an &lt;a href="https://dockersecurity.io/commandos/jass" rel="noopener noreferrer"&gt;online version of Jass&lt;/a&gt; there as well, together with 3 other mini-games:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dockersecurity.io/commandos/battle" rel="noopener noreferrer"&gt;&lt;strong&gt;Asgard Siege&lt;/strong&gt;&lt;/a&gt;: Match the right commando to the right CVE monster to defend Asgard.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dockersecurity.io/commandos/blackjack" rel="noopener noreferrer"&gt;&lt;strong&gt;Blackjack&lt;/strong&gt;&lt;/a&gt;: A classic card game where you try to get as close to 21 points as possible without going over.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dockersecurity.io/commandos/game" rel="noopener noreferrer"&gt;&lt;strong&gt;Reference Deck&lt;/strong&gt;&lt;/a&gt;: Simple card-comparison game to learn about each commando's abilities.&lt;/li&gt;
&lt;/ul&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" 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%2F10-commandos-asgard.png" height="447" 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" rel="noopener noreferrer" class="c-link"&gt;
            Black Forest Commandos — Narrative-Driven Container Security Workshop - Docker and Kubernetes Security - Docker and Kubernetes Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            A hands-on container security workshop told through the story of 10 commandos fighting CVE monsters in Asgard. Covering SBOMs, attestations, hardened images, VEX, Docker Bake, Cosign, and zero-day defense. (Previously known as Docker Commandos).
          &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;


</description>
      <category>gamedev</category>
      <category>docker</category>
      <category>security</category>
    </item>
    <item>
      <title>Generating SBOM with Docker Scout</title>
      <dc:creator>Mohammad-Ali A'RÂBI</dc:creator>
      <pubDate>Thu, 23 Apr 2026 18:40:34 +0000</pubDate>
      <link>https://forem.com/docker/generating-sbom-with-docker-scout-27eg</link>
      <guid>https://forem.com/docker/generating-sbom-with-docker-scout-27eg</guid>
      <description>&lt;p&gt;Knowing what's inside your container is the first step to securing it. In the first commando mission, we dockerized a Java 26 project using Docker Init. Now that we have an image, it's time to see what's actually in it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Mission: Who Lives in Asgard?
&lt;/h2&gt;

&lt;p&gt;Rothütle, the tactician of the Docker Commandos, asks Thor for a list of all Asgard residents. Why? Because you can't defend a city if you don't know who's inside. By getting this list, you can later cross-reference it with known threats and identify the shadows in disguise.&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%2F4p1st5ec20jpfc3nbc93.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%2F4p1st5ec20jpfc3nbc93.png" alt="Rothütle asking for the SBOM" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Docker Desktop that is not too old, or&lt;/li&gt;
&lt;li&gt;Docker Scout CLI plugin installed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To make sure you have the Docker Scout plugin, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker scout &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Generate the SBOM
&lt;/h2&gt;

&lt;p&gt;We'll use &lt;code&gt;docker scout sbom&lt;/code&gt; to peek inside our image. If you followed the previous post, you have an image built from your project. Let's assume you tagged it &lt;code&gt;hello-wowlrd:latest&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker scout sbom hello-wowlrd:latest &lt;span class="nt"&gt;--format&lt;/span&gt; list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;--format list&lt;/code&gt; flag gives you a clean table of all the packages, their versions, and types (e.g., &lt;code&gt;deb&lt;/code&gt;, &lt;code&gt;maven&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Exporting to Standard Formats
&lt;/h2&gt;

&lt;p&gt;While a table is great for humans, tools prefer standard formats like SPDX or CycloneDX. Let's export our SBOM to a JSON file using the SPDX format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker scout sbom hello-wowlrd:latest &lt;span class="nt"&gt;--format&lt;/span&gt; spdx &lt;span class="nt"&gt;--output&lt;/span&gt; sbom.spdx.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you investigate the file, you will see a detailed inventory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jq &lt;span class="nb"&gt;.&lt;/span&gt; sbom.spdx.json | less
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This file contains every package, its version, and its license—perfect for compliance and automated scanning. You can check available formats by running &lt;code&gt;docker scout sbom --help&lt;/code&gt;. Try exporting in CycloneDX format and compare it with the SPDX output!&lt;/p&gt;

&lt;h2&gt;
  
  
  Exercise: Comparing Base Images
&lt;/h2&gt;

&lt;p&gt;One of the best ways to understand the value of an SBOM is to compare different base images. For example, let's look at the difference between a standard Node.js image and its Alpine counterpart:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker scout sbom node:25 &lt;span class="nt"&gt;--format&lt;/span&gt; list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker scout sbom node:25-alpine &lt;span class="nt"&gt;--format&lt;/span&gt; list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll notice that the Alpine version is significantly smaller, with fewer packages. This is why "minimal base images" are a core tenet of container security—fewer residents mean fewer places for CVE monsters to hide.&lt;/p&gt;

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

&lt;p&gt;Now that we have our list of residents, the next mission is to find the monsters. In the next post, we'll use Docker Scout to scan for CVEs.&lt;/p&gt;

&lt;p&gt;Want the full mission? Visit &lt;a href="https://dev.to/commandos"&gt;Docker Commandos&lt;/a&gt; or &lt;a href="https://dev.to/contact"&gt;request a workshop&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>commandos</category>
    </item>
    <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/docker/dockerizing-a-java-26-project-with-docker-init-2agp</link>
      <guid>https://forem.com/docker/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>
  </channel>
</rss>
