<?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>DEV Community: Ladipo Samuel</title>
    <description>The latest articles on DEV Community by Ladipo Samuel (@ladipo_samuel_7cfaa827bf5).</description>
    <link>https://dev.to/ladipo_samuel_7cfaa827bf5</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1667792%2F9b60d3c4-48b5-4943-a8e1-0c1e2da4b290.jpeg</url>
      <title>DEV Community: Ladipo Samuel</title>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ladipo_samuel_7cfaa827bf5"/>
    <language>en</language>
    <item>
      <title>dockerizing your fastapi application</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Thu, 16 Jul 2026 09:30:20 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/dockerizing-your-fastapi-application-4hi9</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/dockerizing-your-fastapi-application-4hi9</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/ladipo_samuel_7cfaa827bf5/docker-series-part-3dockerizing-your-first-application-1ji6" class="crayons-story__hidden-navigation-link"&gt;Docker Series Part 3: Dockerizing Your First Application.&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="/ladipo_samuel_7cfaa827bf5" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1667792%2F9b60d3c4-48b5-4943-a8e1-0c1e2da4b290.jpeg" alt="ladipo_samuel_7cfaa827bf5 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/ladipo_samuel_7cfaa827bf5" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ladipo Samuel
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ladipo Samuel
                
              
              &lt;div id="story-author-preview-content-4157029" 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="/ladipo_samuel_7cfaa827bf5" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1667792%2F9b60d3c4-48b5-4943-a8e1-0c1e2da4b290.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ladipo Samuel&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/ladipo_samuel_7cfaa827bf5/docker-series-part-3dockerizing-your-first-application-1ji6" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 16&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/ladipo_samuel_7cfaa827bf5/docker-series-part-3dockerizing-your-first-application-1ji6" id="article-link-4157029"&gt;
          Docker Series Part 3: Dockerizing Your First Application.
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&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/python"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;python&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&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/ladipo_samuel_7cfaa827bf5/docker-series-part-3dockerizing-your-first-application-1ji6" 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/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/ladipo_samuel_7cfaa827bf5/docker-series-part-3dockerizing-your-first-application-1ji6#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;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;
            5 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


</description>
      <category>api</category>
      <category>docker</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Docker Series Part 3: Dockerizing Your First Application.</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Thu, 16 Jul 2026 09:30:02 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/docker-series-part-3dockerizing-your-first-application-1ji6</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/docker-series-part-3dockerizing-your-first-application-1ji6</guid>
      <description>&lt;p&gt;In the first two parts of this series, we focused on understanding Docker.&lt;/p&gt;

&lt;p&gt;We talked about why Docker was created, why the infamous "works on my machine" problem existed for years, and how Docker solved it. We also looked behind the scenes at Docker's architecture and understood the relationship between the Docker Client, Docker Engine, Docker Hub, Images, and Containers.&lt;/p&gt;

&lt;p&gt;Now it's time to put all of that knowledge into practice.&lt;/p&gt;

&lt;p&gt;Today, we'll take a simple FastAPI project and package it into a Docker Image that can run consistently across different environments. The project itself is intentionally small because the goal isn't to learn FastAPI: it's to understand how Docker packages applications.&lt;/p&gt;

&lt;p&gt;I'll also attach the GitHub repository used in this article so you can clone it and follow along.&lt;/p&gt;

&lt;p&gt;github link: &lt;a href="https://github.com/ladicodes/docker-demo" rel="noopener noreferrer"&gt;https://github.com/ladicodes/docker-demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our Project&lt;/p&gt;

&lt;p&gt;Before introducing Docker, our project looks like this:&lt;/p&gt;

&lt;p&gt;docker-workshop-api/&lt;br&gt;
│&lt;br&gt;
├── main.py&lt;br&gt;
├── requirements.txt&lt;br&gt;
└── README.md&lt;/p&gt;

&lt;p&gt;At this stage, it's just another Python application.&lt;/p&gt;

&lt;p&gt;It works because our machine already has Python installed, along with every dependency the project requires.&lt;/p&gt;

&lt;p&gt;But if we send this same project to another developer, they may run into completely different problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different Python versions&lt;/li&gt;
&lt;li&gt;Missing dependencies&lt;/li&gt;
&lt;li&gt;Different operating systems&lt;/li&gt;
&lt;li&gt;Different environment configurations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is exactly the kind of inconsistency Docker was designed to eliminate. Instead of sending just our source code, Docker allows us to package the entire runtime environment alongside the application.&lt;/p&gt;

&lt;p&gt;The Dockerfile: Docker's Instruction Manual&lt;br&gt;
Docker doesn't magically understand how to package your application. You have to tell it exactly what to do: that's where the Dockerfile comes in.&lt;/p&gt;

&lt;p&gt;A Dockerfile is simply a text file containing step-by-step instructions Docker follows to build an Image.&lt;/p&gt;

&lt;p&gt;Let's build ours one instruction at a time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Choosing a Base Image&lt;/strong&gt;&lt;br&gt;
FROM python:3.12-slim&lt;/p&gt;

&lt;p&gt;Every Docker Image starts from another Image. Instead of installing Python ourselves, we're using the official Python Image published on Docker Hub.&lt;br&gt;
You'll also notice we're using python:3.12-slim instead of the regular Python Image.&lt;/p&gt;

&lt;p&gt;The slim variant removes unnecessary packages while keeping everything needed to run Python applications. This produces smaller Images, which means faster downloads, quicker deployments, and lower storage usage. We'll go much deeper into Image optimization in Part 4.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Setting the Working Directory&lt;/strong&gt;&lt;br&gt;
WORKDIR /app&lt;/p&gt;

&lt;p&gt;Think of this as running:&lt;/p&gt;

&lt;p&gt;cd /app&lt;/p&gt;

&lt;p&gt;inside the container.&lt;/p&gt;

&lt;p&gt;From this point onward, every instruction in the Dockerfile executes relative to this directory. Having a dedicated working directory keeps the Image organized and prevents files from being scattered throughout the filesystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Copying Dependencies First&lt;/strong&gt;&lt;br&gt;
COPY requirements.txt .&lt;/p&gt;

&lt;p&gt;This line copies only the dependency file into the Image. You might be wondering: Why not copy everything immediately?&lt;br&gt;
The answer is Docker Layers. Docker builds Images layer by layer.&lt;/p&gt;

