<?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: Arun Saragadam</title>
    <description>The latest articles on DEV Community by Arun Saragadam (@iarunsaragadam).</description>
    <link>https://dev.to/iarunsaragadam</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%2F1577103%2F0614109a-ac53-4527-9ddc-b542bad51503.jpeg</url>
      <title>DEV Community: Arun Saragadam</title>
      <link>https://dev.to/iarunsaragadam</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/iarunsaragadam"/>
    <language>en</language>
    <item>
      <title>Quick read to know what Model Context Protocol is ...</title>
      <dc:creator>Arun Saragadam</dc:creator>
      <pubDate>Sat, 17 May 2025 12:23:30 +0000</pubDate>
      <link>https://dev.to/iarunsaragadam/quick-read-to-know-what-model-context-protocol-is--1386</link>
      <guid>https://dev.to/iarunsaragadam/quick-read-to-know-what-model-context-protocol-is--1386</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/in-1-min/what-is-model-context-protocol-mcp-4fco" class="crayons-story__hidden-navigation-link"&gt;What Is Model Context Protocol (MCP)?&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 class="crayons-logo crayons-logo--l" href="/in-1-min"&gt;
            &lt;img alt="In One Minute logo" 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%2Forganization%2Fprofile_image%2F10661%2Fa8b3783c-fd85-4c41-8b00-7208a9969d96.png" class="crayons-logo__image"&gt;
          &lt;/a&gt;

          &lt;a href="/iarunsaragadam" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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%2F1577103%2F0614109a-ac53-4527-9ddc-b542bad51503.jpeg" alt="iarunsaragadam profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/iarunsaragadam" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Arun Saragadam
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Arun Saragadam
                
              
              &lt;div id="story-author-preview-content-2492740" 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="/iarunsaragadam" 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%2F1577103%2F0614109a-ac53-4527-9ddc-b542bad51503.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Arun Saragadam&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;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/in-1-min" class="crayons-story__secondary fw-medium"&gt;In One Minute&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/in-1-min/what-is-model-context-protocol-mcp-4fco" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 16 '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/in-1-min/what-is-model-context-protocol-mcp-4fco" id="article-link-2492740"&gt;
          What Is Model Context Protocol (MCP)?
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mcp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mcp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/modelcontextprotocol"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;modelcontextprotocol&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;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/in-1-min/what-is-model-context-protocol-mcp-4fco#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;
            4 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;


</description>
      <category>mcp</category>
      <category>modelcontextprotocol</category>
      <category>ai</category>
      <category>llm</category>
    </item>
    <item>
      <title>What Is Model Context Protocol (MCP)?</title>
      <dc:creator>Arun Saragadam</dc:creator>
      <pubDate>Fri, 16 May 2025 04:27:18 +0000</pubDate>
      <link>https://dev.to/in-1-min/what-is-model-context-protocol-mcp-4fco</link>
      <guid>https://dev.to/in-1-min/what-is-model-context-protocol-mcp-4fco</guid>
      <description>&lt;h2&gt;
  
  
  🧠 What Is Model Context Protocol (MCP)?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Model Context Protocol (MCP) proposes a shared standard like USB for AI that lets assistants access relevant context directly from your apps.&lt;/p&gt;




&lt;p&gt;Remember that one friend who turns finding a lost item into a twenty -question interrogation?&lt;/p&gt;

&lt;p&gt;AI assistants have become incredibly helpful -- but sometimes, they feel just like that friend, especially as our expectations keep growing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You:&lt;/strong&gt; When was my 1:1 with Priya moved to?&lt;br&gt;&lt;br&gt;
&lt;strong&gt;LLM:&lt;/strong&gt; I don’t have access to your calendar or email. Could you:&lt;br&gt;&lt;br&gt;
    – Upload your calendar file?&lt;br&gt;&lt;br&gt;
    – Paste the reschedule email?&lt;br&gt;&lt;br&gt;
    – Tell me when it was originally scheduled?&lt;br&gt;&lt;br&gt;
