<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kishore Kumar </title>
    <description>The latest articles on DEV Community by Kishore Kumar  (@devopswithkishore).</description>
    <link>https://dev.to/devopswithkishore</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%2F568826%2F4a602922-474f-48ab-a7a8-5ea008ea9b33.png</url>
      <title>DEV Community: Kishore Kumar </title>
      <link>https://dev.to/devopswithkishore</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devopswithkishore"/>
    <language>en</language>
    <item>
      <title>The Hidden Power of Terraform: Why State Management Is Critically Underrated</title>
      <dc:creator>Kishore Kumar </dc:creator>
      <pubDate>Mon, 12 May 2025 02:26:43 +0000</pubDate>
      <link>https://dev.to/devopswithkishore/the-hidden-power-of-terraform-why-state-management-is-critically-underrated-2kob</link>
      <guid>https://dev.to/devopswithkishore/the-hidden-power-of-terraform-why-state-management-is-critically-underrated-2kob</guid>
      <description>&lt;p&gt;When learning Terraform, most people focus on syntax, modules, and provider configuration. While these are essential, one of the most critical components—&lt;strong&gt;Terraform state management&lt;/strong&gt;—is often neglected.&lt;/p&gt;

&lt;p&gt;Despite being the backbone of how Terraform functions, state handling is frequently misunderstood. In this article, we’ll explore why state management is essential, what risks poor state practices introduce, and how to manage Terraform state correctly and securely.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Terraform State?
&lt;/h2&gt;

&lt;p&gt;Terraform uses a file called &lt;code&gt;terraform.tfstate&lt;/code&gt; to track and map infrastructure resources that it creates and manages. This file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maintains the relationship between your configuration and real-world infrastructure
&lt;/li&gt;
&lt;li&gt;Detects drift or changes between code and reality
&lt;/li&gt;
&lt;li&gt;Determines what resources need to be added, modified, or destroyed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By default, the state file is stored locally. While this is acceptable for experimentation or small-scale projects, relying on local state in collaborative or production environments is risky and unscalable.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Risks of Mismanaging State
&lt;/h2&gt;

&lt;p&gt;Improper state management can have serious, often irreversible consequences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Concurrency Issues: Without state locking, multiple users or automated pipelines may apply changes simultaneously, leading to state corruption or unpredictable behavior.&lt;/li&gt;
&lt;li&gt;Exposure of Secrets: State files may store sensitive information—such as passwords or tokens—in plain text, making them a security risk if not properly secured.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Remote State Is Non-Negotiable
&lt;/h2&gt;

&lt;p&gt;Remote state stores the &lt;code&gt;terraform.tfstate&lt;/code&gt; file in a centralized and secure location, allowing teams to collaborate safely and reliably.&lt;/p&gt;

&lt;p&gt;Popular backends for remote state include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS S3 (with DynamoDB for state locking)
&lt;/li&gt;
&lt;li&gt;Azure Blob Storage
&lt;/li&gt;
&lt;li&gt;Terraform Cloud or Enterprise&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Benefits of remote state:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Enables collaboration through shared access
&lt;/li&gt;
&lt;li&gt;Ensures safe, atomic operations with state locking
&lt;/li&gt;
&lt;li&gt;Provides automatic versioning and backup
&lt;/li&gt;
&lt;li&gt;Enhances security with encryption at rest and in transit&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Importance of State Locking
&lt;/h2&gt;

&lt;p&gt;State locking is vital in preventing multiple operations from modifying the same state file concurrently. Without it, infrastructure changes may overlap and conflict, potentially resulting in broken deployments.&lt;/p&gt;

&lt;p&gt;Backends that support locking include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS S3 with DynamoDB
&lt;/li&gt;
&lt;li&gt;Azure Blob&lt;/li&gt;
&lt;li&gt;Terraform Cloud
&lt;/li&gt;
&lt;li&gt;Consul&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With state locking, Terraform automatically acquires a lock before making changes and releases it afterward, preventing simultaneous modifications.&lt;/p&gt;




&lt;h2&gt;
  
  
  Useful Terraform State Commands
&lt;/h2&gt;

&lt;p&gt;Terraform offers powerful CLI commands for inspecting and managing state directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform state list                &lt;span class="c"&gt;# Lists resources in the current state&lt;/span&gt;
terraform state show &amp;lt;resource&amp;gt;    &lt;span class="c"&gt;# Displays details of a specific resource&lt;/span&gt;
terraform state &lt;span class="nb"&gt;rm&lt;/span&gt; &amp;lt;resource&amp;gt;      &lt;span class="c"&gt;# Removes a resource from the state file&lt;/span&gt;
terraform state &lt;span class="nb"&gt;mv&lt;/span&gt; &amp;lt;old&amp;gt; &amp;lt;new&amp;gt;     &lt;span class="c"&gt;# Renames or moves a resource in state&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Terraform Backend Configuration
&lt;/h2&gt;

