<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Omkar Sharma</title>
    <description>The latest articles on Forem by Omkar Sharma (@omkarsharma2821).</description>
    <link>https://forem.com/omkarsharma2821</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%2F2968429%2F05debf70-4923-4a9a-89a7-19649e0a516d.png</url>
      <title>Forem: Omkar Sharma</title>
      <link>https://forem.com/omkarsharma2821</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/omkarsharma2821"/>
    <language>en</language>
    <item>
      <title>Evolution of Deployment: From Bare Metal to Kubernetes (K8s Explained)</title>
      <dc:creator>Omkar Sharma</dc:creator>
      <pubDate>Sat, 21 Mar 2026 12:03:04 +0000</pubDate>
      <link>https://forem.com/omkarsharma2821/evolution-of-deployment-from-bare-metal-to-kubernetes-k8s-explained-1n04</link>
      <guid>https://forem.com/omkarsharma2821/evolution-of-deployment-from-bare-metal-to-kubernetes-k8s-explained-1n04</guid>
      <description>&lt;p&gt;Building an application is one challenge, but deploying it efficiently and scaling it for real-world users is an entirely different game.&lt;/p&gt;

&lt;p&gt;Over the years, deployment strategies have evolved significantly—from physical servers to modern container orchestration tools like Kubernetes. In this blog, we will understand this journey step by step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Application Development
&lt;/h2&gt;

&lt;p&gt;Let’s assume a developer builds an application using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The choice of tech stack depends on the developer’s comfort and project requirements.&lt;/p&gt;

&lt;p&gt;Once the application is ready on the local machine, the next step is deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Traditional Deployment (Bare Metal Servers)
&lt;/h2&gt;

&lt;p&gt;To make the application publicly accessible, the developer needs a server.&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%2Feocpkb3oqatp7jsot0tu.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%2Feocpkb3oqatp7jsot0tu.png" alt="Omkar Sharma" width="800" height="680"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Options:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Buy a physical server (&lt;strong&gt;Bare Metal&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Rent a server from a third-party provider&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Process:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Deploy application on server&lt;/li&gt;
&lt;li&gt;Purchase a domain&lt;/li&gt;
&lt;li&gt;Map domain to server’s static IP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now the application is live 🎉&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges in Traditional Deployment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Environment Consistency
&lt;/h3&gt;

&lt;p&gt;The application should behave the same in production as it does locally.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Famous problem: &lt;em&gt;“It works on my machine”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. Scaling Issues
&lt;/h3&gt;

&lt;p&gt;As traffic grows, scaling becomes necessary.&lt;/p&gt;

&lt;h4&gt;
  
  
  Vertical Scaling:
&lt;/h4&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%2Fk9vvx8wvbn4shed1tlpp.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%2Fk9vvx8wvbn4shed1tlpp.png" alt="Omkar Sharma" width="800" height="700"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Increase RAM (4GB → 16GB)&lt;/li&gt;
&lt;li&gt;Increase CPU cores&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Problems:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Expensive&lt;/li&gt;
&lt;li&gt;Manual effort required&lt;/li&gt;
&lt;li&gt;Limited scalability&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Cloud Computing Revolution
&lt;/h2&gt;

&lt;p&gt;Cloud providers like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS&lt;/li&gt;
&lt;li&gt;Azure&lt;/li&gt;
&lt;li&gt;GCP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;transformed how applications are deployed.&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%2Fmtulsuvvpezptpzm5xqq.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%2Fmtulsuvvpezptpzm5xqq.png" alt="Omkar Sharma" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No need to manage physical infrastructure&lt;/li&gt;
&lt;li&gt;Deploy applications from anywhere&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ready-to-use services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Load Balancers&lt;/li&gt;
&lt;li&gt;CDN&lt;/li&gt;
&lt;li&gt;DNS (Route 53)&lt;/li&gt;
&lt;li&gt;Managed Databases (PostgreSQL, Redis)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Auto Scaling in Cloud
&lt;/h3&gt;

&lt;p&gt;Cloud platforms introduced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Auto Scaling Groups (ASG)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Policy-based scaling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now scaling becomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic&lt;/li&gt;
&lt;li&gt;Faster&lt;/li&gt;
&lt;li&gt;Cost-efficient&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Still a Problem: Environment Replication
&lt;/h2&gt;

&lt;p&gt;Even with cloud, consistency issues remain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local system → Windows&lt;/li&gt;
&lt;li&gt;Production → Linux&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different OS and dependencies can break applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Virtualization (Virtual Machines)
&lt;/h2&gt;

&lt;p&gt;To solve consistency issues, &lt;strong&gt;Virtual Machines (VMs)&lt;/strong&gt; were introduced.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Each VM has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Its own OS&lt;/li&gt;
&lt;li&gt;Dependencies&lt;/li&gt;
&lt;li&gt;Application&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Advantages:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Consistent environments&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Disadvantages:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Heavy (includes full OS)&lt;/li&gt;
&lt;li&gt;Slow startup&lt;/li&gt;
&lt;li&gt;Resource intensive&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 5: Containerization (Docker Era)
&lt;/h2&gt;

&lt;p&gt;Containers improved virtualization.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Idea:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Package application + dependencies&lt;/li&gt;
&lt;li&gt;No full OS required&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Benefits:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lightweight&lt;/li&gt;
&lt;li&gt;Fast startup&lt;/li&gt;
&lt;li&gt;Portable across environments&lt;/li&gt;
&lt;li&gt;Consistent behavior everywhere&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Challenge: Managing Containers at Scale
&lt;/h2&gt;

&lt;p&gt;When applications grow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hundreds or thousands of containers are needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Problems:&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%2Fij62v3a72dfkh7rl6zmc.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%2Fij62v3a72dfkh7rl6zmc.png" alt="Omkar Sharma" width="800" height="627"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to create containers?&lt;/li&gt;
&lt;li&gt;How to restart failed ones?&lt;/li&gt;
&lt;li&gt;How to manage networking?&lt;/li&gt;
&lt;li&gt;How to scale automatically?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Manual management becomes impossible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Google’s Internal Solution – Borg
&lt;/h2&gt;

&lt;p&gt;Google faced this challenge early due to massive traffic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Built &lt;strong&gt;Borg&lt;/strong&gt; (around 2013–2014)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Borg did:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Managed containers at scale&lt;/li&gt;
&lt;li&gt;Automated scheduling and recovery&lt;/li&gt;
&lt;li&gt;Handled failures efficiently&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 7: Kubernetes (K8s)
&lt;/h2&gt;

&lt;p&gt;Based on Borg’s experience, Google introduced &lt;strong&gt;Kubernetes&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;Kubernetes is an &lt;strong&gt;open-source container orchestration platform&lt;/strong&gt; that automates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployment&lt;/li&gt;
&lt;li&gt;Scaling&lt;/li&gt;
&lt;li&gt;Management of containers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why the Name Kubernetes?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9r2hl9k69cc2i13wdk24.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%2F9r2hl9k69cc2i13wdk24.png" alt="Omkar Sharma" width="800" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Derived from Greek word meaning &lt;strong&gt;“Helmsman” (ship pilot)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Represents managing containers like steering a ship&lt;/li&gt;
&lt;li&gt;Abbreviated as &lt;strong&gt;K8s&lt;/strong&gt; (8 letters between K and S)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Problem Solved&lt;/th&gt;
&lt;th&gt;Limitation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bare Metal&lt;/td&gt;
&lt;td&gt;Basic hosting&lt;/td&gt;
&lt;td&gt;Hard to scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud&lt;/td&gt;
&lt;td&gt;Easy infrastructure&lt;/td&gt;
&lt;td&gt;Env consistency issues&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Virtual Machines&lt;/td&gt;
&lt;td&gt;Consistent environments&lt;/td&gt;
&lt;td&gt;Heavy &amp;amp; slow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Containers&lt;/td&gt;
&lt;td&gt;Lightweight &amp;amp; portable&lt;/td&gt;
&lt;td&gt;Hard to manage at scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kubernetes&lt;/td&gt;
&lt;td&gt;Full orchestration&lt;/td&gt;
&lt;td&gt;Learning curve&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;p&gt;The journey from bare metal servers to Kubernetes shows how deployment has evolved to handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scalability&lt;/li&gt;
&lt;li&gt;Reliability&lt;/li&gt;
&lt;li&gt;Efficiency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Today, Kubernetes has become the &lt;strong&gt;industry standard&lt;/strong&gt; for managing containerized applications at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  SEO Keywords (for better reach)
&lt;/h2&gt;

&lt;p&gt;Kubernetes explained, what is Kubernetes, container orchestration, Docker vs Kubernetes, evolution of deployment, cloud computing, DevOps tools, K8s tutorial, container management, microservices deployment&lt;/p&gt;




&lt;p&gt;✍️ &lt;strong&gt;Author&lt;/strong&gt;: &lt;em&gt;Omkar Sharma&lt;/em&gt;&lt;br&gt;&lt;br&gt;
📬 &lt;em&gt;Feel free to connect on &lt;a href="https://www.linkedin.com/in/omkarsharmaa/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or explore more on &lt;a href="https://github.com/omkarsharma2821" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>containers</category>
      <category>awscommunity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Complete Guide to Jenkins CI/CD Pipeline Setup on AWS EC2 (Ubuntu)</title>
      <dc:creator>Omkar Sharma</dc:creator>
      <pubDate>Fri, 27 Feb 2026 10:56:26 +0000</pubDate>
      <link>https://forem.com/omkarsharma2821/complete-guide-to-jenkins-cicd-pipeline-setup-on-aws-ec2-ubuntu-278f</link>
      <guid>https://forem.com/omkarsharma2821/complete-guide-to-jenkins-cicd-pipeline-setup-on-aws-ec2-ubuntu-278f</guid>
      <description>&lt;p&gt;Developers from the Application team write the code and push it to &lt;strong&gt;GitHub&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now, instead of manually building and deploying the application, we use &lt;strong&gt;Jenkins&lt;/strong&gt; as a CI/CD tool to automate the entire process.&lt;/p&gt;