&lt;p&gt;If your dependencies rarely change but your application code changes frequently, Docker can reuse the dependency layer during future builds instead of reinstalling everything from scratch. That dramatically speeds up build times. It's a small decision now that saves minutes later in larger projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Installing Dependencies&lt;/strong&gt;&lt;br&gt;
RUN pip install --no-cache-dir -r requirements.txt&lt;/p&gt;

&lt;p&gt;The RUN instruction executes commands while the Image is being built. Here, Docker installs every package listed in requirements.txt.&lt;/p&gt;

&lt;p&gt;The --no-cache-dir flag tells pip not to keep unnecessary installation cache files, helping reduce the final Image size. Every instruction like this becomes part of the final Image.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Copying the Application&lt;/strong&gt;&lt;br&gt;
COPY . .&lt;/p&gt;

&lt;p&gt;Now that our dependencies are installed, we copy the rest of the project into the Image. At this point, Docker has everything it needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application code&lt;/li&gt;
&lt;li&gt;Dependencies&lt;/li&gt;
&lt;li&gt;Configuration&lt;/li&gt;
&lt;li&gt;Runtime environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application has officially been packaged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Documenting the Application Port&lt;/strong&gt;&lt;br&gt;
EXPOSE 8000&lt;/p&gt;

&lt;p&gt;This tells anyone using the Image that the application is expected to listen on port 8000. It's worth noting that EXPOSE doesn't automatically make the application accessible from your computer. It simply documents which port the application uses inside the container.&lt;/p&gt;

&lt;p&gt;We'll map that port when we actually run the container.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Starting the Application&lt;/strong&gt;&lt;br&gt;
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]&lt;/p&gt;

&lt;p&gt;This instruction defines what should happen whenever a container starts from this Image. In our case, Docker launches the FastAPI application using Uvicorn.&lt;/p&gt;

&lt;p&gt;You may notice the application listens on:&lt;/p&gt;

&lt;p&gt;0.0.0.0&lt;br&gt;
This often confuses beginners. 0.0.0.0 isn't the address you'll open in your browser. Instead, it tells the application to listen on all available network interfaces inside the container.&lt;/p&gt;

&lt;p&gt;From your own computer, you'll access the application through:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8000" rel="noopener noreferrer"&gt;http://localhost:8000&lt;/a&gt;, by entering uvicorn main:app --reload&lt;/p&gt;

&lt;p&gt;because Docker maps your computer's port to the container's port.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building Our First Docker Image&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now that our Dockerfile is complete, it's time to package the application.&lt;/p&gt;

&lt;p&gt;Run:&lt;/p&gt;

&lt;p&gt;docker build -t docker-workshop-api .&lt;/p&gt;

&lt;p&gt;Let's quickly break this command down.&lt;/p&gt;

&lt;p&gt;docker build: Builds a Docker Image.&lt;/p&gt;

&lt;p&gt;-t: Assigns a name (tag) to the Image.&lt;/p&gt;

&lt;p&gt;docker-workshop-api: The name we'll use whenever we want to create containers from this Image.&lt;/p&gt;

&lt;p&gt;dot(.): Perhaps the most overlooked part of the command. The dot tells Docker to use the current folder as the build context, allowing it to locate the Dockerfile and every file referenced by COPY.&lt;br&gt;
Once the build completes, you can confirm the Image exists by running: docker images&lt;/p&gt;

&lt;p&gt;You'll now see your newly created Image listed locally. At this point, nothing is running yet. You've simply created the package.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a Running Container&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now we can create a running application from that Image.&lt;/p&gt;

&lt;p&gt;docker run -p 8000:8000 docker-workshop-api&lt;/p&gt;

&lt;p&gt;This is where many beginners accidentally mix up Images and Containers.&lt;/p&gt;

&lt;p&gt;Remember:&lt;/p&gt;

&lt;p&gt;An Image is the package. A Container is the running instance of that package.&lt;/p&gt;

&lt;p&gt;The docker run command creates a brand-new Container from the Image before starting the application.&lt;/p&gt;

&lt;p&gt;The -p 8000:8000 flag maps:&lt;/p&gt;

&lt;p&gt;Your Computer (8000)&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
Container (8000)&lt;/p&gt;

&lt;p&gt;This allows your browser to communicate with the application running inside Docker.&lt;/p&gt;

&lt;p&gt;If everything goes well, you'll see something similar to:&lt;/p&gt;

&lt;p&gt;INFO: Uvicorn running on &lt;a href="http://0.0.0.0:8000" rel="noopener noreferrer"&gt;http://0.0.0.0:8000&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although the application listens on 0.0.0.0 inside the container, you should open:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8000/docs" rel="noopener noreferrer"&gt;http://localhost:8000/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From there, FastAPI's interactive documentation lets you test every endpoint and confirm your application is running successfully inside Docker.&lt;/p&gt;

&lt;p&gt;Where We Go From Here&lt;/p&gt;

&lt;p&gt;Congratulations.&lt;/p&gt;

&lt;p&gt;You've just Dockerized your first application.&lt;/p&gt;

&lt;p&gt;More importantly, you've connected the concepts we've covered throughout this series:&lt;/p&gt;

&lt;p&gt;Python Project&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
Dockerfile&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
docker build&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
Docker Image&lt;br&gt;
        │&lt;br&gt;
docker run&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
Docker Container&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
Running Application&lt;/p&gt;

&lt;p&gt;Understanding this flow is far more valuable than memorizing commands because every Docker project, whether it's a personal project or a production system follows this same journey.&lt;/p&gt;

&lt;p&gt;But we're not done yet. Our application works, but there are still important questions to answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why are some Docker Images over 1GB, while others are only a few hundred megabytes?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why do some projects rebuild in 5 seconds, while others take 5 minutes?&lt;br&gt;
How do production teams build Images that are smaller, faster, and more secure?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's exactly what we'll explore in Part 4, where we'll dive into Docker layers, caching, .dockerignore, base Images, and practical techniques for optimizing Docker Images like experienced engineers.&lt;/p&gt;