&lt;strong&gt;You:&lt;/strong&gt; I think it was last Thursday. Priya mentioned the change in Slack.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;LLM:&lt;/strong&gt; Can you paste that message here?&lt;br&gt;&lt;br&gt;
&lt;strong&gt;You:&lt;/strong&gt;&lt;br&gt;&lt;br&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%2Fxb9ndcn7q4ymdm1hw6nr.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%2Fxb9ndcn7q4ymdm1hw6nr.png" alt="Image description" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;What if your AI assistant could channel its inner Sherlock...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You:&lt;/strong&gt; When was my 1:1 with Priya moved to?&lt;br&gt;&lt;br&gt;
&lt;strong&gt;LLM:&lt;/strong&gt; Checking your connected tools...&lt;br&gt;&lt;br&gt;
    ✅ Found reschedule email from Priya in Gmail — moved from Thursday to Friday&lt;br&gt;&lt;br&gt;
    ✅ Confirmed new event in Google Calendar: Friday, 11:30 a.m.&lt;br&gt;&lt;br&gt;
    ✅ Cross-referenced Slack chat from Tuesday confirming the change&lt;br&gt;&lt;br&gt;
&lt;strong&gt;LLM:&lt;/strong&gt; Your 1:1 with Priya was rescheduled to Friday at 11:30 a.m., confirmed by calendar, email, and Slack. Elementary!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Model Context Protocol (MCP) is one way to make this possible, though not the only one.&lt;/p&gt;

&lt;p&gt;Imagine a world without USB.&lt;/p&gt;

&lt;p&gt;Every PC manufacturer would have its own ports for connecting devices like keyboards and mice.&lt;/p&gt;

&lt;p&gt;Peripheral makers would need to build multiple versions of the same device to support different ports. That’s exactly what happens with electrical plugs today as each country has its own socket type.&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%2Fim8cjdl2ye8z3r08xdws.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%2Fim8cjdl2ye8z3r08xdws.png" alt="Image description" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Model Context Protocol (MCP)?
&lt;/h2&gt;

&lt;p&gt;Model Context Protocol (MCP), like any other protocol, is a set of rules, kind of like the USB standard for computers, that aims to help AI assistants connect to apps (email, todo / task apps etc) and data. Think of a protocol as a shared language that allows different things to understand each other.&lt;/p&gt;

&lt;p&gt;To be fair in comparison, USB devices do need computers to work and vice-versa — it's a symbiotic relationship.&lt;/p&gt;

&lt;p&gt;That's not the case with the apps as they can function independently.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why does it matter?
&lt;/h2&gt;

&lt;p&gt;Just like Apple or Android can’t build every app and Slack can’t build every bot, AI assistants can’t build every capability users need. They must rely on the wider developer community to extend their capabilities by adapting existing apps to work with AI assistants through the MCP architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  When should you use it?
&lt;/h2&gt;

&lt;p&gt;It's still early days for MCP, like when USB was first introduced. Not all computers or devices used it right away. Similarly, for MCP to become really useful, both the companies that make AI assistants (like the "computer" in the USB analogy) and the companies that make apps (like the "keyboard" or "mouse") need to adopt it.&lt;/p&gt;




&lt;h2&gt;
  
  
  For end-users:
&lt;/h2&gt;

&lt;p&gt;You can add more capabilities to your favorite AI assistant. These are referred to as MCP servers—a somewhat confusing name, as they function more like extensions to your AI assistant. MCP is still in limited beta and is aimed mainly at developers.&lt;/p&gt;




&lt;h2&gt;
  
  
  For developers:
&lt;/h2&gt;

&lt;p&gt;Should you jump on the bandwagon of building an MCP Server—in other words, making your app’s capabilities available to be used in the AI assistant client?&lt;/p&gt;

&lt;p&gt;That depends. Ask yourself: how long your product can stand out if users only access it through an AI assistant.&lt;/p&gt;




&lt;h2&gt;
  
  
  How does it work?
&lt;/h2&gt;