&lt;p&gt;Here’s how the flow works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Developers commit and push the code to &lt;strong&gt;GitHub&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Jenkins is connected to the repository using a webhook.
Whenever new code is pushed, Jenkins automatically triggers a pipeline.&lt;/li&gt;
&lt;li&gt;Jenkins pulls the latest code and starts the &lt;strong&gt;build process&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;During the build stage, &lt;strong&gt;Docker&lt;/strong&gt; is used to create a Docker image from that code.&lt;/li&gt;
&lt;li&gt;The Docker image is then pushed to a container registry (like Docker Hub or ECR).&lt;/li&gt;
&lt;li&gt;In the deployment stage, Jenkins deploys that image either:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;On an &lt;strong&gt;Amazon EC2&lt;/strong&gt; instance, or
&lt;/li&gt;
&lt;li&gt;On a &lt;strong&gt;Kubernetes&lt;/strong&gt; cluster.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Once the application is live, monitoring tools like &lt;strong&gt;Prometheus&lt;/strong&gt; are used to monitor application health, metrics, and performance.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8degmf4msdmeuibddkh.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%2Ft8degmf4msdmeuibddkh.png" alt="Omkar Sharma" width="800" height="681"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  In Simple Terms
&lt;/h3&gt;

&lt;p&gt;Jenkins acts as the brain of the CI/CD pipeline.&lt;br&gt;&lt;br&gt;
It automates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code integration (Continuous Integration)&lt;/li&gt;
&lt;li&gt;Testing and building&lt;/li&gt;
&lt;li&gt;Docker image creation&lt;/li&gt;
&lt;li&gt;Deployment to servers or Kubernetes&lt;/li&gt;
&lt;li&gt;And ensures the whole process runs automatically whenever new code is pushed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the concept of CI/CD using Jenkins — automation from code commit to production deployment and monitoring, without manual intervention.&lt;/p&gt;
&lt;h3&gt;
  
  
  Setting Up Jenkins on AWS EC2 (Ubuntu)
&lt;/h3&gt;
&lt;h3&gt;
  
  
  Launch EC2 Instance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Launch an &lt;strong&gt;Ubuntu Server&lt;/strong&gt; EC2 instance.&lt;/li&gt;
&lt;li&gt;Instance type: Free Tier eligible (e.g., t2.micro).&lt;/li&gt;
&lt;li&gt;Storage: 15 GB (Free Tier eligible).&lt;/li&gt;
&lt;li&gt;Allow &lt;strong&gt;Port 80&lt;/strong&gt; in the Security Group (HTTP traffic).&lt;/li&gt;
&lt;li&gt;(Recommended) Also allow &lt;strong&gt;Port 8080&lt;/strong&gt; for Jenkins default access.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  What is Jenkins?
&lt;/h3&gt;

&lt;p&gt;Jenkins is a self-contained, open source automation server which can be used to automate all sorts of tasks related to building, testing, and delivering or deploying software.&lt;/p&gt;

&lt;p&gt;Jenkins can be installed through native system packages, Docker, or even run standalone on any machine with a Java Runtime Environment (JRE) installed.&lt;/p&gt;
&lt;h3&gt;
  
  
  Installation Steps (Ubuntu/Debian)
&lt;/h3&gt;

&lt;p&gt;Official Documentation:&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.jenkins.io/doc/book/installing/linux/#debianubuntu" rel="noopener noreferrer"&gt;https://www.jenkins.io/doc/book/installing/linux/#debianubuntu&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: Update Packages
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 2: Install Java (Required Before Jenkins)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;fontconfig openjdk-21-jre
java &lt;span class="nt"&gt;-version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fr6g03my1nstrepx57g9n.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%2Fr6g03my1nstrepx57g9n.png" alt="Omkar Sharma" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On Debian/Ubuntu, it is strongly recommended to install Java &lt;strong&gt;before&lt;/strong&gt; Jenkins. If Jenkins is installed first and Java is added later, the Jenkins service may fail to start with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jenkins: failed to find a valid Java installation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install Jenkins (Long Term Support Release)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;wget &lt;span class="nt"&gt;-O&lt;/span&gt; /etc/apt/keyrings/jenkins-keyring.asc &lt;span class="se"&gt;\&lt;/span&gt;
  https://pkg.jenkins.io/debian-stable/jenkins.io-2026.key

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc]"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://pkg.jenkins.io/debian-stable binary/ | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  /etc/apt/sources.list.d/jenkins.list &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;jenkins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Check Jenkins Service Status
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status jenkins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fjofuhezo6ig9rznflkw6.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%2Fjofuhezo6ig9rznflkw6.png" alt="Omkar Sharma" width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the service is active and running, Jenkins has been installed successfully.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To ensure Jenkins is active and running whenever you reboot or restart your server, check whether the service is enabled:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl is-enabled jenkins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;If the output is &lt;code&gt;enabled&lt;/code&gt;, Jenkins will start automatically on boot.&lt;/li&gt;
&lt;li&gt;If the output is &lt;code&gt;disabled&lt;/code&gt;, run the following command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;jenkins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Access Jenkins in Browser
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;strong&gt;Public IP&lt;/strong&gt; of your EC2 instance.&lt;/li&gt;
&lt;li&gt;Open your browser and type:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://&amp;lt;public-ip&amp;gt;:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will see the &lt;strong&gt;Getting Started&lt;/strong&gt; page.&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%2Fya7jcyanp3vki1m7frvl.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%2Fya7jcyanp3vki1m7frvl.png" alt="Omkar Sharma" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Unlock Jenkins
&lt;/h3&gt;

&lt;p&gt;You need to enter the initial admin password stored in the following file on your server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo cat&lt;/span&gt; /var/lib/jenkins/secrets/initialAdminPassword
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fbbxp593cdhncunmxnxo5.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%2Fbbxp593cdhncunmxnxo5.png" alt="Omkar Sharma" width="800" height="93"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy the password and paste it into the Jenkins setup page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install Plugins
&lt;/h3&gt;

&lt;p&gt;After unlocking Jenkins, click on:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install suggested plugins&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuual83b283q458ovuo1.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%2Fhuual83b283q458ovuo1.png" alt="Omkar Sharma" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff5v964etsl1xuvio0ibg.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%2Ff5v964etsl1xuvio0ibg.png" alt="Omkar Sharma" width="800" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpb3bkv60r10td71kja2o.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%2Fpb3bkv60r10td71kja2o.png" alt="Omkar Sharma" width="800" height="584"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fasztirdnbcr3rsnvcuwx.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%2Fasztirdnbcr3rsnvcuwx.png" alt="Omkar Sharma" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Congratulations you have setup the Jenkins&lt;/em&gt;&lt;/strong&gt;
&lt;/h3&gt;
&lt;/blockquote&gt;




&lt;p&gt;✍️ &lt;strong&gt;Author&lt;/strong&gt;: &lt;em&gt;Omkar Sharma&lt;/em&gt;&lt;br&gt;&lt;br&gt;
📬 &lt;em&gt;Feel free to connect on &lt;a href="https://www.linkedin.com/in/omkarsharmaa/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or explore more on &lt;a href="https://github.com/omkarsharma2821" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>jenkins</category>
      <category>cicd</category>
      <category>devops</category>
      <category>aws</category>
    </item>
    <item>
      <title>Docker Compose - Multi Container Setup</title>
      <dc:creator>Omkar Sharma</dc:creator>
      <pubDate>Sat, 14 Feb 2026 07:30:54 +0000</pubDate>
      <link>https://forem.com/omkarsharma2821/docker-compose-multi-containers-setup-1n0o</link>
      <guid>https://forem.com/omkarsharma2821/docker-compose-multi-containers-setup-1n0o</guid>
      <description>&lt;h2&gt;
  
  
  Docker Recap — Environment Replication and Container Management
&lt;/h2&gt;

&lt;p&gt;so now we understand how docker works and how it solves the pain point of environment replication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Recap
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;you need a VM or any machine where docker is installed — either docker CLI or docker desktop&lt;/li&gt;
&lt;li&gt;once docker is set up, you can start managing the lifecycle of your containers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example Scenario — React Application Containerization
&lt;/h2&gt;

&lt;p&gt;for example, in a company developers are working on a react application and they ask you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“hey omkar, can you containerize or dockerize this application?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Steps involved:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;create a dockerfile&lt;/li&gt;
&lt;li&gt;set up a call with the developers to understand the application requirements&lt;/li&gt;
&lt;li&gt;choose the base image&lt;/li&gt;
&lt;li&gt;run commands to install all the dependencies required for the application&lt;/li&gt;
&lt;li&gt;copy the source code&lt;/li&gt;
&lt;li&gt;expose the required ports&lt;/li&gt;
&lt;li&gt;define the entrypoint&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2 — Build and Run the Application
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;create the docker image using:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  docker build -t &amp;lt;image-name&amp;gt; .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;after building the image:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;push it to docker hub&lt;/li&gt;
&lt;li&gt;run the docker container from that image&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Multi-Container Scenario — Docker Compose
&lt;/h2&gt;

&lt;p&gt;now consider another scenario — what if you have an e-commerce application that requires a multi-container setup?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;docker compose is used to manage multi-container applications&lt;/li&gt;
&lt;li&gt;an e-commerce application usually follows a multi-service or microservice architecture&lt;/li&gt;
&lt;li&gt;when working with multiple containers, we need to manage the execution order and dependencies between services&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;a payment or catalog service will not run properly without a database&lt;/li&gt;
&lt;li&gt;docker compose helps define all services in one place&lt;/li&gt;
&lt;li&gt;it manages how containers start and interact with each other&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Docker Recap — Environment Replication and Container Management
&lt;/h2&gt;

&lt;p&gt;so now we understand how docker works and how it solves the pain point of environment replication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Recap
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;you need a VM or any machine where docker is installed — either docker CLI or docker desktop&lt;/li&gt;
&lt;li&gt;once docker is set up, you can start managing the lifecycle of your containers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example Scenario — React Application Containerization
&lt;/h2&gt;

&lt;p&gt;for example, in a company developers are working on a react application and they ask you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Hey omkar, can you containerize or dockerize this application?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Steps involved:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;create a dockerfile&lt;/li&gt;
&lt;li&gt;set up a call with the developers to understand the application requirements&lt;/li&gt;
&lt;li&gt;choose the base image&lt;/li&gt;
&lt;li&gt;run commands to install all the dependencies required for the application&lt;/li&gt;
&lt;li&gt;copy the source code&lt;/li&gt;
&lt;li&gt;expose the required ports&lt;/li&gt;
&lt;li&gt;define the entrypoint&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2 — Build and Run the Application
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;create the docker image using:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  docker build -t &amp;lt;image-name&amp;gt; .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;after building the image:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;push it to docker hub&lt;/li&gt;
&lt;li&gt;run the docker container from that image&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Multi-Container Scenario — Docker Compose
&lt;/h2&gt;