&lt;p&gt;See you in the next part.🚀&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>docker</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>part 2 on understanding docker</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Mon, 06 Jul 2026 17:53:03 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/part-2-on-understanding-docker-4c3k</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/part-2-on-understanding-docker-4c3k</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/ladipo_samuel_7cfaa827bf5/docker-explained-part-2-understanding-dockers-architecture-images-containers-1fop" class="crayons-story__hidden-navigation-link"&gt;Docker Explained (Part 2): Understanding Docker's Architecture, Images &amp;amp; Containers&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="/ladipo_samuel_7cfaa827bf5" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1667792%2F9b60d3c4-48b5-4943-a8e1-0c1e2da4b290.jpeg" alt="ladipo_samuel_7cfaa827bf5 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/ladipo_samuel_7cfaa827bf5" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ladipo Samuel
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ladipo Samuel
                
              
              &lt;div id="story-author-preview-content-4081746" 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="/ladipo_samuel_7cfaa827bf5" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1667792%2F9b60d3c4-48b5-4943-a8e1-0c1e2da4b290.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ladipo Samuel&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/ladipo_samuel_7cfaa827bf5/docker-explained-part-2-understanding-dockers-architecture-images-containers-1fop" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 6&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/ladipo_samuel_7cfaa827bf5/docker-explained-part-2-understanding-dockers-architecture-images-containers-1fop" id="article-link-4081746"&gt;
          Docker Explained (Part 2): Understanding Docker's Architecture, Images &amp;amp; Containers
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/architecture"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;architecture&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&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/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&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/ladipo_samuel_7cfaa827bf5/docker-explained-part-2-understanding-dockers-architecture-images-containers-1fop" 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/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/ladipo_samuel_7cfaa827bf5/docker-explained-part-2-understanding-dockers-architecture-images-containers-1fop#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;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;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


</description>
      <category>architecture</category>
      <category>beginners</category>
      <category>docker</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Docker Explained (Part 2): Understanding Docker's Architecture, Images &amp; Containers</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Mon, 06 Jul 2026 17:29:51 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/docker-explained-part-2-understanding-dockers-architecture-images-containers-1fop</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/docker-explained-part-2-understanding-dockers-architecture-images-containers-1fop</guid>
      <description>&lt;p&gt;One of the biggest mistakes people make when learning Docker is jumping straight into commands without understanding what's happening behind the scenes.&lt;br&gt;
You'll see people type commands like:&lt;br&gt;
&lt;strong&gt;docker run nginx&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The application starts, everyone is happy, and they move on. But have you ever stopped to ask yourself: &lt;strong&gt;what actually happens after I press Enter&lt;/strong&gt;?&lt;br&gt;
It might seem like Docker is magically running your application, but it's actually following a simple process every single time.&lt;/p&gt;

&lt;p&gt;Think of it like this:&lt;br&gt;
You&lt;br&gt;
   │&lt;br&gt;
   ▼&lt;br&gt;
Docker Client&lt;br&gt;
   │&lt;br&gt;
   ▼&lt;br&gt;
Docker Engine&lt;br&gt;
   │&lt;br&gt;
   ▼&lt;br&gt;
Docker Hub (if needed)&lt;br&gt;
   │&lt;br&gt;
   ▼&lt;br&gt;
Docker Image&lt;br&gt;
   │&lt;br&gt;
   ▼&lt;br&gt;
Docker Container&lt;br&gt;
   │&lt;br&gt;
   ▼&lt;br&gt;
Running Application&lt;/p&gt;

&lt;p&gt;Let's break this down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker Client&lt;/strong&gt;&lt;br&gt;
The first component your command interacts with is the Docker Client.&lt;br&gt;
Think of it as the messenger between you and Docker.&lt;/p&gt;

&lt;p&gt;When you type: &lt;strong&gt;docker run nginx&lt;/strong&gt;&lt;br&gt;
The Docker Client doesn't create containers or download images. Its only responsibility is to receive your command and send it to the Docker Engine. A simple example is ordering food through an app. You place your order using the app, but the app doesn't prepare your meal. It simply sends your request to the restaurant: the Docker Client works exactly the same way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker Engine&lt;/strong&gt;&lt;br&gt;
Once the Docker Client receives your command, it forwards it to the Docker Engine. If the Docker Client is the messenger, then Docker Engine is the brain. This is where the work happens.&lt;/p&gt;

&lt;p&gt;The Docker Engine is responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building Docker Images&lt;/li&gt;
&lt;li&gt;Creating and starting Containers&lt;/li&gt;
&lt;li&gt;Managing Docker Networks&lt;/li&gt;
&lt;li&gt;Managing Docker Volumes&lt;/li&gt;
&lt;li&gt;Pulling Images from Docker Registries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without the Docker Engine, Docker simply cannot function. The first thing the Engine asks itself is: "&lt;strong&gt;Do I already have this image&lt;/strong&gt;?"&lt;br&gt;
If the answer is yes, Docker continues. If the answer is no, Docker needs somewhere to download it from. That's where Docker Hub comes in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker Registry (Docker Hub)&lt;/strong&gt;&lt;br&gt;
A Docker Registry is simply a place where Docker Images are stored. The most popular registry is Docker Hub. Think of Docker Hub as GitHub but instead of hosting source code, it hosts Docker Images.&lt;br&gt;
If Docker Engine can't find an image locally, it automatically reaches out to Docker Hub, downloads the image, stores it on your computer, and then continues the process. The nice thing is that Docker only downloads an image once.&lt;/p&gt;

&lt;p&gt;The next time you run the same image, Docker simply uses the local copy, making the process much faster. Understanding this explains why your very first Docker command usually takes longer than every command after it.&lt;/p&gt;