&lt;p&gt;Here is a diagram from the MCP documentation.&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%2Fhesvc2tzaap7pmb1g22a.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%2Fhesvc2tzaap7pmb1g22a.png" alt="Image description" width="596" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a developer, you build an extension to AI assistants aka MCP Server. The MCP Host / Client is your AI assistant, like Claude or ChatGPT. Here is a full list of supported clients.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Your Turn — What Do You Think?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Do you see MCP as a useful standard or just another layer of complexity?
&lt;/li&gt;
&lt;li&gt;What’s one app you wish your AI assistant could “talk to” seamlessly?
&lt;/li&gt;
&lt;li&gt;Would you ever build (or use) an MCP Server?
&lt;/li&gt;
&lt;li&gt;Would you trust an assistant that automatically pulls info from your apps?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Comment below or DM me—I’d love to hear your take.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Next Topic?
&lt;/h2&gt;

&lt;p&gt;I’m on a mission to make tech as easy as ABC! Is there a topic — anything from ABC to AI — that you'd love simplified?&lt;br&gt;&lt;br&gt;
👉 Drop it in the comments, or send me a quick DM, and I’ll break it down in a future post!&lt;/p&gt;




&lt;h2&gt;
  
  
  ✏️ P.S.
&lt;/h2&gt;

&lt;p&gt;I’m always tweaking these to make them better — was this one clear, helpful, or missing something?&lt;br&gt;&lt;br&gt;
Let me know in the comments or send me a quick DM!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Thanks for reading In 1 Min! &lt;a href="https://in1min.substack.com/" rel="noopener noreferrer"&gt;Subscribe for free&lt;/a&gt; to receive new posts and support my work.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>modelcontextprotocol</category>
      <category>ai</category>
      <category>llm</category>
    </item>
    <item>
      <title>What Exactly is a Data Structure?</title>
      <dc:creator>Arun Saragadam</dc:creator>
      <pubDate>Sat, 26 Apr 2025 05:29:00 +0000</pubDate>
      <link>https://dev.to/in-1-min/what-exactly-is-a-data-structure-explained-simply-20n1</link>
      <guid>https://dev.to/in-1-min/what-exactly-is-a-data-structure-explained-simply-20n1</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; A data structure is how your computer organizes and stores information efficiently—think of it like sorting your dishes or finding words in a dictionary.&lt;/p&gt;

&lt;p&gt;Ever imagined how confusing a dictionary would be if all the words were randomly scattered throughout the book instead of neatly arranged alphabetically?&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%2Fvuy1tpoglbiau56lor33.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%2Fvuy1tpoglbiau56lor33.png" alt="Image description" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now picture yourself cozily reading a book, and suddenly you stumble upon a word you don't know. No problem, right? Normally, you'd confidently reach for your dictionary—but imagine you have the chaotic dictionary described above. Finding your word could take forever!&lt;/p&gt;

&lt;p&gt;Thankfully, dictionaries are neatly organized in alphabetical order, so you can quickly flip to the right section and find your word in seconds. This simple organization saves you a ton of time and hassle. That's exactly how data becomes structured.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;data structure&lt;/strong&gt; is essentially a set of rules that determines how information is organized and used—whether it's arranging words in a dictionary, listing student names in a classroom register, managing how people line up to buy tickets, or even deciding which dinner plate gets used next (usually the top one in a stack).&lt;/p&gt;

&lt;p&gt;Realizing you’ve been repeatedly using the same plate when stacking them on top of each other could make you reconsider your stacking habits—perhaps it’s time to queue the plates instead for a fairer rotation!&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%2Fnpkazfnuazmorhgdvh7l.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%2Fnpkazfnuazmorhgdvh7l.png" alt="Image description" width="720" height="720"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Now, let’s dive into the classic breakdown: What, Why, When, and How.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  What?
&lt;/h3&gt;

&lt;p&gt;A data structure is your computer’s way of keeping its sanity by neatly organizing information ("data"), making sure nothing gets lost or mixed up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Without these clever systems, everyday tasks like finding your friend's contact in your phone, tracing back replies to a message, or even grabbing a book from a library would feel chaotic—like endlessly searching for something important in a messy room.&lt;/p&gt;

&lt;h3&gt;
  
  
  When?
&lt;/h3&gt;

&lt;p&gt;Every time you store, access, or organize information—whether in code or real life—you’re instinctively using a data structure. Think: always placing your keys in the same spot or sorting clothes into different drawers.&lt;/p&gt;