&lt;p&gt;Below is an example of how to configure a remote backend using AWS S3 with DynamoDB for state locking in your backend.tf:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;
&lt;span class="nx"&gt;terraform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;backend&lt;/span&gt; &lt;span class="s2"&gt;"s3"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;bucket&lt;/span&gt;         &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"tfstatebucket"&lt;/span&gt;
    &lt;span class="nx"&gt;key&lt;/span&gt;            &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"env/prod/terraform.tfstate"&lt;/span&gt;
    &lt;span class="nx"&gt;region&lt;/span&gt;         &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"us-east-1"&lt;/span&gt;
    &lt;span class="nx"&gt;dynamodb_table&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"my-terraform-lock-table"&lt;/span&gt;
    &lt;span class="nx"&gt;encrypt&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;for Azure Blob Storage&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;
&lt;span class="nx"&gt;terraform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;backend&lt;/span&gt; &lt;span class="s2"&gt;"azurerm"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;resource_group_name&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"infra-rg"&lt;/span&gt;
    &lt;span class="nx"&gt;storage_account_name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"infrastoragestate"&lt;/span&gt;
    &lt;span class="nx"&gt;container_name&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"tfstate"&lt;/span&gt;
    &lt;span class="nx"&gt;key&lt;/span&gt;                  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"stateFiles/${var.github_run_id}/terraform.tfstate"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;



</description>
      <category>terraform</category>
      <category>devops</category>
      <category>azure</category>
      <category>aws</category>
    </item>
    <item>
      <title>Dockerfile Deep Dive, Part 1: CMD vs ENTRYPOINT and COPY vs ADD</title>
      <dc:creator>Kishore Kumar </dc:creator>
      <pubDate>Sun, 06 Apr 2025 06:39:37 +0000</pubDate>
      <link>https://dev.to/devopswithkishore/dockerfile-deep-dive-part-1-cmd-vs-entrypoint-and-copy-vs-add-505l</link>
      <guid>https://dev.to/devopswithkishore/dockerfile-deep-dive-part-1-cmd-vs-entrypoint-and-copy-vs-add-505l</guid>
      <description>&lt;p&gt;Hello, &lt;strong&gt; DevOps Enthusiasts! &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mastering Dockerfile instructions is essential for creating efficient, secure, and maintainable container images. In this post, we’ll break down two commonly misunderstood pairs of instructions—&lt;code&gt;CMD&lt;/code&gt; vs &lt;code&gt;ENTRYPOINT&lt;/code&gt; and &lt;code&gt;COPY&lt;/code&gt; vs &lt;code&gt;ADD&lt;/code&gt;—through a clear, side-by-side comparison.&lt;/p&gt;

&lt;p&gt;If you find it helpful, your support will help continue the series!&lt;/p&gt;

&lt;h2&gt;
  
  
  ↻ CMD vs ENTRYPOINT in Dockerfile
&lt;/h2&gt;

&lt;p&gt;Both &lt;code&gt;CMD&lt;/code&gt; and &lt;code&gt;ENTRYPOINT&lt;/code&gt; define the command that runs when a container starts, but they behave differently.&lt;/p&gt;




&lt;h3&gt;
  
  
  CMD
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;CMD&lt;/code&gt; defines the &lt;strong&gt;default command or arguments&lt;/strong&gt; that are executed when a container starts—&lt;strong&gt;only if no other command is provided at runtime&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
You can override &lt;code&gt;CMD&lt;/code&gt; during container execution by passing a new command to &lt;code&gt;docker run&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; alpine&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["echo", "Hello Readers"]&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;If you execute the container with docker run image-name, it will print:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello Readers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, if you provide a different command when running the container, it overrides the CMD instruction entirely.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run image-name &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello Devops Diaries Reader!"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will produce the output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello Devops Diaries Reader!

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

&lt;/div&gt;



&lt;p&gt;This behavior makes CMD useful when you want to define a default command, but still allow users or scripts to run something else if needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Use &lt;code&gt;CMD&lt;/code&gt; when you want to specify default arguments or commands that can be easily changed by the user at runtime. For example, you might use &lt;code&gt;CMD&lt;/code&gt; to set a default shell or script to execute.&lt;/p&gt;