&lt;p&gt;Docker Images != Just a Blueprint&lt;br&gt;
One of the most common explanations you'll hear is: "A Docker Image is a blueprint."&lt;br&gt;
While that's true, it doesn't tell the whole story. A Docker Image is a complete, read-only package that contains everything your application needs to run.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Your application code&lt;/li&gt;
&lt;li&gt;Runtime (Python, Node.js, Java, etc.)&lt;/li&gt;
&lt;li&gt;Dependencies&lt;/li&gt;
&lt;li&gt;Required libraries&lt;/li&gt;
&lt;li&gt;Configuration&lt;/li&gt;
&lt;li&gt;Operating system packages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as a snapshot of your application at a particular point in time. Once an image is built, Docker treats it as immutable, meaning it doesn't change. If you modify your application, Docker doesn't update the existing image. Instead, it creates a completely new image.&lt;br&gt;
At first, this might sound inefficient. In reality, it's one of Docker's biggest strengths. Because Images never change, every developer, testing environment, CI/CD pipeline, and production server runs exactly the same package.&lt;br&gt;
That's one of the biggest reasons Docker became so popular: It removed the uncertainty of different environments.&lt;br&gt;
Another important thing to know is that Images are not running. They simply exist, waiting to be used. You can think of an Image as a packaged application that's ready to be launched whenever you need it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker Containers: Where Your Application Comes Alive&lt;/strong&gt;&lt;br&gt;
Here's something many beginners don't realize: docker never runs an Image directly. Instead, it creates a Container from that Image. A Container is simply the running instance of a Docker Image. Unlike Images, Containers are alive; they consume CPU; they use memory; they process requests; they respond to users.&lt;br&gt;
They are the part that's actually executing your application. One of Docker's biggest advantages is that a single Image can create multiple Containers.&lt;/p&gt;

&lt;p&gt;For example:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpg6335cpb4ezdl04zy9i.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpg6335cpb4ezdl04zy9i.png" alt=" " width="421" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every container starts from the exact same Image. That's why Docker delivers consistency. Instead of creating three different applications, Docker simply creates three running instances from the same package.&lt;br&gt;
Containers are also designed to be temporary. If a container crashes, becomes corrupted, or is deleted, Docker doesn't expect you to repair it. You simply create another container from the original Image.&lt;br&gt;
Since the Image never changed, the new Container behaves exactly like the previous one. This idea of treating containers as disposable is one of the biggest mindsets shifts Docker introduces. Instead of fixing running environments, you recreate them.&lt;/p&gt;

&lt;p&gt;It's faster, cleaner and far more predictable.&lt;br&gt;
&lt;strong&gt;Developer Tip: If there's one thing to remember from this section, let it be this:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Images are packages. Containers are running applications.&lt;/li&gt;
&lt;li&gt;Docker never runs an Image directly; it always creates a Container from it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Why Understanding These Concepts Matters Before Writing Your First Command&lt;/strong&gt;&lt;br&gt;
You may have noticed that we still haven't written a single Docker command and that's by design.&lt;br&gt;
Learning Docker isn't about memorizing commands; it's about understanding what's happening every time you run one.&lt;br&gt;
Once you understand how the Docker Client, Docker Engine, Docker Hub, Images, and Containers work together, Docker stops feeling complicated. The commands become logical because you know what's happening behind the scenes.&lt;/p&gt;

&lt;p&gt;That's the purpose of this series: not just to teach you how to use Docker, but to help you understand why it works the way it does.&lt;br&gt;
Now that we've built that foundation, it's time to put it into practice. In the next part, we'll build our first Docker Image and learn how a Dockerfile brings everything together.&lt;br&gt;
.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>beginners</category>
      <category>docker</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What Is Lua AI? A Simple Developer's Guide to Building AI Agents</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Wed, 01 Jul 2026 13:55:51 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/what-is-lua-ai-a-simple-developers-guide-to-building-ai-agents-oba</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/what-is-lua-ai-a-simple-developers-guide-to-building-ai-agents-oba</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/ladipo_samuel_7cfaa827bf5/what-is-lua-ai-a-developers-guide-to-building-ai-agents-17ch" class="crayons-story__hidden-navigation-link"&gt;What Is Lua AI? A Developer's Guide to Building AI Agents&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="/ladipo_samuel_7cfaa827bf5" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1667792%2F9b60d3c4-48b5-4943-a8e1-0c1e2da4b290.jpeg" alt="ladipo_samuel_7cfaa827bf5 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/ladipo_samuel_7cfaa827bf5" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ladipo Samuel
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ladipo Samuel
                
              
              &lt;div id="story-author-preview-content-4042129" 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="/ladipo_samuel_7cfaa827bf5" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1667792%2F9b60d3c4-48b5-4943-a8e1-0c1e2da4b290.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ladipo Samuel&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/ladipo_samuel_7cfaa827bf5/what-is-lua-ai-a-developers-guide-to-building-ai-agents-17ch" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 1&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/ladipo_samuel_7cfaa827bf5/what-is-lua-ai-a-developers-guide-to-building-ai-agents-17ch" id="article-link-4042129"&gt;
          What Is Lua AI? A Developer's Guide to Building AI Agents
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/llm"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;llm&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&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/ladipo_samuel_7cfaa827bf5/what-is-lua-ai-a-developers-guide-to-building-ai-agents-17ch" 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/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/ladipo_samuel_7cfaa827bf5/what-is-lua-ai-a-developers-guide-to-building-ai-agents-17ch#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;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;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


</description>
      <category>agents</category>
      <category>ai</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A Developer's Guide to Building AI Agents</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Wed, 01 Jul 2026 13:54:27 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/a-developers-guide-to-building-ai-agents-3li5</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/a-developers-guide-to-building-ai-agents-3li5</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/ladipo_samuel_7cfaa827bf5/what-is-lua-ai-a-developers-guide-to-building-ai-agents-17ch" class="crayons-story__hidden-navigation-link"&gt;What Is Lua AI? A Developer's Guide to Building AI Agents&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="/ladipo_samuel_7cfaa827bf5" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1667792%2F9b60d3c4-48b5-4943-a8e1-0c1e2da4b290.jpeg" alt="ladipo_samuel_7cfaa827bf5 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/ladipo_samuel_7cfaa827bf5" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ladipo Samuel
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ladipo Samuel
                
              
              &lt;div id="story-author-preview-content-4042129" 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="/ladipo_samuel_7cfaa827bf5" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1667792%2F9b60d3c4-48b5-4943-a8e1-0c1e2da4b290.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ladipo Samuel&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/ladipo_samuel_7cfaa827bf5/what-is-lua-ai-a-developers-guide-to-building-ai-agents-17ch" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 1&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/ladipo_samuel_7cfaa827bf5/what-is-lua-ai-a-developers-guide-to-building-ai-agents-17ch" id="article-link-4042129"&gt;
          What Is Lua AI? A Developer's Guide to Building AI Agents
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/llm"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;llm&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&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/ladipo_samuel_7cfaa827bf5/what-is-lua-ai-a-developers-guide-to-building-ai-agents-17ch" 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/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/ladipo_samuel_7cfaa827bf5/what-is-lua-ai-a-developers-guide-to-building-ai-agents-17ch#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;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;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