&lt;p&gt;now consider another scenario — what if you have an e-commerce application that requires a multi-container setup?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;docker compose is used to manage multi-container applications&lt;/li&gt;
&lt;li&gt;an e-commerce application usually follows a multi-service or microservice architecture&lt;/li&gt;
&lt;li&gt;when working with multiple containers, we need to manage the execution order and dependencies between services&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;a payment or catalog service will not run properly without a database&lt;/li&gt;
&lt;li&gt;docker compose helps define all services in one place&lt;/li&gt;
&lt;li&gt;it manages how containers start and interact with each other&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;✍️ &lt;strong&gt;Author&lt;/strong&gt;: &lt;em&gt;Omkar Sharma&lt;/em&gt;&lt;br&gt;&lt;br&gt;
📬 &lt;em&gt;Feel free to connect on &lt;a href="https://www.linkedin.com/in/omkarsharmaa/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or explore more on &lt;a href="https://github.com/omkarsharma2821" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>architecture</category>
      <category>microservices</category>
      <category>containers</category>
    </item>
    <item>
      <title>Docker Basics : Problem Statement, Concepts &amp; Commands</title>
      <dc:creator>Omkar Sharma</dc:creator>
      <pubDate>Wed, 11 Feb 2026 06:48:46 +0000</pubDate>
      <link>https://forem.com/omkarsharma2821/docker-basics-problem-statement-concepts-commands-3hij</link>
      <guid>https://forem.com/omkarsharma2821/docker-basics-problem-statement-concepts-commands-3hij</guid>
      <description>&lt;h2&gt;
  
  
  Problem Statement - What Problem Does Docker Solve?
&lt;/h2&gt;

&lt;p&gt;“Same code works on my machine but not on yours.”&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does this happen?
&lt;/h3&gt;

&lt;p&gt;Environment Replication Issues&lt;/p&gt;

&lt;h3&gt;
  
  
  Example Scenario
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You worked on a project for the past 3 months.&lt;/li&gt;
&lt;li&gt;During development, you installed multiple dependencies, libraries, and packages.&lt;/li&gt;
&lt;li&gt;Now you want to onboard another developer.&lt;/li&gt;
&lt;li&gt;You shared the source code and asked them to install dependencies with exact versions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hard to remember specific versions over time.&lt;/li&gt;
&lt;li&gt;New developers may install latest versions instead of required ones.&lt;/li&gt;
&lt;li&gt;Latest versions may introduce breaking changes.&lt;/li&gt;
&lt;li&gt;Suppose you put extra effort to remember the version and dependencies but what if they are using diff OS in that case if Windows CLI you are using will not work in MAC.&lt;/li&gt;
&lt;li&gt;Example:

&lt;ul&gt;
&lt;li&gt;Your project uses Node.js 14.x&lt;/li&gt;
&lt;li&gt;Another developer installs Node.js 18.x&lt;/li&gt;
&lt;li&gt;Result: Application may break or behave differently.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6pjjltawl7yslx55xv9g.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%2F6pjjltawl7yslx55xv9g.png" alt="Omkar Sharma" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Docker solves this by standardizing environments so applications run the same everywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation of Docker CLI &amp;amp; Docker Desktop
&lt;/h2&gt;

&lt;p&gt;Download Docker Desktop from:&lt;br&gt;
&lt;a href="https://www.docker.com/products/docker-desktop/" rel="noopener noreferrer"&gt;https://www.docker.com/products/docker-desktop/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Docker Desktop includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker CLI&lt;/li&gt;
&lt;li&gt;Docker Engine&lt;/li&gt;
&lt;li&gt;Docker Compose&lt;/li&gt;
&lt;li&gt;GUI Dashboard&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Understanding Images vs Containers
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Docker Images
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Preconfigured read-only templates.&lt;/li&gt;
&lt;li&gt;Include:

&lt;ul&gt;
&lt;li&gt;Base OS (optional)&lt;/li&gt;
&lt;li&gt;Runtime (Node, Python, Java, etc.)&lt;/li&gt;
&lt;li&gt;Dependencies&lt;/li&gt;
&lt;li&gt;Application setup&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Used to create containers.&lt;/li&gt;
&lt;li&gt;Images act as blueprints.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Docker Containers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Running instances of Docker Images.&lt;/li&gt;
&lt;li&gt;Package application and dependencies together.&lt;/li&gt;
&lt;li&gt;Lightweight compared to VMs.&lt;/li&gt;
&lt;li&gt;Share host OS kernel (not a full OS like VMs).&lt;/li&gt;
&lt;li&gt;Containers are running applications created from images.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Running Ubuntu Image in a Container
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -it &amp;lt;image_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the image is not available locally, Docker pulls it from Docker Hub automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  Useful Docker Commands
&lt;/h2&gt;

&lt;h3&gt;
  
  
  List Containers
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker container &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  List Images
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker image &lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Enter an Existing Running Container
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &amp;lt;container_name&amp;gt; bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Multiple Containers
&lt;/h2&gt;

&lt;p&gt;Start 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 start &amp;lt;container_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stop 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 stop &amp;lt;container_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key Concept
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Multiple containers can run from the same image.&lt;/li&gt;
&lt;li&gt;Each container has an isolated environment.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create directory in Container 1&lt;/li&gt;
&lt;li&gt;Create directory in Container 2&lt;/li&gt;
&lt;li&gt;Both remain isolated from each other.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fah4l367gs3rguk8o8ied.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%2Fah4l367gs3rguk8o8ied.png" alt="Omkar Sharma" width="800" height="665"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Port Mapping
&lt;/h2&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;-it&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &amp;lt;local_machine_port&amp;gt;:&amp;lt;container_port&amp;gt; &amp;lt;image_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 omkarsharma2821/omkar-node-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F6ffcymh6eiist6qzpups.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%2F6ffcymh6eiist6qzpups.png" alt="Omkar Sharma" width="800" height="91"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzvxa6s6tyuyganw0ehl.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%2Fxzvxa6s6tyuyganw0ehl.png" alt="Omkar Sharma" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Allows access to container services from local machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Environment Variables
&lt;/h2&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;-it&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4000 &lt;span class="nt"&gt;-p&lt;/span&gt; 4000:4000 &amp;lt;image_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Used to configure applications dynamically inside containers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dockerization of a Node.js Application
&lt;/h2&gt;

&lt;p&gt;Initialize Node Project:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Install Express:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;express
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build 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; omkar-node-app &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;As if now the img is avaialbel locally to push to hub.docker.com you need to run the following coommands&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Login first&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker login

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tag your image with latest&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker tag &amp;lt;local_image_name&amp;gt;:latest &amp;lt;dockerhub_username&amp;gt;/&amp;lt;repo_name&amp;gt;:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker tag omkar-nodejs:latest omkarsharma2821/omkar-node-app:latest

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Push to docker hub&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker push &amp;lt;dockerhub_username&amp;gt;/&amp;lt;repo_name&amp;gt;:latest

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker push omkarsharma2821/omkar-node-app:latest

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Docker ensures consistent environments across machines.&lt;/li&gt;
&lt;li&gt;Images are templates.&lt;/li&gt;
&lt;li&gt;Containers are running instances.&lt;/li&gt;
&lt;li&gt;Supports isolated environments, easy onboarding, and scalable deployments.&lt;/li&gt;
&lt;li&gt;Essential for modern development workflows and microservices architecture.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;✍️ &lt;strong&gt;Author&lt;/strong&gt;: &lt;em&gt;Omkar Sharma&lt;/em&gt;&lt;br&gt;&lt;br&gt;
📬 &lt;em&gt;Feel free to connect on &lt;a href="https://www.linkedin.com/in/omkarsharmaa/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or explore more on &lt;a href="https://github.com/omkarsharma2821" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>container</category>
      <category>kubernetes</category>
      <category>containers</category>
    </item>
    <item>
      <title>GIT: Version Control System-Complete Guide</title>
      <dc:creator>Omkar Sharma</dc:creator>
      <pubDate>Sun, 25 Jan 2026 11:46:12 +0000</pubDate>
      <link>https://forem.com/omkarsharma2821/git-version-control-system-complete-guide-50on</link>
      <guid>https://forem.com/omkarsharma2821/git-version-control-system-complete-guide-50on</guid>
      <description>&lt;h2&gt;
  
  
  1. What is a Version Control System (VCS)?
&lt;/h2&gt;

&lt;p&gt;Version control, also known as source control, is a system that helps track and manage changes made to software code over time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why is it required?
&lt;/h3&gt;

&lt;p&gt;As a project grows, code is continuously updated—new features are added, bugs are fixed, and existing logic is modified. In such cases, it becomes difficult to answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who made a specific change?&lt;/li&gt;
&lt;li&gt;When was the change made?&lt;/li&gt;
&lt;li&gt;Why was the change introduced?&lt;/li&gt;
&lt;li&gt;How can we revert to an older stable version?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fby0tqcg9p3za9b7hfzkj.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%2Fby0tqcg9p3za9b7hfzkj.png" alt="Omkar Sharma" width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A Version Control System solves this by maintaining a complete timeline (history) of code changes, making collaboration, tracking, and rollback easy and reliable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Famous VCS Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Git&lt;/strong&gt; (Most popular)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Apache Subversion (SVN)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Piper&lt;/strong&gt; (Used internally by Google)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Introduction to Git VCS
&lt;/h2&gt;

&lt;p&gt;Download Git from the official website:&lt;br&gt;&lt;br&gt;
&lt;a href="https://git-scm.com/install/" rel="noopener noreferrer"&gt;https://git-scm.com/install/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Verify Installation
&lt;/h3&gt;


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

&lt;/div&gt;


&lt;p&gt;If Git is installed correctly, it will display the installed version.&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%2Fbg3lkhueq4cvx0jwc3eq.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%2Fbg3lkhueq4cvx0jwc3eq.png" alt="Omkar Sharma" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What is Git?
&lt;/h3&gt;

&lt;p&gt;Git is a &lt;strong&gt;distributed version control system&lt;/strong&gt; that allows multiple developers to work on the same project simultaneously while keeping track of all changes.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why Git Configuration is Required?
&lt;/h3&gt;