&lt;h3&gt;
  
  
  How?
&lt;/h3&gt;

&lt;p&gt;You already use data structures in daily life: storing each friend's birthday alongside their contact information in your phone, or neatly sorting clothes into specific shelves for easy access.&lt;/p&gt;

&lt;p&gt;When you start coding, you’ll apply the same logic—by choosing popular, predefined data structures like arrays, linked lists, stacks, queues, or trees. You can even combine these structures to build new, efficient ways to organize and manage your data.&lt;/p&gt;




&lt;p&gt;🎯 &lt;strong&gt;Your Turn!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Which of these best describes a data structure?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A)&lt;/strong&gt; A random jumble of information
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;B)&lt;/strong&gt; A system for organizing and storing data
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;C)&lt;/strong&gt; A type of digital art
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;D)&lt;/strong&gt; A way to scramble computer memory
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(Type your answer—A, B, C, or D—in the comments!)&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;📚 &lt;strong&gt;Next Topic?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm on a mission to make tech as easy as ABC! Is there any topic—from ABC to AI—that you’d love to see simplified? 👉 Drop it in the comments, and I’ll break it down in a future post!&lt;/p&gt;

&lt;p&gt;✏️ &lt;strong&gt;P.S.&lt;/strong&gt; I'd love to hear your feedback—What did you think of this explanation? Was it clear, helpful, too detailed, or missing anything? Let me know in the comments—I’m always looking to make these even better for you!&lt;/p&gt;

&lt;p&gt;Thanks for reading &lt;strong&gt;In 1 Min&lt;/strong&gt;! &lt;a href="https://in1min.substack.com/" rel="noopener noreferrer"&gt;Subscribe&lt;/a&gt; for free to receive new posts and support my work.&lt;/p&gt;

</description>
      <category>datastructures</category>
      <category>programming</category>
      <category>learning</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>Bazel in 1 Min</title>
      <dc:creator>Arun Saragadam</dc:creator>
      <pubDate>Mon, 14 Apr 2025 21:05:02 +0000</pubDate>
      <link>https://dev.to/in-1-min/bazel-in-1-min-27m1</link>
      <guid>https://dev.to/in-1-min/bazel-in-1-min-27m1</guid>
      <description>&lt;h2&gt;
  
  
  What is Bazel?
&lt;/h2&gt;