</description>
      <category>agents</category>
      <category>ai</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What Is Lua AI? A Developer's Guide to Building AI Agents</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Wed, 01 Jul 2026 13:54:04 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/what-is-lua-ai-a-developers-guide-to-building-ai-agents-17ch</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/what-is-lua-ai-a-developers-guide-to-building-ai-agents-17ch</guid>
      <description>&lt;p&gt;There's no shortage of AI frameworks today. Every week, a new one promises to make building AI agents easier, so it's easy to dismiss another platform without looking into it. I thought the same until I spent some time going through Lua's documentation.&lt;/p&gt;

&lt;p&gt;What stood out to me wasn't that Lua helps you build AI applications; a lot of tools already do that. It's &lt;em&gt;where&lt;/em&gt; it tries to reduce the complexity.&lt;/p&gt;

&lt;p&gt;When most developers think about building an AI agent, they immediately think about choosing an LLM, writing prompts, connecting APIs, managing conversations, handling tool calls, deploying the application, and making everything work together reliably. Before long, you realize you're spending more time building the infrastructure around the agent than the actual solution you're trying to create.&lt;/p&gt;

&lt;p&gt;Lua takes a different approach. Instead of asking you to build all of that yourself, it lets you focus on the part that actually matters: the logic behind your application.&lt;/p&gt;

&lt;p&gt;Imagine you're building a customer support assistant for your product. The AI shouldn't just answer questions; it should also be able to check an order, reset a password, create a support ticket, or fetch account information. Traditionally, you'd spend a good amount of time wiring all these pieces together. With Lua, you simply expose those capabilities as TypeScript functions, and the agent can intelligently decide when to use them. You're writing code you already know how to write, while Lua handles much of the AI orchestration behind the scenes.&lt;/p&gt;

&lt;p&gt;As I explored further, I realized that the platform is built around just a few concepts, and once those click, everything else starts making sense.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Agent&lt;/strong&gt; is exactly what it sounds like: the brain of your application. It's where you define how your AI behaves, what it should know, and which capabilities it has access to.&lt;/p&gt;

&lt;p&gt;Then there are &lt;strong&gt;Skills&lt;/strong&gt;. I like to think of these as departments in a company. If your agent works for an e-commerce business, you might have one skill for customer support, another for payments, and another for inventory. Each skill groups together the tools related to that specific responsibility, making your agent easier to organize as it grows.&lt;/p&gt;

&lt;p&gt;Inside every skill are &lt;strong&gt;Tools&lt;/strong&gt;. These are simply TypeScript functions that perform real work. A tool might send an email, call your backend API, query a database, process a payment, or retrieve user information. If you've built APIs before, writing tools will probably feel very familiar because you're just writing functions that solve real problems.&lt;/p&gt;

&lt;p&gt;Lua also supports webhooks and scheduled jobs, which means your agent doesn't only respond when someone sends it a message. It can react to external events, like a successful payment or a GitHub webhook, or even perform scheduled tasks automatically, such as sending reminders or generating daily reports.&lt;/p&gt;

&lt;p&gt;One thing I genuinely appreciate is that Lua doesn't try to replace your existing backend. If you've already invested time building APIs or services, you don't have to throw them away. Your agent simply sits on top of what you've already built, giving users a more natural way to interact with your application.&lt;/p&gt;

&lt;p&gt;Getting started is also surprisingly straightforward. You install the CLI, authenticate, create a project, define your agent, build your tools, test everything locally using the built-in chat environment, and deploy when you're ready. The workflow feels familiar, especially if you're already comfortable working with TypeScript projects.&lt;/p&gt;

&lt;p&gt;The more I explored Lua, the more I realized that it's less about making AI "smarter" and more about making developers more productive. Instead of spending hours connecting different services and managing the plumbing around an AI application, you can spend that time building features users actually care about.&lt;/p&gt;

&lt;p&gt;That's probably my biggest takeaway. Good developer tools don't just help you write code faster; they remove unnecessary complexity so you can focus on solving real problems. From what I've seen so far, that's exactly the direction Lua is trying to take.&lt;/p&gt;