&lt;p&gt;In an organization, multiple developers work on the same codebase. Git uses global configuration (username and email) to identify &lt;strong&gt;who made which changes&lt;/strong&gt; in the commit history.&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%2F1mr5gb4euz0fozco6d9h.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%2F1mr5gb4euz0fozco6d9h.png" alt="Omkar Sharma" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Setting Up Git Global Configuration
&lt;/h3&gt;

&lt;p&gt;First let's create a folder where we keep our source code and config the user name and email to it.&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%2Foonf06y7g0t9rpbzvuic.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%2Foonf06y7g0t9rpbzvuic.png" alt="Omkar Sharma" width="800" height="324"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.name &lt;span class="s2"&gt;"Your Name"&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.email &lt;span class="s2"&gt;"your@email.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fgf6zxz862lnlfatpx02d.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%2Fgf6zxz862lnlfatpx02d.png" alt="Omkar Sharma" width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Version Controlling with Git
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Initializing a Git Project
&lt;/h3&gt;

&lt;p&gt;By default, a folder is &lt;strong&gt;not Git-enabled&lt;/strong&gt;, and Git does not track it.&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%2Fwwexz5dn31e0oo2qxlml.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%2Fwwexz5dn31e0oo2qxlml.png" alt="Omkar Sharma" width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj0vu0bevrzcddr0g2b3k.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%2Fj0vu0bevrzcddr0g2b3k.png" alt="Omkar Sharma" width="800" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To enable Git tracking:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This initializes a Git repository in the folder.&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%2Fhwncf6nc222qpksm8ci4.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%2Fhwncf6nc222qpksm8ci4.png" alt="Omkar Sharma" width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ksimaxnqmoj0qb6blyj.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%2F4ksimaxnqmoj0qb6blyj.png" alt="Omkar Sharma" width="800" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tracking Files
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;After initialization, files are still &lt;strong&gt;untracked&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You must explicitly add files to Git
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add index.js
git add &amp;lt;File Path Name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fw9qghno02qtz0di9u744.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%2Fw9qghno02qtz0di9u744.png" alt="Omkar Sharma" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1mxssb34w2bk7eketw7.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%2Fu1mxssb34w2bk7eketw7.png" alt="Omkar Sharma" width="800" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once added, Git starts tracking changes to the file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Viewing Changes
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;p&gt;Shows differences between the working directory and the staging area.&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%2F11dcy4f03c5i0wsy9jb7.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%2F11dcy4f03c5i0wsy9jb7.png" alt="Omkar Sharma" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Add Multiple Files
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adds all modified and untracked files at once.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;By default, Git does not track any folder or file on your local machine unless you initialize it and add files manually.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Removing Files from VCS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git &lt;span class="nb"&gt;rm&lt;/span&gt; &amp;lt;FILE_PATH&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Introduction to Commits
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is a Commit?
&lt;/h3&gt;

&lt;p&gt;A commit is a snapshot of the staged changes at a specific point in time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Committing Files
&lt;/h3&gt;



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

&lt;/div&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%2Fvu3dkey5r89wzk3p6rt8.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%2Fvu3dkey5r89wzk3p6rt8.png" alt="Omkar Sharma" width="800" height="633"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyw36a4itbigdk4eca0a4.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%2Fyw36a4itbigdk4eca0a4.png" alt="Omkar Sharma" width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Staging Area
&lt;/h3&gt;

&lt;p&gt;The staging area is an intermediate step where files are prepared before committing.&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%2Fvf75cste8ao7keehe8pk.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%2Fvf75cste8ao7keehe8pk.png" alt="Omkar Sharma" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Viewing Commit History
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log
git log &lt;span class="nt"&gt;--oneline&lt;/span&gt;
git diff &amp;lt;to see the changes &lt;span class="k"&gt;in &lt;/span&gt;code file&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F50est3wieqcb0kxokpxh.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%2F50est3wieqcb0kxokpxh.png" alt="Omkar Sharma" width="800" height="393"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git show &amp;lt;commit &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; to see the changes made &lt;span class="k"&gt;in &lt;/span&gt;particular commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fat538nbz8ui4ojr1e41c.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%2Fat538nbz8ui4ojr1e41c.png" alt="Omkar Sharma" width="800" height="312"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git blame &amp;lt;File Name&amp;gt; to see the changes made &lt;span class="k"&gt;in &lt;/span&gt;particular file by whom
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fn7k1wtbd94i5ay89tts9.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%2Fn7k1wtbd94i5ay89tts9.png" alt="Omkar Sharma" width="800" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Reverting Back
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; &amp;lt;commit &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

here we are moving our &lt;span class="nb"&gt;head &lt;/span&gt;so we will loose the below commits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;whenever we are saying VCS we should have something when we do any thing wrong we can revert back.....so Git allows reverting commits to return to a previous stable state when required.&lt;/p&gt;

&lt;p&gt;In this feature we use the concept of Linked List head points to the latest commit.....so we just point our head where we want to revert.&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%2F3po86xpr8h1ceb89hb5r.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%2F3po86xpr8h1ceb89hb5r.png" alt="Omkar Sharma" width="800" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbs8vnwc3m6iefswc9kg.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%2Fcbs8vnwc3m6iefswc9kg.png" alt="Omkar Sharma" width="800" height="385"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git revert &amp;lt;commit &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fcpcpciarw6cmg35ihzav.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%2Fcpcpciarw6cmg35ihzav.png" alt="Omkar Sharma" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fef8qyry76w8j18d3nbij.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%2Fef8qyry76w8j18d3nbij.png" alt="Omkar Sharma" width="800" height="801"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;✍️ &lt;strong&gt;Author&lt;/strong&gt;: &lt;em&gt;Omkar Sharma&lt;/em&gt;&lt;br&gt;&lt;br&gt;
📬 &lt;em&gt;Feel free to connect on &lt;a href="https://www.linkedin.com/in/omkarsharmaa/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or explore more on &lt;a href="https://github.com/omkarsharma2821" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>A Clear Introduction to DevOps and Its Importance</title>
      <dc:creator>Omkar Sharma</dc:creator>
      <pubDate>Wed, 14 Jan 2026 18:23:40 +0000</pubDate>
      <link>https://forem.com/omkarsharma2821/a-clear-introduction-to-devops-and-its-importance-14n1</link>
      <guid>https://forem.com/omkarsharma2821/a-clear-introduction-to-devops-and-its-importance-14n1</guid>
      <description>&lt;h1&gt;
  
  
  What is DevOps?
&lt;/h1&gt;

&lt;p&gt;DevOps is a culture and set of practices that improve an organization’s ability to deliver projects and applications efficiently.&lt;br&gt;&lt;br&gt;
DevOps is not only about CI/CD .... it involves many other vital aspects of a project, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improving delivery
&lt;/li&gt;
&lt;li&gt;Automation
&lt;/li&gt;
&lt;li&gt;Enhancing Quality
&lt;/li&gt;
&lt;li&gt;Monitoring (Observability)
&lt;/li&gt;
&lt;li&gt;Continuous Testing
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;PS:&lt;/strong&gt; DevOps is the process of improving application delivery by automating tasks, increasing quality, and ensuring continuous monitoring and continuous testing.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why DevOps?
&lt;/h1&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%2Fh0h4edquanlt61d6es4y.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%2Fh0h4edquanlt61d6es4y.png" alt="Omkar Sharma" width="796" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As shown in the diagram earlier, all these activities were traditionally manual. Multiple teams worked in silos, and it often took many days to release a project or application. DevOps streamlines and accelerates this entire process.&lt;/p&gt;

&lt;h1&gt;
  
  
  How to Introduce Yourself in DevOps
&lt;/h1&gt;

&lt;p&gt;“Hi, I am working as a DevOps Engineer with &lt;em&gt;X&lt;/em&gt; years of experience. In my previous company, I worked on improving application delivery, enhancing quality, and implementing observability and monitoring practices.”&lt;/p&gt;




&lt;p&gt;✍️ &lt;strong&gt;Author&lt;/strong&gt;: &lt;em&gt;Omkar Sharma&lt;/em&gt;&lt;br&gt;&lt;br&gt;
📬 &lt;em&gt;Feel free to connect on &lt;a href="https://www.linkedin.com/in/omkarsharmaa/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or explore more on &lt;a href="https://github.com/omkarsharma2821" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/em&gt; &lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>azure</category>
      <category>cloud</category>
    </item>
    <item>
      <title>AWS Lambda: The Serverless Engine Powering Cloud Automation</title>
      <dc:creator>Omkar Sharma</dc:creator>
      <pubDate>Mon, 12 Jan 2026 16:56:12 +0000</pubDate>
      <link>https://forem.com/omkarsharma2821/aws-lambda-the-serverless-engine-powering-cloud-automation-2fdg</link>
      <guid>https://forem.com/omkarsharma2821/aws-lambda-the-serverless-engine-powering-cloud-automation-2fdg</guid>
      <description>&lt;p&gt;AWS Lambda is one of the most powerful and popular services in the AWS ecosystem. It allows you to run application logic &lt;strong&gt;without managing servers&lt;/strong&gt;, making it ideal for automation, event-driven workflows, and lightweight backend tasks. With Lambda, you simply upload your code and define a trigger—AWS handles provisioning, scaling, and execution automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is AWS Lambda?
&lt;/h2&gt;

&lt;p&gt;AWS Lambda is a &lt;strong&gt;serverless compute service&lt;/strong&gt; that executes your code in response to events. It supports languages like Python, Node.js, Java, Go, and more. There is no need to create or manage EC2 servers. Instead, Lambda runs your function in a fully managed environment, scales instantly, and charges you only for the compute time consumed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Characteristics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No servers to configure or maintain
&lt;/li&gt;
&lt;li&gt;Automatic scaling from 0 to thousands of requests
&lt;/li&gt;
&lt;li&gt;Pay-per-use billing model
&lt;/li&gt;
&lt;li&gt;Deep integration with AWS services
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg447m05hpbvo9k7flp5w.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%2Fg447m05hpbvo9k7flp5w.png" alt="omkar sharma" width="767" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Is AWS Lambda So Popular?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Completely Serverless
&lt;/h3&gt;

&lt;p&gt;You don’t need to provision, patch, or maintain any infrastructure. Lambda removes the operational burden from developers and cloud teams.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Automatic, Instant Scaling
&lt;/h3&gt;

&lt;p&gt;Lambda scales based on event load. Whether 1 or 1,000 requests, it adjusts automatically without any configuration.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Highly Cost-Effective
&lt;/h3&gt;