&lt;p&gt;Bazel is a blazing-fast build and test tool originally developed at Google. It’s designed to handle projects of any size with speed and efficiency.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why should you use Bazel?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ Supports &lt;strong&gt;multiple languages&lt;/strong&gt; (Java, C++, Python, Go, etc.)&lt;/li&gt;
&lt;li&gt;🌍 Works &lt;strong&gt;cross-platform&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🧠 Only runs &lt;strong&gt;affected tests&lt;/strong&gt; after code changes — saves time and compute&lt;/li&gt;
&lt;li&gt;🧱 Built to &lt;strong&gt;scale with massive codebases&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Parallel builds and tests&lt;/strong&gt; for faster dev cycles&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  When does it make sense to adopt Bazel?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;When you’re starting a &lt;strong&gt;new project&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;When your &lt;strong&gt;existing builds/tests are slow&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;em&gt;Disclaimer:&lt;/em&gt; This is a 1-min overview, not a full deep dive. If you've used Bazel in the real world, I'd love to hear your insights. What’s been great? What’s tricky?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;📚 &lt;em&gt;This post is part of &lt;a href="https://dev.to/in-1-min"&gt;in-1-min&lt;/a&gt; — dev concepts and tools explained in under a minute.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;✍️ &lt;em&gt;By &lt;a href="https://dev.to/iarunsaragadam"&gt;Arun Saragadam&lt;/a&gt; • Follow for quick takes on dev tools, workflows, and productivity.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🏠 &lt;em&gt;Explore more posts at &lt;a href="https://dev.to/in-1-min"&gt;dev.to/in-1-min&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>in1minbyarun</category>
      <category>bazel</category>
      <category>devtools</category>
      <category>in1min</category>
    </item>
    <item>
      <title>This article breaks down the fastest way to build web &amp; Android apps using Flutter and Docker. Check it out! 🚀 Have any insights or improvements? Share your thoughts in the comments and contribute to the discussion! 💡🔥 #Flutter #Docker #DevCommunity</title>
      <dc:creator>Arun Saragadam</dc:creator>
      <pubDate>Fri, 07 Mar 2025 12:44:17 +0000</pubDate>
      <link>https://dev.to/iarunsaragadam/this-article-breaks-down-the-fastest-way-to-build-web-android-apps-using-flutter-and-docker-2mk3</link>
      <guid>https://dev.to/iarunsaragadam/this-article-breaks-down-the-fastest-way-to-build-web-android-apps-using-flutter-and-docker-2mk3</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/iarunsaragadam" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2F1577103%2F0614109a-ac53-4527-9ddc-b542bad51503.jpeg" alt="iarunsaragadam"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/iarunsaragadam/flutter-docker-the-fastest-way-to-build-web-android-apps-2aap" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Flutter + Docker: The Fastest Way to Build Web &amp;amp; Android Apps&lt;/h2&gt;
      &lt;h3&gt;Arun Saragadam ・ Mar 7&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#flutter&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#docker&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#web&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#android&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>flutter</category>
      <category>docker</category>
      <category>web</category>
      <category>android</category>
    </item>
    <item>
      <title>Flutter + Docker: The Fastest Way to Build Web &amp; Android Apps</title>
      <dc:creator>Arun Saragadam</dc:creator>
      <pubDate>Fri, 07 Mar 2025 01:58:50 +0000</pubDate>
      <link>https://dev.to/iarunsaragadam/flutter-docker-the-fastest-way-to-build-web-android-apps-2aap</link>
      <guid>https://dev.to/iarunsaragadam/flutter-docker-the-fastest-way-to-build-web-android-apps-2aap</guid>
      <description>

&lt;h2&gt;
  
  
  &lt;strong&gt;Flutter + Docker: The Fastest Way to Build Web &amp;amp; Android Apps&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Whether you're setting up a CI/CD pipeline or onboarding to a new project, reducing complexity is always a win. The &lt;a href="https://github.com/iarunsaragadam/flutter-docker" rel="noopener noreferrer"&gt;Flutter-Docker&lt;/a&gt; repository provides a simple way to build and test web (and Android) applications without the hassle of setting up dependencies manually.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Use Case 1: Quickly Onboard to a New Project&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When joining a new project, the first thing you want to do is see what it looks like. But setting up the right environment, installing dependencies, and configuring tools can take time. In many cases, you might just need to ask your teammate what software version they are using, and that’s all you need to explore the project. If luck favors you, the latest version might even work out of the box.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Fastest Way to Run a New Project&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;With this Docker setup, you don’t need to install anything on your system. In just &lt;strong&gt;two commands&lt;/strong&gt;, you can preview the web version of any project. You might just have to ask your teammate what Flutter version they are using, and that’s all you need to explore the project. If luck favors you, the latest Flutter version might even work for you.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pull the Docker image:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker pull ghcr.io/iarunsaragadam/flutter-web-builder:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build the project in a container:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&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;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;:/app &lt;span class="nt"&gt;-w&lt;/span&gt; /app ghcr.io/iarunsaragadam/flutter-web-builder:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Serve the built web application using Nginx:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&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;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;/build/web:/usr/share/nginx/html &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:80 nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, simply open &lt;code&gt;http://localhost:8080&lt;/code&gt;, and you’re instantly running the built web project—without installing any dependencies!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Use Case 2: Streamline Your CI/CD Pipeline&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;One of the biggest challenges in software deployment is ensuring consistent build environments. Software versions, dependencies, and local configurations can all introduce inconsistencies in the CI/CD process.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;How Docker Helps&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reduce Setup Time&lt;/strong&gt;: No need to manually install dependencies on CI/CD machines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ensure Consistency&lt;/strong&gt;: The Docker image guarantees that the build runs the same way across different environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplify Commands&lt;/strong&gt;: With a single Docker command, you can automate the build process.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;How to Integrate in CI/CD&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;To build a web application within a CI/CD pipeline, simply use:&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;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;:/app &lt;span class="nt"&gt;-w&lt;/span&gt; /app ghcr.io/iarunsaragadam/flutter-web-builder:latest flutter build web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Android builds:&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;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;:/app &lt;span class="nt"&gt;-w&lt;/span&gt; /app ghcr.io/iarunsaragadam/flutter-android-builder:latest flutter build apk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands clean the project, fetch dependencies using &lt;code&gt;flutter pub get&lt;/code&gt;, and then proceed with the build—ensuring a fully automated and reproducible pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Sample CI/CD Pipelines (Not Tested)&lt;/strong&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;GitHub Actions Pipeline&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Flutter Docker Build&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&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;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&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;Checkout code&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&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;Build Flutter Web with Docker&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;docker run --rm -v "$PWD":/app -w /app ghcr.io/iarunsaragadam/flutter-web-builder:latest flutter build web&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;Serve Build with Nginx&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;docker run --rm -v "$PWD"/build/web:/usr/share/nginx/html -p 8080:80 nginx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;Azure DevOps Pipeline&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;trigger&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;