&lt;p&gt;I'm still exploring the platform, but if you're interested in building AI agents that can do more than answer questions, Lua is definitely worth checking out. I'm looking forward to building with it and sharing what I learn along the way.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>if you want to understand docker, you should check this out</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Mon, 29 Jun 2026 16:36:59 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/if-you-want-to-understand-docker-you-should-check-this-out-4o1b</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/if-you-want-to-understand-docker-you-should-check-this-out-4o1b</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/ladipo_samuel_7cfaa827bf5/docker-explained-part-1-understanding-docker-before-writing-your-first-command-3o0o" class="crayons-story__hidden-navigation-link"&gt;Docker Explained (Part 1): Understanding Docker Before Writing Your First Command&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="/ladipo_samuel_7cfaa827bf5" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1667792%2F9b60d3c4-48b5-4943-a8e1-0c1e2da4b290.jpeg" alt="ladipo_samuel_7cfaa827bf5 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/ladipo_samuel_7cfaa827bf5" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ladipo Samuel
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ladipo Samuel
                
              
              &lt;div id="story-author-preview-content-4023621" 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="/ladipo_samuel_7cfaa827bf5" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1667792%2F9b60d3c4-48b5-4943-a8e1-0c1e2da4b290.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ladipo Samuel&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/ladipo_samuel_7cfaa827bf5/docker-explained-part-1-understanding-docker-before-writing-your-first-command-3o0o" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 29&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/ladipo_samuel_7cfaa827bf5/docker-explained-part-1-understanding-docker-before-writing-your-first-command-3o0o" id="article-link-4023621"&gt;
          Docker Explained (Part 1): Understanding Docker Before Writing Your First Command
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&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/softwareengineering"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;softwareengineering&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&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/ladipo_samuel_7cfaa827bf5/docker-explained-part-1-understanding-docker-before-writing-your-first-command-3o0o" 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/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.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;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/ladipo_samuel_7cfaa827bf5/docker-explained-part-1-understanding-docker-before-writing-your-first-command-3o0o#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;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;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>if you want to understand docker and also want to follow along, you should check this out</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Mon, 29 Jun 2026 16:24:37 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/if-you-want-to-understand-docker-and-also-want-to-follow-along-you-should-check-this-out-19ke</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/if-you-want-to-understand-docker-and-also-want-to-follow-along-you-should-check-this-out-19ke</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/ladipo_samuel_7cfaa827bf5/docker-explained-part-1-understanding-docker-before-writing-your-first-command-3o0o" class="crayons-story__hidden-navigation-link"&gt;Docker Explained (Part 1): Understanding Docker Before Writing Your First Command&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="/ladipo_samuel_7cfaa827bf5" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1667792%2F9b60d3c4-48b5-4943-a8e1-0c1e2da4b290.jpeg" alt="ladipo_samuel_7cfaa827bf5 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/ladipo_samuel_7cfaa827bf5" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ladipo Samuel
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ladipo Samuel
                
              
              &lt;div id="story-author-preview-content-4023621" 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="/ladipo_samuel_7cfaa827bf5" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1667792%2F9b60d3c4-48b5-4943-a8e1-0c1e2da4b290.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ladipo Samuel&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/ladipo_samuel_7cfaa827bf5/docker-explained-part-1-understanding-docker-before-writing-your-first-command-3o0o" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 29&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/ladipo_samuel_7cfaa827bf5/docker-explained-part-1-understanding-docker-before-writing-your-first-command-3o0o" id="article-link-4023621"&gt;
          Docker Explained (Part 1): Understanding Docker Before Writing Your First Command
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&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/softwareengineering"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;softwareengineering&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&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/ladipo_samuel_7cfaa827bf5/docker-explained-part-1-understanding-docker-before-writing-your-first-command-3o0o" 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/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.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;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/ladipo_samuel_7cfaa827bf5/docker-explained-part-1-understanding-docker-before-writing-your-first-command-3o0o#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;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;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Docker Explained (Part 1): Understanding Docker Before Writing Your First Command</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Mon, 29 Jun 2026 16:16:40 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/docker-explained-part-1-understanding-docker-before-writing-your-first-command-3o0o</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/docker-explained-part-1-understanding-docker-before-writing-your-first-command-3o0o</guid>
      <description>&lt;p&gt;Most Docker tutorials start by asking you to install Docker and run your first container. I don't think that's the best way to learn.&lt;/p&gt;

&lt;p&gt;If you've ever tried learning a new technology, you've probably experienced this before. You copy commands from a tutorial, everything works, but if someone asks you &lt;em&gt;why&lt;/em&gt; it works, you're stuck. You know the syntax, but you don't understand the concept.&lt;/p&gt;

&lt;p&gt;Docker deserves better than that.&lt;/p&gt;

&lt;p&gt;Before writing a single command, it's important to understand the problem Docker was built to solve. Once you understand the problem, every Docker command starts making sense.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Docker Changed Software Engineering
&lt;/h2&gt;

&lt;p&gt;Software engineering has always been about solving problems, but one problem managed to frustrate developers for years.&lt;/p&gt;

&lt;p&gt;Imagine you spend days building an application. You install all the required libraries, configure your environment, fix dependency issues, and finally everything works perfectly. You push your code to GitHub, feeling accomplished.&lt;/p&gt;

&lt;p&gt;A few minutes later, your teammate clones the project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They install the dependencies.&lt;/li&gt;
&lt;li&gt;Run the exact same command.&lt;/li&gt;
&lt;li&gt;And everything breaks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first, you think they made a mistake. Then another teammate tries. Same result!!!!&lt;/p&gt;

&lt;p&gt;Eventually someone says the sentence almost every developer has heard at least once:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"It works on my machine."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That sentence became a running joke in software engineering, but behind the joke was a real problem.&lt;/p&gt;

&lt;p&gt;Every developer's computer is different; one person uses Windows; another uses macOS; someone else develops on Linux; one developer has Python 3.12 installed; another still has Python 3.10; someone upgraded Node.js yesterday; sllomeone else forgot to install PostgreSQL entirely.&lt;/p&gt;

&lt;p&gt;Even when everyone follows the same documentation, tiny differences between machines can produce completely different results. The application itself isn't always the problem—the environment is.&lt;/p&gt;

&lt;p&gt;As projects became larger and teams became more distributed, this problem became even more expensive. Developers spent hours debugging issues that had nothing to do with their code. Deployments became unpredictable, onboarding new engineers took longer, and production environments often behaved differently from development machines.&lt;/p&gt;

&lt;p&gt;Docker didn't just introduce another development tool.&lt;/p&gt;

&lt;p&gt;It introduced consistency.&lt;/p&gt;

&lt;p&gt;Instead of asking every developer to manually recreate the same environment, Docker packages everything an application needs to run into a portable, isolated environment. Whether it's running on your laptop, your teammate's computer, a CI pipeline, or a production server, the application behaves exactly the same.&lt;/p&gt;

&lt;p&gt;That simple idea changed how modern software is built, tested, deployed, and maintained.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Docker Actually Is?
&lt;/h2&gt;

&lt;p&gt;You'll often hear Docker described as &lt;em&gt;"a containerization platform."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That's technically correct.&lt;/p&gt;

&lt;p&gt;It's also not particularly helpful if you're learning Docker for the first time.&lt;/p&gt;

&lt;p&gt;Here's a much simpler way to think about it.&lt;/p&gt;

&lt;p&gt;Imagine you're speaking at a conference.&lt;/p&gt;

&lt;p&gt;Instead of carrying your script in one place, your slides somewhere else, your notes in another folder, and your examples on a flash drive, you put everything into one notebook.&lt;/p&gt;

&lt;p&gt;Wherever you go, everything you need goes with you.&lt;/p&gt;

&lt;p&gt;Docker does something very similar.&lt;/p&gt;

&lt;p&gt;It packages your application together with everything it needs to run.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Your application code&lt;/li&gt;
&lt;li&gt;The runtime (like Node.js or Python)&lt;/li&gt;
&lt;li&gt;Libraries and dependencies&lt;/li&gt;
&lt;li&gt;Environment configuration&lt;/li&gt;
&lt;li&gt;System packages required by the application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of depending on whatever already exists on another computer, Docker brings its own environment along.&lt;/p&gt;