&lt;p&gt;Since Lambda charges only when your function executes, there's no cost for idle time. This makes it ideal for workloads with unpredictable volume.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Event-Driven Architecture
&lt;/h3&gt;

&lt;p&gt;Lambda works natively with services like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;S3
&lt;/li&gt;
&lt;li&gt;DynamoDB
&lt;/li&gt;
&lt;li&gt;CloudWatch
&lt;/li&gt;
&lt;li&gt;EventBridge
&lt;/li&gt;
&lt;li&gt;SNS / SQS
&lt;/li&gt;
&lt;li&gt;API Gateway
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it perfect for automation, integrations, and reactive systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Multi-Language Support
&lt;/h3&gt;

&lt;p&gt;Lambda supports Python, Node.js, Java, Go, .NET, Ruby, and custom runtimes—giving teams flexibility to choose the best language.&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%2Faeu2zvp9xjdo1ph0jy1t.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%2Faeu2zvp9xjdo1ph0jy1t.png" alt="omkar sharma" width="600" height="758"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Problem Does AWS Lambda Solve?
&lt;/h2&gt;

&lt;p&gt;Traditionally, even small tasks required running dedicated servers—leading to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Costly idle infrastructure
&lt;/li&gt;
&lt;li&gt;Manual scaling
&lt;/li&gt;
&lt;li&gt;OS patching and maintenance
&lt;/li&gt;
&lt;li&gt;Complex automation scripts
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lambda solves this by offering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serverless compute on demand
&lt;/li&gt;
&lt;li&gt;Automatic resource management
&lt;/li&gt;
&lt;li&gt;Event-based execution
&lt;/li&gt;
&lt;li&gt;Reduced operational workload
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It empowers developers to focus purely on logic instead of infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Real-World Use Cases of AWS Lambda
&lt;/h2&gt;

&lt;p&gt;Below are three practical AWS Lambda use cases (without code), based on your requirement:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Automatically Delete Historical Snapshots
&lt;/h2&gt;

&lt;p&gt;Organizations create regular EBS snapshots but often forget to delete old ones, increasing storage cost over time.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Lambda Helps
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A scheduled EventBridge rule triggers your Lambda daily.&lt;/li&gt;
&lt;li&gt;Lambda fetches all EBS snapshots.&lt;/li&gt;
&lt;li&gt;It identifies snapshots older than a set retention period.&lt;/li&gt;
&lt;li&gt;It deletes those snapshots automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Saves storage cost
&lt;/li&gt;
&lt;li&gt;Ensures retention compliance
&lt;/li&gt;
&lt;li&gt;Eliminates manual cleanup
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import boto3

ec2 = boto3.client('ec2')