&lt;span class="na"&gt;pool&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;vmImage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ubuntu-latest'&lt;/span&gt;

&lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;checkout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;self&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;docker run --rm -v "$(Build.SourcesDirectory)":/app -w /app ghcr.io/iarunsaragadam/flutter-web-builder:latest flutter build web&lt;/span&gt;
    &lt;span class="na"&gt;displayName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Build&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Flutter&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Web&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Docker'&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;docker run --rm -v "$(Build.SourcesDirectory)/build/web":/usr/share/nginx/html -p 8080:80 nginx&lt;/span&gt;
    &lt;span class="na"&gt;displayName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Serve&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Build&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Nginx'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; These pipeline configurations are provided as a starting point and have not been tested. Please modify them as needed for your specific project.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What About iOS?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Unfortunately, iOS builds cannot be done using this Docker-based approach. Apple requires iOS applications to be built and signed on macOS using Xcode. This means that to build iOS applications, you'll need access to a macOS machine or a macOS-based CI/CD service like GitHub Actions (macOS runners) or Codemagic.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why This Matters&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Saves Time&lt;/strong&gt;: Skip dependency setup and run a new project instantly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduces Errors&lt;/strong&gt;: Avoid environment-related issues by running builds in a consistent Docker container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improves CI/CD Pipelines&lt;/strong&gt;: Automate and streamline web and Android builds with minimal effort.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Whether you’re automating builds in a CI/CD pipeline or quickly previewing a new project without installing anything, &lt;a href="https://github.com/iarunsaragadam/flutter-docker" rel="noopener noreferrer"&gt;Flutter-Docker&lt;/a&gt; is a powerful tool to simplify your workflow. With just a few Docker commands, you can avoid setup headaches and focus on what really matters—building great applications.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>docker</category>
      <category>web</category>
      <category>android</category>
    </item>
    <item>
      <title>How to dockerize an angular application?</title>
      <dc:creator>Arun Saragadam</dc:creator>
      <pubDate>Thu, 03 Oct 2024 16:51:08 +0000</pubDate>
      <link>https://dev.to/iarunsaragadam/how-to-dockerize-an-angular-application-4bj1</link>
      <guid>https://dev.to/iarunsaragadam/how-to-dockerize-an-angular-application-4bj1</guid>
      <description>&lt;p&gt;Dockerizing your Angular app is simpler than you think. With just a few steps, your application will be up and running inside a Docker container. Let’s walk through the process step by step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before we begin, make sure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A basic understanding of how to build and run an Angular application.&lt;/li&gt;
&lt;li&gt;Node.js and npm installed on your machine.&lt;/li&gt;
&lt;li&gt;Docker installed and running.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps to Dockerize Angular
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Write a Dockerfile.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test the Dockerfile.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Celebrate your success!&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1. Write a Dockerfile
&lt;/h2&gt;

&lt;p&gt;First things first, let's write a Dockerfile to containerize your Angular app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where to place the Dockerfile?
&lt;/h3&gt;