&lt;h3&gt;
  
  
  ENTRYPOINT
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;ENTRYPOINT&lt;/code&gt; instruction defines a command that always executes when the container starts.&lt;/p&gt;

&lt;p&gt;Unlike &lt;code&gt;CMD&lt;/code&gt;, it cannot be overridden by a command passed at runtime unless you explicitly use the &lt;code&gt;--entrypoint&lt;/code&gt; flag. If a command is provided during container execution, it is appended to the &lt;code&gt;ENTRYPOINT&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; alpine&lt;/span&gt;

&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["echo", "Hello Readers"]&lt;/span&gt;

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

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello Readers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we try to override the command by using the same as CMD in the runtime command&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 image-name hello
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Hello Readers hello
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case, the command gets appended to the ENTRYPOINT.&lt;/p&gt;

&lt;h4&gt;
  
  
  Example with --entrypoint to override the ENTRYPOINT
&lt;/h4&gt;

&lt;p&gt;You can override the ENTRYPOINT at runtime using the --entrypoint flag. This allows you to change the command that is executed when the container starts.&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;--entrypoint&lt;/span&gt; &lt;span class="nb"&gt;echo &lt;/span&gt;myimage &lt;span class="s2"&gt;"Hello, Custom Command"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case, instead of executing the default ENTRYPOINT (which is echo Hello Readers), it will execute echo Hello, Custom Command.&lt;/p&gt;



&lt;h2&gt;
  
  
  ➕ COPY vs ADD in Dockerfile
&lt;/h2&gt;

&lt;p&gt;Both &lt;code&gt;COPY&lt;/code&gt; and &lt;code&gt;ADD&lt;/code&gt; move files into a Docker image — but behave differently.&lt;/p&gt;


&lt;h3&gt;
  
  
  COPY – Clean and Predictable
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Use it for:&lt;/strong&gt; Copying local files and folders from your build context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Syntax:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; &amp;lt;src&amp;gt; &amp;lt;dest&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why use it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only handles local content&lt;/li&gt;
&lt;li&gt;No extraction or downloading&lt;/li&gt;
&lt;li&gt;Clear and secure&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.9&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; requirements.txt .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; app.py .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ADD – More Features, More Risk
&lt;/h3&gt;

&lt;p&gt;Use it for: Archives and remote URLs.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="s"&gt; &amp;lt;src&amp;gt; &amp;lt;dest&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Extra features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extracts .tar, .gz, etc., automatically to the target folder.&lt;/li&gt;
&lt;li&gt;Downloads from URLs directly into the image.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you use ADD with archives like &lt;code&gt;.tar&lt;/code&gt; or &lt;code&gt;.gz&lt;/code&gt;, it will automatically extract the contents to the specified target folder. This behavior can save you a step, but it also introduces complexity if you're not expecting it.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;Extract an archive:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="s"&gt; app.tar.gz .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the contents of app.tar.gz will be automatically extracted into the current working directory (.). If you specify a folder, the contents will be extracted to that directory.&lt;/p&gt;

&lt;p&gt;Download from a URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="s"&gt; https://example.com/file.txt /data/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command downloads the file.txt from the URL and places it into the /data/ directory inside the Docker image.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Practice
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;COPY&lt;/code&gt; by default&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;ADD&lt;/code&gt; only for extraction or remote URLs (prefer curl or wget instead)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally posted in &lt;a href="https://blog.iamkishorekumar.in/posts/docker/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you found this article helpful, please share it with your DevOps colleagues. Feel free to reach out to me at &lt;a href="//mailto:mail@iamkishorekumar.in"&gt;mail@iamkishorekumar.in&lt;/a&gt; with any thoughts or questions. Let’s grow together!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>kubernetes</category>
      <category>development</category>
    </item>
    <item>
      <title>About Me – DevOps &amp; DevSecOps Engineer</title>
      <dc:creator>Kishore Kumar </dc:creator>
      <pubDate>Thu, 27 Mar 2025 03:22:47 +0000</pubDate>
      <link>https://dev.to/devopswithkishore/about-me-devops-devsecops-engineer-20lh</link>
      <guid>https://dev.to/devopswithkishore/about-me-devops-devsecops-engineer-20lh</guid>
      <description>&lt;p&gt;Hey there! I'm &lt;strong&gt;Kishore Kumar&lt;/strong&gt;, a DevOps &amp;amp; DevSecOps Engineer with 5 years of experience in the IT industry. My expertise spans across CI/CD, Cloud, Kubernetes, and Security Automation, helping teams build robust, scalable, and secure infrastructures.&lt;/p&gt;