&lt;p&gt;That's why the same application behaves consistently whether it's running on your machine, your teammate's laptop, or a production server.&lt;/p&gt;

&lt;p&gt;Docker isn't replacing your application.&lt;/p&gt;

&lt;p&gt;It's making sure your application always has everything it needs to run successfully.&lt;/p&gt;

&lt;h2&gt;
  
  
  Containers Explained Properly
&lt;/h2&gt;

&lt;p&gt;The word &lt;strong&gt;container&lt;/strong&gt; is probably the first Docker term you'll hear, and it's also one of the most misunderstood. Many tutorials describe a container as "a lightweight virtual machine."&lt;/p&gt;

&lt;p&gt;While that comparison helps initially, it's not actually what a container is. A container is simply an isolated environment where your application runs.&lt;/p&gt;

&lt;p&gt;Think of it as giving your application its own workspace.&lt;/p&gt;

&lt;p&gt;Inside that workspace are all the tools your application needs, but it's isolated from other applications running on the same computer.&lt;/p&gt;

&lt;p&gt;That isolation is important.&lt;/p&gt;

&lt;p&gt;If one application requires Python 3.12 and another still depends on Python 3.10, they can both run on the same machine without interfering with each other because each container carries its own environment.&lt;/p&gt;

&lt;p&gt;Containers are also designed to be temporary. You don't usually modify a running container forever. Instead, if your application changes, you create a new container from an updated image. This makes deployments predictable because every new container starts from the same clean state.&lt;/p&gt;

&lt;p&gt;This idea of treating containers as disposable is one of the biggest mindset shifts Docker introduces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker vs Virtual Machines
&lt;/h2&gt;

&lt;p&gt;One of the first comparisons people make is between Docker and Virtual Machines. They solve similar problems, but they solve them very differently.&lt;/p&gt;

&lt;p&gt;A Virtual Machine creates an entirely new computer inside your computer.&lt;br&gt;
It includes its own operating system, its own kernel, its own system resources, and everything required to behave like a completely separate machine.&lt;/p&gt;

&lt;p&gt;That makes Virtual Machines incredibly powerful, but also heavier. They consume more storage, take longer to start, and require more system resources.&lt;/p&gt;

&lt;p&gt;Docker containers take a different approach.&lt;/p&gt;

&lt;p&gt;Instead of creating a completely new operating system, containers share the host operating system's kernel while keeping applications isolated from one another.&lt;/p&gt;

&lt;p&gt;The result is a much lighter environment that starts in seconds, uses fewer resources, and is easier to distribute.&lt;/p&gt;

&lt;p&gt;A simple way to picture it is this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;Virtual Machine&lt;/strong&gt; is like building a completely separate house on its own piece of land.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Docker Container&lt;/strong&gt; is like living in your own apartment inside a modern building. You have your own private space, but some infrastructure is shared, making it far more efficient.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's one of the reasons Docker became so popular. Developers could run multiple isolated applications on the same machine without the overhead of multiple operating systems.&lt;/p&gt;

&lt;p&gt;At this point, you should understand &lt;strong&gt;why Docker exists&lt;/strong&gt;, &lt;strong&gt;what problem it solves&lt;/strong&gt;, &lt;strong&gt;what a container really is&lt;/strong&gt;, and &lt;strong&gt;why containers became the preferred approach over traditional Virtual Machines&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In Part 2, we'll go one level deeper by exploring Docker's architecture, understanding Images and Containers in depth, and explaining one of the concepts that confuses almost every beginner: &lt;strong&gt;what's the real difference between a Docker Image and a Docker Container?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>docker</category>
      <category>softwareengineering</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Backend Concepts I Understand Better Because of Fintech</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Sun, 21 Jun 2026 16:42:06 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/backend-concepts-i-understand-better-because-of-fintech-2hee</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/backend-concepts-i-understand-better-because-of-fintech-2hee</guid>
      <description>&lt;p&gt;One day, I walked into a supermarket to buy a few things. I paid with my card, but the POS machine froze. The cashier looked at me and said, "Sorry, please try again."&lt;/p&gt;

&lt;p&gt;Immediately, one thought came to mind:&lt;/p&gt;

&lt;p&gt;"What if the first transaction actually went through?"&lt;/p&gt;

&lt;p&gt;Most people would simply retry and hope for the best. But after spending more time understanding fintech systems, I realized this situation has a name. It's one of the reasons idempotency exists.&lt;/p&gt;

&lt;p&gt;In simple terms, idempotency ensures that whether a transfer request arrives once or five times, the result remains the same. Duplicate payments are far more expensive than failed payments. That small experience reminded me that some of the concepts we learn as backend engineers aren't just interview topics. They're solving real problems around us every day.&lt;/p&gt;

&lt;p&gt;One thing I appreciate about fintech is that it changed the way I think about software engineering. It forced me to look beyond APIs and databases and understand what really happens when systems start dealing with money, reliability, and trust.&lt;/p&gt;

&lt;p&gt;For example, I used to think APIs were simply endpoints that returned JSON. Fintech taught me that APIs are like contracts. Once other systems depend on them, changing a field carelessly or returning inconsistent responses can break integrations and affect real users.&lt;/p&gt;

&lt;p&gt;Databases are another thing I appreciate much more now. Everything works when there are a few hundred rows. But when transactions become millions, indexes, transactions, and query optimization suddenly become the difference between milliseconds and seconds. Many performance issues aren't solved by adding more servers. They're solved by understanding your queries better.&lt;/p&gt;

&lt;p&gt;Then there's concurrency. Imagine two withdrawal requests hitting the server at almost the same time. Without proper locking or transaction management, both requests might read the same balance and approve the withdrawal. Race conditions sound like textbook problems until they start affecting money.&lt;/p&gt;

&lt;p&gt;Caching also became much more interesting to me. Everyone loves Redis because it's fast. But fintech taught me that speed isn't everything. Stale data can be dangerous. Sometimes correctness is more important than performance. The hard problem isn't adding a cache. It's knowing when cached data should no longer be trusted.&lt;/p&gt;