def lambda_handler(event, context):
    # Describe all snapshots owned by you
    snapshots = ec2.describe_snapshots(OwnerIds=['self'])['Snapshots']

    for snap in snapshots:
        snap_id = snap['SnapshotId']
        print(f"Deleting Snapshot: {snap_id}")
        try:
            ec2.delete_snapshot(SnapshotId=snap_id)
        except Exception as e:
            print(f"Error deleting {snap_id}: {e}")

    return {
        "status": "Completed",
        "deleted_snapshots": len(snapshots)
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Delete Unused (Available) EBS Volumes
&lt;/h2&gt;

&lt;p&gt;After EC2 instances are terminated, their EBS volumes often remain in the "available" state and keep incurring cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Lambda Helps
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A scheduled Lambda function lists all EBS volumes.&lt;/li&gt;
&lt;li&gt;It identifies volumes in &lt;code&gt;"available"&lt;/code&gt; state.&lt;/li&gt;
&lt;li&gt;Lambda deletes these unused volumes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reduces wasted storage cost
&lt;/li&gt;
&lt;li&gt;Improves cloud hygiene
&lt;/li&gt;
&lt;li&gt;Automates cleanup without manual checks
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import boto3

ec2 = boto3.client('ec2')

def lambda_handler(event, context):
    # Find volumes that are 'available' (i.e., NOT attached)
    volumes = ec2.describe_volumes(
        Filters=[{'Name': 'status', 'Values': ['available']}]
    )['Volumes']

    for vol in volumes:
        vol_id = vol['VolumeId']
        print(f"Deleting Unattached Volume: {vol_id}")
        try:
            ec2.delete_volume(VolumeId=vol_id)
        except Exception as e:
            print(f"Error deleting {vol_id}: {e}")

    return {
        "status": "Completed",
        "deleted_volumes": len(volumes)
    }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Start EC2 Instances That Are in Stopped State
&lt;/h2&gt;

&lt;p&gt;Some environments require EC2 instances to automatically start during working hours or operational windows and often during patching time.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Lambda Helps
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A scheduled trigger (e.g., daily at 9 AM) runs the Lambda function.&lt;/li&gt;
&lt;li&gt;Lambda checks for EC2 instances in &lt;code&gt;"stopped"&lt;/code&gt; state.&lt;/li&gt;
&lt;li&gt;It starts them automatically based on tag filters or instance IDs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ensures required servers start on time
&lt;/li&gt;
&lt;li&gt;Reduces manual effort
&lt;/li&gt;
&lt;li&gt;Supports DevOps automation
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import boto3

ec2 = boto3.client('ec2')

def lambda_handler(event, context):
    # Find all instances that are stopped
    response = ec2.describe_instances(
        Filters=[
            {'Name': 'instance-state-name', 'Values': ['stopped']}
        ]
    )

    stopped_instances = []

    for reservation in response['Reservations']:
        for instance in reservation['Instances']:
            stopped_instances.append(instance['InstanceId'])

    if stopped_instances:
        print(f"Starting instances: {stopped_instances}")
        ec2.start_instances(InstanceIds=stopped_instances)
    else:
        print("No stopped instances found")

    return {
        "action": "start_instances",
        "instances": stopped_instances
    }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;✍️ &lt;strong&gt;Author&lt;/strong&gt;: &lt;em&gt;Omkar Sharma&lt;/em&gt;&lt;br&gt;&lt;br&gt;
📬 &lt;em&gt;Feel free to connect on &lt;a href="https://www.linkedin.com/in/omkarsharmaa/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or explore more on &lt;a href="https://github.com/omkarsharma2821" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/em&gt; &lt;/p&gt;

</description>
      <category>automation</category>
      <category>aws</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Cloud Computing – Complete Overview</title>
      <dc:creator>Omkar Sharma</dc:creator>
      <pubDate>Sat, 20 Dec 2025 08:09:19 +0000</pubDate>
      <link>https://forem.com/omkarsharma2821/cloud-computing-complete-overview-2o35</link>
      <guid>https://forem.com/omkarsharma2821/cloud-computing-complete-overview-2o35</guid>
      <description>&lt;h2&gt;
  
  
  What Is Cloud Computing?
&lt;/h2&gt;

&lt;p&gt;Cloud computing is the practice of renting computing resources such as servers, storage, networking, databases, and software from a third-party provider over the internet. Instead of owning and maintaining physical hardware, users access these resources on demand and pay only for what they use.&lt;/p&gt;

&lt;p&gt;In simple terms, cloud computing allows you to store data and run applications on remote servers hosted over the internet rather than on local machines or on-premises infrastructure.&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%2Ffp6tktgilx2l24wlq82v.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%2Ffp6tktgilx2l24wlq82v.png" alt="Omkar Sharma" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features of Cloud Computing
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jxgl7ochwp6o00l15lz.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%2F7jxgl7ochwp6o00l15lz.png" alt="Omkar Sharma" width="800" height="822"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scalability&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ability to allocate and deallocate resources based on demand.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Elasticity&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Automatic scaling of resources up or down as workload changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;High Availability&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ensures minimal downtime by distributing services across multiple systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agility&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Rapid provisioning of resources to respond quickly to business needs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fault Tolerance&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Capability of systems to continue operating even when components fail.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Disaster Recovery&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ability to recover data and applications after unexpected events.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consumption-Based Model (Pay-as-You-Go)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Users pay only for the resources they consume.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cloud Service Models
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hitz6c7p1ocaezjyd05.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%2F1hitz6c7p1ocaezjyd05.png" alt="Cloud Service Model by Omkar Sharma" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Infrastructure as a Service (IaaS)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Most responsibility lies with the &lt;strong&gt;consumer&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The provider manages networking, storage, servers, and virtualization.&lt;/li&gt;
&lt;li&gt;Common use cases:

&lt;ul&gt;
&lt;li&gt;Test and development&lt;/li&gt;
&lt;li&gt;Lift-and-shift migration&lt;/li&gt;
&lt;li&gt;Virtual machines&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Examples:

&lt;ul&gt;
&lt;li&gt;Azure Virtual Machines&lt;/li&gt;
&lt;li&gt;AWS EC2&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Platform as a Service (PaaS)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Responsibilities are &lt;strong&gt;shared&lt;/strong&gt; between provider and consumer.&lt;/li&gt;
&lt;li&gt;The provider manages OS, runtime, middleware, and infrastructure.&lt;/li&gt;
&lt;li&gt;The consumer focuses on application code and data.&lt;/li&gt;
&lt;li&gt;Use cases:

&lt;ul&gt;
&lt;li&gt;Application development frameworks&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Example:

&lt;ul&gt;
&lt;li&gt;Heroku&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Software as a Service (SaaS)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Most responsibility lies with the &lt;strong&gt;provider&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Users access applications directly over the internet.&lt;/li&gt;
&lt;li&gt;Examples:

&lt;ul&gt;
&lt;li&gt;Gmail&lt;/li&gt;
&lt;li&gt;Outlook&lt;/li&gt;
&lt;li&gt;OneDrive&lt;/li&gt;
&lt;li&gt;Microsoft 365&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Shared Responsibility Model
&lt;/h2&gt;

&lt;p&gt;The shared responsibility model defines how security and management responsibilities are divided between the cloud provider and the customer.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The cloud provider is responsible for securing the &lt;strong&gt;cloud infrastructure&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The customer is responsible for securing &lt;strong&gt;data, access, and configurations&lt;/strong&gt;, depending on the service model.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cloud Deployment Models
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjpv87rlbgbdvbmp09z4v.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%2Fjpv87rlbgbdvbmp09z4v.png" alt="Omkar Sharma" width="800" height="566"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Private Cloud
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Offers greater control and security.&lt;/li&gt;
&lt;li&gt;Higher cost and requires skilled technical teams.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Public Cloud
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fully owned and managed by the cloud provider.&lt;/li&gt;
&lt;li&gt;No large initial investment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Hybrid Cloud
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Combination of private and public clouds.&lt;/li&gt;
&lt;li&gt;Sensitive workloads remain in private clouds while leveraging public cloud flexibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Multi-Cloud
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Uses multiple cloud providers.&lt;/li&gt;
&lt;li&gt;Leverages different services and features from different clouds.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  API (Application Programming Interface)
&lt;/h2&gt;

&lt;p&gt;An API is a set of rules that allows software applications to communicate with each other.&lt;/p&gt;

&lt;p&gt;In cloud computing, APIs provide a programmatic way to interact with cloud services such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compute&lt;/li&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Artificial Intelligence services&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Scaling in Cloud Computing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Vertical Scaling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Increasing or decreasing the capacity of a resource.&lt;/li&gt;
&lt;li&gt;Example: Adding more CPU or RAM to a virtual machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Horizontal Scaling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Adding or removing multiple instances of resources.&lt;/li&gt;
&lt;li&gt;Commonly used in high-traffic applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Virtualization
&lt;/h2&gt;

&lt;p&gt;Virtualization is the process of creating virtual versions of physical resources such as servers, operating systems, storage, and networks.&lt;/p&gt;

&lt;p&gt;Key points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enables running multiple operating systems on a single physical machine.&lt;/li&gt;
&lt;li&gt;Improves resource utilization by logically dividing servers.&lt;/li&gt;
&lt;li&gt;Allows OSs like Windows and Linux to run on the same hardware.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Hypervisor
&lt;/h2&gt;

&lt;p&gt;A hypervisor enables virtualization by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simulating complete machines with their own operating systems.&lt;/li&gt;
&lt;li&gt;Isolating multiple virtual machines on a single physical host.&lt;/li&gt;
&lt;li&gt;Allowing multiple OSs to run independently on the same hardware.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Containerization
&lt;/h2&gt;

&lt;p&gt;Containerization is a lightweight alternative to virtualization and is best suited for microservices architectures.&lt;/p&gt;

&lt;p&gt;Key characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Containers package applications with all required dependencies.&lt;/li&gt;
&lt;li&gt;They share the host OS kernel.&lt;/li&gt;
&lt;li&gt;No separate OS is required for each container.&lt;/li&gt;
&lt;li&gt;Solves the “works on my machine” problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Containers are ideal for scenarios such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full-stack applications with high backend load&lt;/li&gt;
&lt;li&gt;Microservices-based architectures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: Containers cannot run a completely different operating system since they rely on the host OS kernel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Datacenters, Regions, and Availability Zones
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Datacenter
&lt;/h3&gt;

&lt;p&gt;A physical facility that houses servers, storage, and networking equipment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Region
&lt;/h3&gt;

&lt;p&gt;A geographical area containing multiple datacenters to ensure resiliency and reliability for business-critical workloads.&lt;/p&gt;

&lt;h3&gt;
  
  
  Availability Zones (Azure)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Physically separate datacenters within a region.&lt;/li&gt;
&lt;li&gt;Azure regions contain a minimum of three availability zones.&lt;/li&gt;
&lt;li&gt;If one zone fails, the others continue operating.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Azure-Specific Concepts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Management Groups
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Used to organize subscriptions.&lt;/li&gt;
&lt;li&gt;Apply policies, permissions, and restrictions at scale.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Azure Virtual Machines
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Provide Infrastructure as a Service (IaaS).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  VM Scale Sets
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Centrally manage and scale large numbers of identical virtual machines.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Availability Sets
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Improve application uptime by distributing VMs across fault and update domains.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb5w0esojhad9ea0o03iq.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%2Fb5w0esojhad9ea0o03iq.png" alt="Omkar Sharma" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Virtual Machines
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reduce cost compared to physical hardware.&lt;/li&gt;
&lt;li&gt;Each VM runs a single operating system.&lt;/li&gt;
&lt;li&gt;Heavier than containers due to OS overhead.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Containers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lightweight and fast.&lt;/li&gt;
&lt;li&gt;Allow multiple application instances on a single host.&lt;/li&gt;
&lt;li&gt;Package all application dependencies.&lt;/li&gt;
&lt;li&gt;Remove OS-level dependency issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Cloud computing enables organizations to build, deploy, and scale applications efficiently by providing computing resources as services. It offers scalability, flexibility, high availability, and cost efficiency while eliminating the need for heavy upfront infrastructure investments.&lt;/p&gt;




&lt;p&gt;✍️ &lt;strong&gt;Author&lt;/strong&gt;: &lt;em&gt;Omkar Sharma&lt;/em&gt;&lt;br&gt;&lt;br&gt;
📬 &lt;em&gt;Feel free to connect on &lt;a href="https://www.linkedin.com/in/omkarsharmaa/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or explore more on &lt;a href="https://github.com/omkarsharma2821" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/em&gt; &lt;/p&gt;

</description>
      <category>aws</category>
      <category>azure</category>
      <category>cloud</category>
      <category>cloudskills</category>
    </item>
    <item>
      <title>The Only Docker Architecture &amp; Installation Guide You’ll Ever Need</title>
      <dc:creator>Omkar Sharma</dc:creator>
      <pubDate>Mon, 22 Sep 2025 17:57:02 +0000</pubDate>
      <link>https://forem.com/omkarsharma2821/the-only-docker-architecture-installation-guide-youll-ever-need-83c</link>
      <guid>https://forem.com/omkarsharma2821/the-only-docker-architecture-installation-guide-youll-ever-need-83c</guid>
      <description>&lt;h3&gt;
  
  
  Docker Architecture ?
&lt;/h3&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%2F7ulwsv7r3osnfi67edce.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%2F7ulwsv7r3osnfi67edce.png" alt="Docker Architecture" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The above picture, clearly indicates that Docker Deamon is brain of Docker. If Docker Deamon is killed, stops working for some reasons, Docker is brain dead :p (sarcasm intended).&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker LifeCycle
&lt;/h3&gt;

&lt;p&gt;We can use the above Image as reference to understand the lifecycle of Docker.&lt;/p&gt;

&lt;p&gt;There are three important things,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;docker build -&amp;gt; builds docker images from Dockerfile&lt;/li&gt;
&lt;li&gt;docker run   -&amp;gt; runs container from docker images&lt;/li&gt;
&lt;li&gt;docker push  -&amp;gt; push the container image to public/private regestries to share the docker images.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv23qazqa682i6d7o0jn4.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%2Fv23qazqa682i6d7o0jn4.png" alt="Docker" width="800" height="212"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Understanding the terminology (Inspired from Docker Docs)
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Docker daemon
&lt;/h4&gt;

&lt;p&gt;The Docker daemon (dockerd) listens for Docker API requests and manages Docker objects such as images, containers, networks, and volumes. A daemon can also communicate with other daemons to manage Docker services.&lt;/p&gt;

&lt;h4&gt;
  
  
  Docker client
&lt;/h4&gt;

&lt;p&gt;The Docker client (docker) is the primary way that many Docker users interact with Docker. When you use commands such as docker run, the client sends these commands to dockerd, which carries them out. The docker command uses the Docker API. The Docker client can communicate with more than one daemon.&lt;/p&gt;

&lt;h4&gt;
  
  
  Docker Desktop
&lt;/h4&gt;

&lt;p&gt;Docker Desktop is an easy-to-install application for your Mac, Windows or Linux environment that enables you to build and share containerized applications and microservices. Docker Desktop includes the Docker daemon (dockerd), the Docker client (docker), Docker Compose, Docker Content Trust, Kubernetes, and Credential Helper. For more information, see Docker Desktop.&lt;/p&gt;

&lt;h4&gt;
  
  
  Docker registries
&lt;/h4&gt;

&lt;p&gt;A Docker registry stores Docker images. Docker Hub is a public registry that anyone can use, and Docker is configured to look for images on Docker Hub by default. You can even run your own private registry.&lt;/p&gt;

&lt;p&gt;When you use the docker pull or docker run commands, the required images are pulled from your configured registry. When you use the docker push command, your image is pushed to your configured registry.&lt;br&gt;
Docker objects&lt;/p&gt;

&lt;p&gt;When you use Docker, you are creating and using images, containers, networks, volumes, plugins, and other objects. This section is a brief overview of some of those objects.&lt;/p&gt;
&lt;h4&gt;
  
  
  Dockerfile
&lt;/h4&gt;

&lt;p&gt;Dockerfile is a file where you provide the steps to build your Docker Image. &lt;/p&gt;
&lt;h4&gt;
  
  
  Images
&lt;/h4&gt;

&lt;p&gt;An image is a read-only template with instructions for creating a Docker container. Often, an image is based on another image, with some additional customization. For example, you may build an image which is based on the ubuntu image, but installs the Apache web server and your application, as well as the configuration details needed to make your application run.&lt;/p&gt;

&lt;p&gt;You might create your own images or you might only use those created by others and published in a registry. To build your own image, you create a Dockerfile with a simple syntax for defining the steps needed to create the image and run it. Each instruction in a Dockerfile creates a layer in the image. When you change the Dockerfile and rebuild the image, only those layers which have changed are rebuilt. This is part of what makes images so lightweight, small, and fast, when compared to other virtualization technologies.&lt;/p&gt;
&lt;h2&gt;
  
  
  INSTALL DOCKER
&lt;/h2&gt;

&lt;p&gt;A very detailed instructions to install Docker are provide in the below link&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.docker.com/get-docker/" rel="noopener noreferrer"&gt;https://docs.docker.com/get-docker/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For Demo, &lt;/p&gt;

&lt;p&gt;You can create an Ubuntu EC2 Instance on AWS and run the below commands to install docker.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
sudo apt install docker.io -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Start Docker and Grant Access
&lt;/h3&gt;

&lt;p&gt;A very common mistake that many beginners do is, After they install docker using the sudo access, they miss the step to Start the Docker daemon and grant acess to the user they want to use to interact with docker and run docker commands.&lt;/p&gt;

&lt;p&gt;Always ensure the docker daemon is up and running.&lt;/p&gt;

&lt;p&gt;A easy way to verify your Docker installation is by running the below command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the output says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can mean two things, &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Docker deamon is not running.&lt;/li&gt;
&lt;li&gt;Your user does not have access to run docker commands.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Start Docker daemon
&lt;/h3&gt;

&lt;p&gt;You use the below command to verify if the docker daemon is actually started and Active&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl status docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you notice that the docker daemon is not running, you can start the daemon using the below command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Grant Access to your user to run docker commands
&lt;/h3&gt;

&lt;p&gt;To grant access to your user to run the docker command, you should add the user to the Docker Linux group. Docker group is create by default when docker is installed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo usermod -aG docker ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above command &lt;code&gt;ubuntu&lt;/code&gt; is the name of the user, you can change the username appropriately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; : You need to logout and login back for the changes to be reflected.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker is Installed, up and running 🥳🥳
&lt;/h3&gt;

&lt;p&gt;Use the same command again, to verify that docker is up and running.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output should look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;....
....
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;✍️ &lt;strong&gt;Author&lt;/strong&gt;: &lt;em&gt;Omkar Sharma&lt;/em&gt;&lt;br&gt;&lt;br&gt;
📬 &lt;em&gt;Feel free to connect on &lt;a href="https://www.linkedin.com/in/omkarsharmaa/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or explore more on &lt;a href="https://github.com/omkarsharma2821" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/em&gt; &lt;/p&gt;

</description>
      <category>docker</category>
      <category>container</category>
      <category>architecture</category>
      <category>daemon</category>
    </item>
    <item>
      <title>Why Developers Can’t Ignore Docker Anymore</title>
      <dc:creator>Omkar Sharma</dc:creator>
      <pubDate>Mon, 22 Sep 2025 17:25:39 +0000</pubDate>
      <link>https://forem.com/omkarsharma2821/why-developers-cant-ignore-docker-anymore-1do8</link>
      <guid>https://forem.com/omkarsharma2821/why-developers-cant-ignore-docker-anymore-1do8</guid>
      <description>&lt;h2&gt;
  
  
  Problem it Solves: Environment Replication
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;“My code is working on my machine but not on yours.”&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;This is one of the most common concerns developers face when shipping code to production.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reason:&lt;/strong&gt; Environment replication. The dependencies, libraries, and their versions installed on a developer’s machine may not exist on another machine. It’s not practical to ask people every time to download and configure all the required components.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here comes Docker&lt;/strong&gt; — it wraps all the dependencies, libraries, and configurations needed to run the application inside a container.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Difference Between Virtualization and Containers
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz19w5od2lhm5pda8muce.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%2Fz19w5od2lhm5pda8muce.png" alt="Virtualization, Hypervisor, Containerization" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Containers&lt;/strong&gt;: Think of them like VMs but without the overhead of a full operating system. They share the host OS kernel, which makes them lightweight and ideal for microservices.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Virtualization&lt;/strong&gt;: Refers to logically dividing a physical server into multiple virtual machines, each running its own full operating system.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;In simple words, you can understand as `containerization is a concept or technology` and `Docker Implements Containerization` just like a hypervisor helps in implementing virtualization.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Containers and virtual machines are both technologies used to isolate applications and their dependencies, but they have some key differences:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Resource Utilization: Containers share the host operating system kernel, making them lighter and faster than VMs. VMs have a full-fledged OS and hypervisor, making them more resource-intensive.

2. Portability: Containers are designed to be portable and can run on any system with a compatible host operating system. VMs are less portable as they need a compatible hypervisor to run.

3. Security: VMs provide a higher level of security as each VM has its own operating system and can be isolated from the host and other VMs. Containers provide less isolation, as they share the host operating system.

4. Management: Managing containers is typically easier than managing VMs, as containers are designed to be lightweight and fast-moving.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Why are containers light weight ?
&lt;/h2&gt;

&lt;p&gt;Containers are lightweight because they use a technology called containerization, which allows them to share the host operating system's kernel and libraries, while still providing isolation for the application and its dependencies. This results in a smaller footprint compared to traditional virtual machines, as the containers do not need to include a full operating system. Additionally, Docker containers are designed to be minimal, only including what is necessary for the application to run, further reducing their size.&lt;/p&gt;

&lt;p&gt;Let's try to understand this with an example:&lt;/p&gt;

&lt;p&gt;Below is the screenshot of official ubuntu base image which you can use for your container. It's just ~ 22 MB, isn't it very small ? on a contrary if you look at official ubuntu VM image it will be close to ~ 2.3 GB. So the container base image is almost 100 times less than VM image.&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%2Fd7jc1sdlzbntdtfi45sr.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%2Fd7jc1sdlzbntdtfi45sr.png" alt=" " width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To provide a better picture of files and folders that containers base images have and files and folders that containers use from host operating system (not 100 percent accurate -&amp;gt; varies from base image to base image). Refer below.&lt;/p&gt;
&lt;h3&gt;
  
  
  Files and Folders in containers base images
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    /bin: contains binary executable files, such as the ls, cp, and ps commands.

    /sbin: contains system binary executable files, such as the init and shutdown commands.

    /etc: contains configuration files for various system services.

    /lib: contains library files that are used by the binary executables.

    /usr: contains user-related files and utilities, such as applications, libraries, and documentation.

    /var: contains variable data, such as log files, spool files, and temporary files.

    /root: is the home directory of the root user.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Files and Folders that containers use from host operating system
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    The host's file system: Docker containers can access the host file system using bind mounts, which allow the container to read and write files in the host file system.

    Networking stack: The host's networking stack is used to provide network connectivity to the container. Docker containers can be connected to the host's network directly or through a virtual network.

    System calls: The host's kernel handles system calls from the container, which is how the container accesses the host's resources, such as CPU, memory, and I/O.

    Namespaces: Docker containers use Linux namespaces to create isolated environments for the container's processes. Namespaces provide isolation for resources such as the file system, process ID, and network.

    Control groups (cgroups): Docker containers use cgroups to limit and control the amount of resources, such as CPU, memory, and I/O, that a container can access.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's important to note that while a container uses resources from the host operating system, it is still isolated from the host and other containers, so changes to the container do not affect the host or other containers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; There are multiple ways to reduce your VM image size as well, but I am just talking about the default for easy comparision and understanding.&lt;/p&gt;

&lt;p&gt;so, in a nutshell, container base images are typically smaller compared to VM images because they are designed to be minimalist and only contain the necessary components for running a specific application or service. VMs, on the other hand, emulate an entire operating system, including all its libraries, utilities, and system files, resulting in a much larger size. &lt;/p&gt;

&lt;p&gt;I hope it is now very clear why containers are light weight in nature.&lt;/p&gt;




&lt;p&gt;✍️ &lt;strong&gt;Author&lt;/strong&gt;: &lt;em&gt;Omkar Sharma&lt;/em&gt;&lt;br&gt;&lt;br&gt;
📬 &lt;em&gt;Feel free to connect on &lt;a href="https://www.linkedin.com/in/omkarsharmaa/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or explore more on &lt;a href="https://github.com/omkarsharma2821" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/em&gt; &lt;/p&gt;

</description>
      <category>docker</category>
      <category>container</category>
      <category>containers</category>
      <category>virtualization</category>
    </item>
    <item>
      <title>How to Make a Robust System to Handle Bulk Requests (SQS + SNS + DLQ)</title>
      <dc:creator>Omkar Sharma</dc:creator>
      <pubDate>Sat, 26 Jul 2025 19:01:41 +0000</pubDate>
      <link>https://forem.com/omkarsharma2821/stop-losing-emails-whatsapp-smsall-delivered-every-time-the-ultimate-guide-to-scalable-1mf4</link>
      <guid>https://forem.com/omkarsharma2821/stop-losing-emails-whatsapp-smsall-delivered-every-time-the-ultimate-guide-to-scalable-1mf4</guid>
      <description>&lt;h3&gt;
  
  
  How to Make a Robust System to Handle Bulk Requests
&lt;/h3&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%2Ft8c0q9wbo06bpyv02miq.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%2Ft8c0q9wbo06bpyv02miq.png" alt="omkarsharma2821" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s say you need to send order placed and payment confirmation receipts to millions of users. Challenging, right? You can't just run a loop on the server millions of times — that’s not scalable.&lt;/p&gt;

&lt;p&gt;So, we think smart. Let’s create a &lt;strong&gt;bulk email worker/server&lt;/strong&gt; that receives the order and payment confirmation messages, calls the &lt;strong&gt;Gmail API&lt;/strong&gt;, and then sends notifications to users.&lt;/p&gt;

&lt;p&gt;Cool? Perfect! That’s how it works…  &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%2Fww3o1sflew6immj7qf6s.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%2Fww3o1sflew6immj7qf6s.png" alt="omkarsharma2821" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But here's the challenge&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
This is a &lt;strong&gt;synchronous process&lt;/strong&gt;, meaning it depends on the Gmail API. If the Gmail API is down or slow, the worker will &lt;strong&gt;wait for the acknowledgement&lt;/strong&gt; and won’t be able to process other payment events. That’s not scalable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enter AWS SQS — A Robust Solution
&lt;/h3&gt;

&lt;p&gt;To solve this, we can use &lt;strong&gt;Amazon SQS (Simple Queue Service)&lt;/strong&gt;, which is &lt;strong&gt;very robust&lt;/strong&gt; and decouples the system.&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%2Fmvp4kwuoamsvlsh2m7uf.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%2Fmvp4kwuoamsvlsh2m7uf.png" alt="omkarsharma2821" width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Here’s how it works:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;We create a &lt;strong&gt;queue of orders and payment confirmations&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Our &lt;strong&gt;email worker servers&lt;/strong&gt; will continuously &lt;strong&gt;poll the queue&lt;/strong&gt; and ask:
&lt;em&gt;“Hey, do you have something to send?”&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;If there are &lt;strong&gt;millions of messages&lt;/strong&gt;, we can &lt;strong&gt;scale the email workers horizontally&lt;/strong&gt;, i.e., spin up more workers to process them in parallel.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  But Wait… Another Challenge
&lt;/h3&gt;

&lt;p&gt;Even if you scale your email servers, you’re still &lt;strong&gt;dependent on Gmail&lt;/strong&gt;, which may have &lt;strong&gt;rate limits&lt;/strong&gt; — for example, only &lt;strong&gt;5 emails per second&lt;/strong&gt; per user/account.&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%2Fze01m3dsi8vuiae28v42.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%2Fze01m3dsi8vuiae28v42.png" alt="omkarsharma2821" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  To handle this, you can:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Implement &lt;strong&gt;rate limiting logic&lt;/strong&gt; in your workers.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;exponential backoff&lt;/strong&gt; and &lt;strong&gt;retry mechanisms&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Queue unsent emails in a &lt;strong&gt;Dead-Letter Queue (DLQ)&lt;/strong&gt; for retry later.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Multi-Channel Notification? Use AWS SNS
&lt;/h3&gt;

&lt;p&gt;In today’s world, you don’t just send emails. You also send &lt;strong&gt;WhatsApp messages, SMS, and push notifications&lt;/strong&gt;. So how do you scale that?&lt;/p&gt;

&lt;p&gt;Simple: Use &lt;strong&gt;AWS SNS (Simple Notification Service)&lt;/strong&gt; — a &lt;strong&gt;broadcasting service&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Here’s how:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;You &lt;strong&gt;announce an event&lt;/strong&gt; (like &lt;code&gt;"payment_successful"&lt;/code&gt;) using SNS.&lt;/li&gt;
&lt;li&gt;Multiple &lt;strong&gt;subscribers&lt;/strong&gt; (email, SMS, WhatsApp, etc.) are attached to this SNS topic.&lt;/li&gt;
&lt;li&gt;SNS &lt;strong&gt;fan-outs&lt;/strong&gt; the message to different channels, each connected to its own queue or service.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffk03zl2oskzx2f8h1tay.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%2Ffk03zl2oskzx2f8h1tay.png" alt="omkarsharma2821" width="800" height="874"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  So if you have:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;SQS queue&lt;/strong&gt; for email
&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;webhook&lt;/strong&gt; for WhatsApp
&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;SMS gateway&lt;/strong&gt; for text messages
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of them gets the notification &lt;strong&gt;independently&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What If Delivery Fails?
&lt;/h3&gt;

&lt;p&gt;Good question.&lt;/p&gt;

&lt;p&gt;SNS is &lt;strong&gt;fire-and-forget&lt;/strong&gt; by default — no delivery confirmation.&lt;br&gt;&lt;br&gt;
But you can attach &lt;strong&gt;dead-letter queues (DLQs)&lt;/strong&gt; or monitor failures.&lt;/p&gt;

&lt;p&gt;So if a mail fails to send, it goes to a &lt;strong&gt;discarded queue&lt;/strong&gt;, and you can &lt;strong&gt;retry later&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
That’s why sometimes you see receipts &lt;strong&gt;2–3 minutes after making a payment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq04rphf5a8nfdunp6hy6.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%2Fq04rphf5a8nfdunp6hy6.png" alt="omkarsharma2821" width="800" height="653"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Don’t run loops for millions of tasks — &lt;strong&gt;offload to queues&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;SQS&lt;/strong&gt; for message handling and decoupling.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;SNS&lt;/strong&gt; for multi-channel announcements.&lt;/li&gt;
&lt;li&gt;Add &lt;strong&gt;DLQs and retry logic&lt;/strong&gt; to handle external API failures.&lt;/li&gt;
&lt;li&gt;Design the system to be &lt;strong&gt;asynchronous, scalable, and resilient&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhipznqwdeo0n77ey9vj9.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%2Fhipznqwdeo0n77ey9vj9.png" alt="omkarsharma2821" width="800" height="881"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;✍️ &lt;strong&gt;Author&lt;/strong&gt;: &lt;em&gt;Omkar Sharma&lt;/em&gt;&lt;br&gt;&lt;br&gt;
📬 &lt;em&gt;Feel free to connect on &lt;a href="https://www.linkedin.com/in/omkarsharmaa/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or explore more on &lt;a href="https://github.com/omkarsharma2821" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/em&gt; &lt;/p&gt;

</description>
      <category>sns</category>
      <category>sqs</category>
      <category>devops</category>
      <category>dlq</category>
    </item>
    <item>
      <title>Behind the Scenes of Microservices: Load Balancers &amp; API Gateways Explained</title>
      <dc:creator>Omkar Sharma</dc:creator>
      <pubDate>Fri, 25 Jul 2025 20:49:04 +0000</pubDate>
      <link>https://forem.com/omkarsharma2821/behind-the-scenes-of-microservices-load-balancers-api-gateways-explained-2cce</link>
      <guid>https://forem.com/omkarsharma2821/behind-the-scenes-of-microservices-load-balancers-api-gateways-explained-2cce</guid>
      <description>&lt;h3&gt;
  
  
  Load Balancing and API Gateways in Microservices
&lt;/h3&gt;

&lt;p&gt;This document explores the use of load balancers and API gateways in a microservice architecture. It addresses the challenges of horizontal scaling, where server IPs change dynamically, and explains how load balancers distribute traffic evenly across healthy servers. Furthermore, it delves into the role of API gateways in routing requests to the appropriate microservice based on the URL or domain, enhancing the overall efficiency and manageability of the system.&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%2F0336eslwm3lntyd67sqe.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%2F0336eslwm3lntyd67sqe.png" alt="omkarsharma2821" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Load Balancing in Horizontal Scaling
&lt;/h4&gt;

&lt;p&gt;In horizontal scaling, we increase the capacity of a system by adding more servers to the pool. However, this introduces a challenge: the IP addresses of these servers can change dynamically. Traditional DNS resolution might point to only one IP address, leading to uneven distribution of traffic and potential bottlenecks.&lt;/p&gt;

&lt;p&gt;To address this, we employ a &lt;strong&gt;load balancer&lt;/strong&gt;. The load balancer sits in front of the servers and acts as a single point of contact for incoming requests. It then distributes these requests across the available servers based on various load balancing algorithms.&lt;/p&gt;

&lt;h5&gt;
  
  
  Load Balancing Techniques
&lt;/h5&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%2Fpnooewafl5f0ahdfk6f6.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%2Fpnooewafl5f0ahdfk6f6.png" alt="omkarsharma2821" width="800" height="758"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Round Robin&lt;/strong&gt;: Distributes requests sequentially to each server in the pool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Least Connections&lt;/strong&gt;: Sends requests to the server with the fewest active connections.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weighted Round Robin&lt;/strong&gt;: Assigns weights to servers based on their capacity, distributing requests accordingly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IP Hash&lt;/strong&gt;: Uses the client's IP address to determine which server to send the request to, ensuring that requests from the same client are consistently routed to the same server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The load balancer also monitors the health of the servers. If a server becomes unhealthy, the load balancer automatically removes it from the pool, preventing traffic from being directed to it. Once the server recovers, the load balancer adds it back to the pool.&lt;/p&gt;

&lt;h4&gt;
  
  
  Load Balancing in a Microservice Architecture
&lt;/h4&gt;

&lt;p&gt;In a microservice architecture, applications are structured as a collection of loosely coupled, independently deployable services. Each service is responsible for a specific business function. For example, consider a large e-commerce platform like Flipkart during a sale:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Orders Service&lt;/strong&gt;: Handles order placement, tracking, and management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payments Service&lt;/strong&gt;: Processes payments and manages transactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Servers&lt;/strong&gt;: Provide a public interface for accessing the platform's functionality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication Servers&lt;/strong&gt;: Authenticate users and manage their sessions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjhrix268hzqvtopxpcy.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%2Fcjhrix268hzqvtopxpcy.png" alt="omkarsharma2821" width="800" height="659"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each of these services runs on its own set of servers and can be scaled independently based on its specific needs. To ensure high availability and even distribution of traffic, we place a load balancer in front of each service.&lt;/p&gt;

&lt;h5&gt;
  
  
  This setup offers several advantages:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Each service can be scaled independently to handle varying levels of traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resilience&lt;/strong&gt;: If one server fails, the load balancer automatically redirects traffic to the remaining healthy servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Isolation&lt;/strong&gt;: Each service is isolated from the others, preventing failures in one service from affecting the others.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility&lt;/strong&gt;: Different services can use different technologies and be deployed independently.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  API Gateway
&lt;/h4&gt;

&lt;p&gt;In addition to load balancing individual services, we often use an &lt;strong&gt;API gateway&lt;/strong&gt; to manage external access to the microservices. The API gateway acts as a single entry point for all client requests and provides several key functionalities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Routing&lt;/strong&gt;: Directs requests to the appropriate microservice based on the URL or domain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication and Authorization&lt;/strong&gt;: Verifies the identity of the client and ensures that they have the necessary permissions to access the requested resource.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate Limiting&lt;/strong&gt;: Prevents abuse of the API by limiting the number of requests that a client can make within a given time period.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Request Transformation&lt;/strong&gt;: Modifies the request before sending it to the microservice, for example, by adding headers or transforming the data format.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response Aggregation&lt;/strong&gt;: Combines responses from multiple microservices into a single response for the client.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Host-Based Routing
&lt;/h5&gt;

&lt;p&gt;Host-based routing directs requests based on the domain name used in the request. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;orders.example.com&lt;/code&gt; might be routed to the Orders service.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;payments.example.com&lt;/code&gt; might be routed to the Payments service.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqfuisgn9cymftzdg44x.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%2Feqfuisgn9cymftzdg44x.png" alt="omkarsharma2821" width="800" height="857"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Path-Based Routing
&lt;/h5&gt;

&lt;p&gt;Path-based routing directs requests based on the URL path used in the request. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;example.com/orders&lt;/code&gt; might be routed to the Orders service.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;example.com/payments&lt;/code&gt; might be routed to the Payments service.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq16lzf210nlcupm76r8x.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%2Fq16lzf210nlcupm76r8x.png" alt="omkarsharma2821" width="800" height="796"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By using an API gateway, we can simplify the client's interaction with the microservices and provide a consistent and secure interface. It also allows us to evolve the microservices independently without affecting the client.&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;Load balancers and API gateways are essential components of a well-designed microservice architecture. Load balancers ensure high availability and even distribution of traffic across multiple server instances of each service, while API gateways provide a single entry point for all client requests and handle routing, authentication, and other cross-cutting concerns. Together, they enable us to build scalable, resilient, and maintainable microservice applications.&lt;/p&gt;




&lt;p&gt;✍️ &lt;strong&gt;Author&lt;/strong&gt;: &lt;em&gt;Omkar Sharma&lt;/em&gt;&lt;br&gt;&lt;br&gt;
📬 &lt;em&gt;Feel free to connect on &lt;a href="https://www.linkedin.com/in/omkarsharmaa/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or explore more on &lt;a href="https://github.com/omkarsharma2821" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/em&gt; &lt;/p&gt;

</description>
      <category>apigateway</category>
      <category>loadbalancer</category>
      <category>microservices</category>
      <category>systemdesign</category>
    </item>
  </channel>
</rss>