&lt;p&gt;I believe in sharing &lt;strong&gt;unique insights&lt;/strong&gt; from my DevOps journey, so I write detailed, practical articles on my blog: &lt;a href="https://blog.iamkishorekumar.in/" rel="noopener noreferrer"&gt;blog.iamkishorekumar.in&lt;/a&gt; My goal is to simplify complex DevOps and DevSecOps concepts, build real-world solutions, and help engineers upskill.&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;What I Do&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CI/CD &amp;amp; Automation – GitHub Actions, Terraform, and Infrastructure as Code&lt;/li&gt;
&lt;li&gt;Cloud &amp;amp; Kubernetes – Deploying scalable apps on AWS, Azure &amp;amp; Kubernetes&lt;/li&gt;
&lt;li&gt;DevSecOps &amp;amp; Security – Implementing security in CI/CD pipelines with:&lt;/li&gt;
&lt;li&gt;SAST (Static Analysis) – Semgrep, SonarQube&lt;/li&gt;
&lt;li&gt;DAST (Dynamic Analysis) – OWASP ZAP&lt;/li&gt;
&lt;li&gt;SCA (Software Composition Analysis) – Trivy, Dependency-Check&lt;/li&gt;
&lt;li&gt;Container &amp;amp; Infra Security – Trivy, Kube-bench
Blogging &amp;amp; Knowledge Sharing – Writing hands-on guides &amp;amp; DevOps strategies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🌐 &lt;strong&gt;Check Out My Portfolio&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://iamkishorekumar.in/" rel="noopener noreferrer"&gt;iamkishorekumar.in&lt;/a&gt; – My personal site&lt;br&gt;
👉 &lt;a href="https://blog.iamkishorekumar.in/" rel="noopener noreferrer"&gt;blog.iamkishorekumar.in&lt;/a&gt; DevOps insights.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Connect with Me&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/KK-Repos" rel="noopener noreferrer"&gt;KK-Repos&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn: &lt;a href="https://www.linkedin.com/in/iamkishorekumar/" rel="noopener noreferrer"&gt;linkedin.com/in/iamkishorekumar&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Email : &lt;a href="mailto:mail@iamkishorekumar.in"&gt;mail@iamkishorekumar.in&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 &lt;strong&gt;Support My Work&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you find my content valuable, consider supporting my work! Your support helps me continue sharing high-quality DevOps insights. I’m also open to freelance consulting, collaborations, and sponsorships in DevOps &amp;amp; DevSecOps.&lt;/p&gt;

&lt;p&gt;Let’s grow together! 🚀&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>devsecops</category>
      <category>security</category>
    </item>
    <item>
      <title>The Dockerfile Disaster: How a Non-Root User Broke Our Production App!</title>
      <dc:creator>Kishore Kumar </dc:creator>
      <pubDate>Tue, 25 Mar 2025 02:25:11 +0000</pubDate>
      <link>https://dev.to/devopswithkishore/the-dockerfile-disaster-how-a-non-root-user-broke-my-apps-file-exports-5a5j</link>
      <guid>https://dev.to/devopswithkishore/the-dockerfile-disaster-how-a-non-root-user-broke-my-apps-file-exports-5a5j</guid>
      <description>&lt;p&gt;We all know running containers as root is risky. So, like a responsible DevOps engineer, I switched my Docker container to a non-root user. Everything seemed fine… until my app failed to csv export failed in our production&lt;/p&gt;

&lt;p&gt;What went wrong? 🤔&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The app lost write permissions to a directory.&lt;/li&gt;
&lt;li&gt;The container crashed due to EACCES (permission denied) errors.&lt;/li&gt;
&lt;li&gt;A small security tweak caused an unexpected production issue.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I spent hours debugging before finally solving it. Want to know the fix? 🔥&lt;/p&gt;

&lt;p&gt;👉 Read the full story and solution here:&lt;br&gt;
🔗 &lt;a href="https://blog.iamkishorekumar.in/" rel="noopener noreferrer"&gt;The Dockerfile Disaster – How a Non-Root User Broke My App’s File Exports&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have you ever faced permission issues in Docker containers? Let’s discuss in the comments! 👇&lt;/p&gt;

</description>
      <category>devops</category>
      <category>docker</category>
      <category>linux</category>
      <category>kubernetes</category>
    </item>
  </channel>
</rss>