&lt;p&gt;Create a &lt;code&gt;Dockerfile&lt;/code&gt; in the root of your Angular project, right where your &lt;code&gt;package.json&lt;/code&gt; is located. This ensures that the Docker build process has access to all necessary files in the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  What to put in the Dockerfile?
&lt;/h3&gt;

&lt;p&gt;Here’s a simple, efficient Dockerfile that builds your Angular app using Node.js and serves it with Nginx:&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;# Arguments to avoid too many pulls from Docker Hub&lt;/span&gt;
&lt;span class="k"&gt;ARG&lt;/span&gt;&lt;span class="s"&gt; NODE_URI&lt;/span&gt;
&lt;span class="k"&gt;ARG&lt;/span&gt;&lt;span class="s"&gt; NGINX_URI&lt;/span&gt;

&lt;span class="c"&gt;# Stage 1: Build Angular App&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;${NODE_URI:-node}:lts-alpine3.15&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;builder&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="c"&gt;# Install Angular CLI globally&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @angular/cli

&lt;span class="c"&gt;# Copy package.json and install dependencies&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package.json /app&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--legacy-peer-deps&lt;/span&gt;

&lt;span class="c"&gt;# Copy the entire project and build the Angular app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . /app&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm run build &lt;span class="nt"&gt;--prod&lt;/span&gt;

&lt;span class="c"&gt;# Stage 2: Serve Angular App with Nginx&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;${NGINX_URI:-nginx}:stable-alpine&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;deployer&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/dist/amp /usr/share/nginx/html&lt;/span&gt;

&lt;span class="c"&gt;# Optionally configure Nginx&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; nginx.conf /etc/nginx/nginx.conf&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why this Dockerfile?
&lt;/h3&gt;

&lt;p&gt;This Dockerfile uses a multi-stage build approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stage 1 (builder):&lt;/strong&gt; Uses a Node.js image to install dependencies and build the Angular app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stage 2 (deployer):&lt;/strong&gt; Uses an Nginx image to serve the built app.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Test the Dockerfile
&lt;/h2&gt;

&lt;p&gt;Now that you’ve created the Dockerfile, let’s build and run your Docker container.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Build the Docker Image
&lt;/h3&gt;

&lt;p&gt;In the root of your Angular project (where the Dockerfile is located), run the following command to build your Docker 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 build &lt;span class="nt"&gt;-t&lt;/span&gt; nginx-angular-app &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command builds the image and tags it as &lt;code&gt;nginx-angular-app&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Run the Docker Container
&lt;/h3&gt;

&lt;p&gt;Once the image is built, use this command to run your Angular application in a container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 80:80/tcp &lt;span class="nt"&gt;--name&lt;/span&gt; angular-app nginx-angular-app:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command does the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runs the container in detached mode (&lt;code&gt;-d&lt;/code&gt;) with an interactive terminal (&lt;code&gt;-it&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Maps port 80 on your local machine to port 80 in the container (&lt;code&gt;-p 80:80&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Names the container &lt;code&gt;angular-app&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Access Your Application
&lt;/h3&gt;

&lt;p&gt;Open your browser and navigate to &lt;code&gt;http://localhost&lt;/code&gt; to see your Angular app up and running in the container!&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Pat Yourself on the Back 🎉
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Congratulations!&lt;/strong&gt; You just Dockerized an Angular application like a pro.&lt;/li&gt;
&lt;li&gt;Grab a coffee or take a short break—you’ve earned it! ☕&lt;/li&gt;
&lt;li&gt;If you run into issues, don’t panic. Docker makes debugging easier, and with time, you’ll master it.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Next Steps
&lt;/h3&gt;

&lt;p&gt;Now that you've successfully Dockerized your Angular app, here are a few things you can explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automating the build and deployment process with CI/CD pipelines.&lt;/li&gt;
&lt;li&gt;Customizing the Nginx configuration to optimize your app's performance.&lt;/li&gt;
&lt;li&gt;Using Docker Compose to manage multi-container applications.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;By following these steps, you'll not only learn how to containerize your Angular application but also gain a better understanding of Docker's powerful capabilities. Happy coding!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>angular</category>
      <category>nginx</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