&lt;p&gt;Authentication and authorization are concepts I understand differently now. Knowing who a user is and knowing what they are allowed to do are completely different problems. When money is involved, permissions matter. A user being logged in shouldn't automatically mean they can perform every operation.&lt;/p&gt;

&lt;p&gt;Queues changed the way I think about requests. Early on, I wanted everything to happen immediately. Send emails, generate receipts, notify users, update analytics, all inside one request. Fintech made me appreciate asynchronous processing. Just because something needs to happen doesn't mean it needs to happen right now.&lt;/p&gt;

&lt;p&gt;Then, we have reliability. At times, Providers fail, Networks timeout, Webhooks arrive late and even systems crash. Production systems aren't systems that never fail. They're systems that know how to recover. Retries, circuit breakers, and graceful degradation suddenly become necessities rather than nice-to-have features.&lt;/p&gt;

&lt;p&gt;Security also stopped feeling like a separate concern. SQL injection, hardcoded secrets, poor validation, weak password handling—these things aren't tasks for later. They should be second nature. In fintech, security is a responsibility, not just a feature.&lt;/p&gt;

&lt;p&gt;Observability is probably one of the most underrated things I appreciate now. Logs, metrics, traces, alerts—these things felt unnecessary when I first started. But if a transfer fails at 2 AM, how do you know? If latency increases, where do you start? Without observability, debugging becomes guessing, and guessing isn't a strategy.&lt;/p&gt;

&lt;p&gt;Another concept I find fascinating is reconciliation. Your system says a transfer failed. The bank says it succeeded. Which one is right? Distributed systems don't always agree. Webhooks get missed. Networks fail. Reconciliation exists because eventually, someone has to answer the question, "What actually happened?"&lt;/p&gt;

&lt;p&gt;Perhaps one of my favorite concepts is CAP theorem. Before learning more about distributed systems, I thought software engineering was about making systems fast, available, and always correct. CAP taught me that trade-offs exist. During network failures, you often choose between consistency and availability. Social media platforms can tolerate some inconsistency. Financial systems are much less forgiving. Sometimes delaying a response is better than showing the wrong balance.&lt;/p&gt;

&lt;p&gt;The more I learn about fintech, the more I realize how important backend engineering is. It's about building trust. Because in fintech, bugs aren't just bugs. Sometimes they're money.&lt;/p&gt;

&lt;p&gt;Of course, this is just scratching the surface. We touched on more than 10 concepts here, and each of them deserves an article (or even a book) of its own. Understanding them deeply will make you a better engineer, not just in interviews, but when building real systems. I'll also be breaking down some of these concepts in the videos I'll be starting this week. I'd love to hear your thoughts and know which concepts you'd like me to dive deeper into.&lt;/p&gt;

</description>
      <category>api</category>
      <category>backend</category>
      <category>softwareengineering</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Information Is Not Enough</title>
      <dc:creator>Ladipo Samuel</dc:creator>
      <pubDate>Sun, 14 Jun 2026 15:12:23 +0000</pubDate>
      <link>https://dev.to/ladipo_samuel_7cfaa827bf5/information-is-not-enough-2o55</link>
      <guid>https://dev.to/ladipo_samuel_7cfaa827bf5/information-is-not-enough-2o55</guid>
      <description>&lt;p&gt;Last week, I wrote purely technical content, then I had a conversation with one of the people who reads my work. From that conversation, I started thinking: if I keep sharing technical knowledge but there is still a gap between knowing and doing, how does that knowledge become useful? An article is just information. There are still a few steps between reading something and actually putting it into action.&lt;/p&gt;

&lt;p&gt;After reading articles, watching videos, or gaining insights, what you have received is information. Information can be extremely valuable, but it can also be completely useless if it is never applied. The next step is &lt;strong&gt;understanding&lt;/strong&gt;. After reading something, make sure you truly understand it. If there are gaps, ask questions, leave comments, reach out to the author, or discuss it with others. Don't rush to consume the next piece of content without understanding the one in front of you.&lt;/p&gt;

&lt;p&gt;Once understanding comes &lt;strong&gt;conviction&lt;/strong&gt;. For example, imagine you read an article about becoming a senior engineer. Don't immediately tell yourself that you can't become one until you've spent a certain number of years in the industry. Instead, convince yourself that it is possible. Start understanding how senior engineers think, communicate, solve problems, and take ownership. Gradually, your mindset begins to shift.&lt;/p&gt;

&lt;p&gt;However, conviction alone is not enough. Conviction can fade. Think about someone who goes to the gym consistently and starts building muscle. If they stop completely, those gains gradually disappear. Conviction works in a similar way. It gets you started, but something stronger is required to sustain it. That thing is &lt;strong&gt;belief&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Your belief system is one of the most important things you will ever develop. Conviction tells you that something is possible, belief makes you act on it. If you believe you can build a startup, you begin forming a team, making plans, learning the necessary skills, and taking action. Over time, what once seemed impossible starts becoming reality.&lt;/p&gt;

&lt;p&gt;Then comes the final stage: &lt;strong&gt;lifestyle&lt;/strong&gt;. Once something becomes part of your lifestyle, it becomes natural. You no longer force yourself to do it, it becomes who you are. Information, understanding, conviction, belief, lifestyle. When these stages work together, growth becomes inevitable.&lt;/p&gt;

&lt;p&gt;One reason many people give up is because they have unknowingly built the wrong lifestyle. Starting things and quitting becomes normal. Giving up becomes familiar. Over time, that pattern starts to define them. The good news is that mindsets can be rewired.&lt;/p&gt;

&lt;p&gt;This article is information. Take the time to understand it. If you have questions, ask them. Once you understand it, convince yourself that you are capable of more than you currently believe. Turn that conviction into belief and let that belief shape your lifestyle.&lt;/p&gt;

&lt;p&gt;I'll use myself as an example. Over the past few years, I've ventured into programming, media management, community management, technical writing, public speaking, robotics, and even leading communications for an entire department. None of these happened overnight. They started as information, became understanding, turned into conviction, grew into belief, and eventually became part of my lifestyle.&lt;/p&gt;

&lt;p&gt;You can do more than you think. Sometimes, the biggest thing you need to change is not your skill set; it's your mindset.&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>discuss</category>
      <category>learning</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
