<?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: DevOps Rise</title>
    <description>The latest articles on DEV Community by DevOps Rise (@devopsrise_0607).</description>
    <link>https://dev.to/devopsrise_0607</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4023647%2Febb6e96a-cc89-44d1-aa6e-5535fb28cb4e.png</url>
      <title>DEV Community: DevOps Rise</title>
      <link>https://dev.to/devopsrise_0607</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devopsrise_0607"/>
    <language>en</language>
    <item>
      <title>Docker Images vs Containers — Understanding the Core Difference</title>
      <dc:creator>DevOps Rise</dc:creator>
      <pubDate>Tue, 28 Jul 2026 05:27:52 +0000</pubDate>
      <link>https://dev.to/devopsrise_0607/docker-images-vs-containers-understanding-the-core-difference-2cf9</link>
      <guid>https://dev.to/devopsrise_0607/docker-images-vs-containers-understanding-the-core-difference-2cf9</guid>
      <description>&lt;p&gt;Images and containers are the two most fundamental concepts in Docker. Many beginners confuse them. Once you understand the difference, everything else in Docker makes sense.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Simple Analogy
&lt;/h2&gt;

&lt;p&gt;A Docker &lt;strong&gt;image&lt;/strong&gt; is like a recipe (or a class in programming). It defines everything — the base OS, packages to install, files to copy, command to run.&lt;/p&gt;

&lt;p&gt;A Docker &lt;strong&gt;container&lt;/strong&gt; is like a dish cooked from that recipe (or an instance of a class). It is the running thing that actually exists and does work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One recipe, many dishes. One image, many containers.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Docker Images
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Download an image from Docker Hub&lt;/span&gt;
docker pull ubuntu:22.04

&lt;span class="c"&gt;# List images on your machine&lt;/span&gt;
docker images
&lt;span class="c"&gt;# REPOSITORY   TAG      IMAGE ID       SIZE&lt;/span&gt;
&lt;span class="c"&gt;# ubuntu       22.04    a6be9eb88d21   77.8MB&lt;/span&gt;
&lt;span class="c"&gt;# nginx        latest   6efc10a0510f   142MB&lt;/span&gt;

&lt;span class="c"&gt;# See each layer and its size&lt;/span&gt;
docker &lt;span class="nb"&gt;history &lt;/span&gt;nginx

&lt;span class="c"&gt;# Remove an image&lt;/span&gt;
docker rmi ubuntu:22.04

&lt;span class="c"&gt;# Remove all unused images&lt;/span&gt;
docker image prune
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Docker Containers
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create and start a container&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; web-server nginx

&lt;span class="c"&gt;# List running containers&lt;/span&gt;
docker ps
&lt;span class="c"&gt;# CONTAINER ID   IMAGE   STATUS          NAMES&lt;/span&gt;
&lt;span class="c"&gt;# a1b2c3d4e5f6   nginx   Up 2 minutes    web-server&lt;/span&gt;

&lt;span class="c"&gt;# List ALL containers (including stopped)&lt;/span&gt;
docker ps &lt;span class="nt"&gt;-a&lt;/span&gt;

&lt;span class="c"&gt;# Stop it&lt;/span&gt;
docker stop web-server

&lt;span class="c"&gt;# Start it again&lt;/span&gt;
docker start web-server

&lt;span class="c"&gt;# Remove a container&lt;/span&gt;
docker &lt;span class="nb"&gt;rm &lt;/span&gt;web-server

&lt;span class="c"&gt;# Remove a running container forcefully&lt;/span&gt;
docker &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; web-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Layer System
&lt;/h2&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; ubuntu:22.04     # Layer 1: base Ubuntu (77MB)&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apt update        &lt;span class="c"&gt;# Layer 2: package update&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nginx &lt;span class="c"&gt;# Layer 3: nginx installation&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; index.html /var/www/html  # Layer 4: your file&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you run a container, Docker adds a 5th writable layer on top.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key insight:&lt;/strong&gt; 10 containers from the same image all SHARE the read-only image layers. Each container only needs its own tiny writable layer.&lt;/p&gt;

&lt;p&gt;This is why containers are so lightweight!&lt;/p&gt;




&lt;h2&gt;
  
  
  Container Lifecycle
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Create (not running yet)&lt;/span&gt;
docker create &lt;span class="nt"&gt;--name&lt;/span&gt; myapp nginx

&lt;span class="c"&gt;# 2. Start&lt;/span&gt;
docker start myapp

&lt;span class="c"&gt;# 3. Or do both with run&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; myapp2 nginx

&lt;span class="c"&gt;# 4. Pause&lt;/span&gt;
docker pause myapp
docker unpause myapp

&lt;span class="c"&gt;# 5. Stop&lt;/span&gt;
docker stop myapp

&lt;span class="c"&gt;# 6. Remove&lt;/span&gt;
docker &lt;span class="nb"&gt;rm &lt;/span&gt;myapp

&lt;span class="c"&gt;# Quick: stop and remove together&lt;/span&gt;
docker &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; myapp

&lt;span class="c"&gt;# Remove all stopped containers&lt;/span&gt;
docker container prune
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;✅ &lt;strong&gt;Image&lt;/strong&gt; = blueprint, read-only, stored on disk&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Container&lt;/strong&gt; = running instance, has writable layer&lt;br&gt;&lt;br&gt;
✅ Many containers can run from one image&lt;br&gt;&lt;br&gt;
✅ Container writable layer is lost when container is removed&lt;br&gt;&lt;br&gt;
✅ Use volumes for data that needs to persist  &lt;/p&gt;




&lt;p&gt;&lt;em&gt;Practice 535+ real DevOps interview questions at &lt;a href="https://devopsrise.vercel.app" rel="noopener noreferrer"&gt;devopsrise.vercel.app&lt;/a&gt; — completely free.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>beginners</category>
      <category>devops</category>
      <category>programming</category>
    </item>
    <item>
      <title>Docker Architecture Explained — Client, Daemon, and Registry</title>
      <dc:creator>DevOps Rise</dc:creator>
      <pubDate>Tue, 28 Jul 2026 05:27:15 +0000</pubDate>
      <link>https://dev.to/devopsrise_0607/docker-architecture-explained-client-daemon-and-registry-2gne</link>
      <guid>https://dev.to/devopsrise_0607/docker-architecture-explained-client-daemon-and-registry-2gne</guid>
      <description>&lt;p&gt;Most people use Docker without understanding how it works internally. Knowing the architecture helps you debug issues faster and understand why certain commands behave the way they do.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Three Main Components
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Docker Client&lt;/strong&gt; — The &lt;code&gt;docker&lt;/code&gt; CLI you type commands into. When you run &lt;code&gt;docker run nginx&lt;/code&gt;, the client sends that instruction to the daemon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker Daemon (dockerd)&lt;/strong&gt; — The background process that does the actual work. It manages images, containers, networks, and volumes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker Registry&lt;/strong&gt; — Where images are stored. Docker Hub is the default public registry.&lt;/p&gt;

&lt;p&gt;When you type &lt;code&gt;docker pull nginx&lt;/code&gt;, the client tells the daemon to pull the nginx image, and the daemon contacts Docker Hub to download it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Docker Client
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Every command goes through the client&lt;/span&gt;
docker pull nginx          &lt;span class="c"&gt;# Client -&amp;gt; Daemon: pull this image&lt;/span&gt;
docker run nginx           &lt;span class="c"&gt;# Client -&amp;gt; Daemon: create and start container&lt;/span&gt;
docker ps                  &lt;span class="c"&gt;# Client -&amp;gt; Daemon: list containers&lt;/span&gt;
docker build &lt;span class="nt"&gt;-t&lt;/span&gt; myapp &lt;span class="nb"&gt;.&lt;/span&gt;    &lt;span class="c"&gt;# Client -&amp;gt; Daemon: build from Dockerfile&lt;/span&gt;

&lt;span class="c"&gt;# Connect to a remote Docker daemon&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DOCKER_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tcp://remote-server:2376
docker ps  &lt;span class="c"&gt;# Lists containers on the remote server!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Docker Daemon
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check daemon status&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status docker

&lt;span class="c"&gt;# Daemon manages:&lt;/span&gt;
&lt;span class="c"&gt;# - Images (stored in /var/lib/docker/overlay2)&lt;/span&gt;
&lt;span class="c"&gt;# - Containers (running and stopped)&lt;/span&gt;
&lt;span class="c"&gt;# - Networks (bridge, host, overlay)&lt;/span&gt;
&lt;span class="c"&gt;# - Volumes (persistent data storage)&lt;/span&gt;

&lt;span class="c"&gt;# Daemon uses Linux kernel features:&lt;/span&gt;
&lt;span class="c"&gt;# namespaces: isolation (pid, net, mnt, uts, ipc)&lt;/span&gt;
&lt;span class="c"&gt;# cgroups: resource limits (CPU, memory, disk I/O)&lt;/span&gt;

&lt;span class="c"&gt;# Check daemon info&lt;/span&gt;
docker info
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Docker Registry
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Docker Hub (default public registry)&lt;/span&gt;
docker pull nginx           &lt;span class="c"&gt;# pulls nginx:latest&lt;/span&gt;
docker pull nginx:1.25      &lt;span class="c"&gt;# specific version&lt;/span&gt;
docker pull ubuntu:22.04

&lt;span class="c"&gt;# Image naming convention:&lt;/span&gt;
&lt;span class="c"&gt;# registry/namespace/repository:tag&lt;/span&gt;
&lt;span class="c"&gt;# docker.io/library/nginx:latest  (full name)&lt;/span&gt;
&lt;span class="c"&gt;# nginx:latest                    (shorthand)&lt;/span&gt;

&lt;span class="c"&gt;# Private registries:&lt;/span&gt;
&lt;span class="c"&gt;# AWS ECR: 123456789.dkr.ecr.us-east-1.amazonaws.com/myapp:v1&lt;/span&gt;
&lt;span class="c"&gt;# Azure ACR: myregistry.azurecr.io/myapp:v1&lt;/span&gt;

&lt;span class="c"&gt;# Login to a private registry&lt;/span&gt;
docker login myregistry.azurecr.io

&lt;span class="c"&gt;# Push image to registry&lt;/span&gt;
docker tag myapp:v1 myregistry.azurecr.io/myapp:v1
docker push myregistry.azurecr.io/myapp:v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What Happens When You Run &lt;code&gt;docker run nginx&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Step 1: Client receives command&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:80 nginx

&lt;span class="c"&gt;# Step 2: Client sends API request to daemon&lt;/span&gt;

&lt;span class="c"&gt;# Step 3: Daemon checks if image exists locally&lt;/span&gt;
&lt;span class="c"&gt;# If not found: pulls from Docker Hub&lt;/span&gt;

&lt;span class="c"&gt;# Step 4: Daemon creates container&lt;/span&gt;
&lt;span class="c"&gt;# Sets up namespaces for isolation&lt;/span&gt;
&lt;span class="c"&gt;# Sets up cgroups for resource limits&lt;/span&gt;
&lt;span class="c"&gt;# Creates network interface&lt;/span&gt;

&lt;span class="c"&gt;# Step 5: Daemon starts the container process&lt;/span&gt;
&lt;span class="c"&gt;# nginx starts listening on port 80 inside container&lt;/span&gt;

&lt;span class="c"&gt;# Step 6: Port mapping set up&lt;/span&gt;
&lt;span class="c"&gt;# Host port 8080 -&amp;gt; Container port 80&lt;/span&gt;

&lt;span class="c"&gt;# Step 7: Container is running!&lt;/span&gt;
curl http://localhost:8080  &lt;span class="c"&gt;# Works!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Understanding Docker architecture helps you:&lt;/p&gt;

&lt;p&gt;✅ Debug "connection refused" errors (daemon not running?)&lt;br&gt;&lt;br&gt;
✅ Understand why docker commands need sudo (socket permissions)&lt;br&gt;&lt;br&gt;
✅ Know where images are stored (/var/lib/docker)&lt;br&gt;&lt;br&gt;
✅ Set up remote Docker hosts&lt;br&gt;&lt;br&gt;
✅ Choose the right registry for your team  &lt;/p&gt;




&lt;h2&gt;
  
  
  Article 3 — Docker Images vs Containers
&lt;/h2&gt;

&lt;p&gt;Next up: the most fundamental concepts in Docker that beginners confuse. Once you understand the difference, everything else makes sense.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;535+ DevOps interview questions covering Docker, Kubernetes, AWS, Terraform at &lt;a href="https://devopsrise.vercel.app" rel="noopener noreferrer"&gt;devopsrise.vercel.app&lt;/a&gt; — free, no login required.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>beginners</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
    <item>
      <title>What is Docker? Why Developers Love It</title>
      <dc:creator>DevOps Rise</dc:creator>
      <pubDate>Wed, 22 Jul 2026 06:39:03 +0000</pubDate>
      <link>https://dev.to/devopsrise_0607/what-is-docker-why-developers-love-it-2a3l</link>
      <guid>https://dev.to/devopsrise_0607/what-is-docker-why-developers-love-it-2a3l</guid>
      <description>&lt;p&gt;Before Docker, deploying software was painful. A developer would build something on their laptop and it would break on the production server. This was so common it became a meme: &lt;strong&gt;"It works on my machine."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Docker eliminates this entirely. You package your application with its exact dependencies into a container. That container runs identically everywhere.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is a Container?
&lt;/h2&gt;

&lt;p&gt;A container is a lightweight, isolated package that contains everything needed to run an application — code, runtime, libraries, and config files.&lt;/p&gt;

&lt;p&gt;Containers share the host OS kernel but are isolated from each other. This makes them much lighter than virtual machines.&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="c"&gt;# Start a container in seconds&lt;/span&gt;
docker run hello-world

&lt;span class="c"&gt;# Output: "Hello from Docker!"&lt;/span&gt;
&lt;span class="c"&gt;# Pulled an image, created a container, ran it. In 2 seconds.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;Virtual Machine:&lt;/p&gt;

&lt;p&gt;Your App -&amp;gt; Guest OS -&amp;gt; Hypervisor -&amp;gt; Hardware&lt;br&gt;
Size: 20GB+, Boot: minutes&lt;/p&gt;

&lt;p&gt;Container:&lt;/p&gt;

&lt;p&gt;Your App -&amp;gt; Docker -&amp;gt; Host OS Kernel -&amp;gt; Hardware&lt;br&gt;
Size: 50MB, Start: milliseconds&lt;/p&gt;


&lt;h2&gt;
  
  
  Why Developers Love Docker
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Environment consistency:&lt;/strong&gt; Everyone runs the exact same stack. No more "works for me."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dependency isolation:&lt;/strong&gt; Run Python 3.9 for one app and Python 3.7 for another on the same machine without conflicts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fast onboarding:&lt;/strong&gt; New developer joins? One command and they have the full environment ready.&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="c"&gt;# Traditional setup: hours of installation&lt;/span&gt;
&lt;span class="c"&gt;# npm install, pip install, configure database...&lt;/span&gt;

&lt;span class="c"&gt;# With Docker: one command&lt;/span&gt;
docker compose up
&lt;span class="c"&gt;# Entire stack running in 30 seconds, identical to production&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Your First Docker Commands
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Pull an image from Docker Hub&lt;/span&gt;
docker pull nginx

&lt;span class="c"&gt;# Run a container&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:80 &lt;span class="nt"&gt;--name&lt;/span&gt; my-nginx nginx
&lt;span class="c"&gt;# Visit http://localhost:8080 — nginx is running!&lt;/span&gt;

&lt;span class="c"&gt;# List running containers&lt;/span&gt;
docker ps

&lt;span class="c"&gt;# See container logs&lt;/span&gt;
docker logs my-nginx

&lt;span class="c"&gt;# Stop the container&lt;/span&gt;
docker stop my-nginx

&lt;span class="c"&gt;# Remove the container&lt;/span&gt;
docker &lt;span class="nb"&gt;rm &lt;/span&gt;my-nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What to Learn Next
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install Docker Desktop (free for individuals)&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;docker run hello-world&lt;/code&gt; to verify&lt;/li&gt;
&lt;li&gt;Write your first Dockerfile&lt;/li&gt;
&lt;li&gt;Learn Docker Compose for multi-container setups&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Docker is one of the most valuable skills you can add as a DevOps engineer. Every major company uses containers in production.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Practice 535+ DevOps interview questions (including Docker) at &lt;a href="https://devopsrise.vercel.app" rel="noopener noreferrer"&gt;devopsrise.vercel.app&lt;/a&gt; — completely free, no login required.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Kubernetes ConfigMaps and Secrets — Complete Configuration Management Guide</title>
      <dc:creator>DevOps Rise</dc:creator>
      <pubDate>Wed, 15 Jul 2026 07:32:00 +0000</pubDate>
      <link>https://dev.to/devopsrise_0607/kubernetes-configmaps-and-secrets-complete-configuration-management-guide-2026-2117</link>
      <guid>https://dev.to/devopsrise_0607/kubernetes-configmaps-and-secrets-complete-configuration-management-guide-2026-2117</guid>
      <description>&lt;p&gt;Never hardcode configuration or secrets inside your container image. Kubernetes provides two objects for this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ConfigMap&lt;/strong&gt; — non-sensitive config (URLs, settings, feature flags)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secret&lt;/strong&gt; — sensitive data (passwords, API keys, TLS certificates)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both can be consumed in two ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Environment variables&lt;/strong&gt; — inject as env vars&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volume mounts&lt;/strong&gt; — mount as files inside container&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Create a ConfigMap
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Method 1: From literal values&lt;/span&gt;
kubectl create configmap app-config &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from-literal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;APP_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from-literal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;LOG_LEVEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;info &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from-literal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;MAX_CONNECTIONS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;100

&lt;span class="c"&gt;# Method 2: View what was created&lt;/span&gt;
kubectl get configmap app-config &lt;span class="nt"&gt;-o&lt;/span&gt; yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Method 3: YAML manifest (recommended — version controlled)&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ConfigMap&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app-config&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;default&lt;/span&gt;
&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;APP_ENV&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;production"&lt;/span&gt;
  &lt;span class="na"&gt;LOG_LEVEL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;info"&lt;/span&gt;
  &lt;span class="na"&gt;DB_POOL_SIZE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;10"&lt;/span&gt;
  &lt;span class="c1"&gt;# Multi-line config file&lt;/span&gt;
  &lt;span class="na"&gt;nginx.conf&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;server {&lt;/span&gt;
      &lt;span class="s"&gt;listen 80;&lt;/span&gt;
      &lt;span class="s"&gt;location / {&lt;/span&gt;
        &lt;span class="s"&gt;proxy_pass http://localhost:3000;&lt;/span&gt;
      &lt;span class="s"&gt;}&lt;/span&gt;
    &lt;span class="s"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; configmap.yaml
kubectl describe configmap app-config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Use ConfigMap as Environment Variables
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
      &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp:latest&lt;/span&gt;

      &lt;span class="c1"&gt;# Inject ALL keys as env vars&lt;/span&gt;
      &lt;span class="na"&gt;envFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;configMapRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app-config&lt;/span&gt;

      &lt;span class="c1"&gt;# Or inject specific key only&lt;/span&gt;
      &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;APP_ENV&lt;/span&gt;
          &lt;span class="na"&gt;valueFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;configMapKeyRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app-config&lt;/span&gt;
              &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;APP_ENV&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Verify inside container&lt;/span&gt;
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;pod-name &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nb"&gt;env&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;APP_ENV
&lt;span class="c"&gt;# APP_ENV=production&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Mount ConfigMap as File
&lt;/h2&gt;

&lt;p&gt;Great for config files like nginx.conf, application.yaml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;config-volume&lt;/span&gt;
      &lt;span class="na"&gt;configMap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app-config&lt;/span&gt;

  &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
      &lt;span class="na"&gt;volumeMounts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Mount specific key as specific file&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;config-volume&lt;/span&gt;
          &lt;span class="na"&gt;mountPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/etc/nginx/nginx.conf&lt;/span&gt;
          &lt;span class="na"&gt;subPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx.conf&lt;/span&gt;

        &lt;span class="c1"&gt;# Mount all keys as directory&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;config-volume&lt;/span&gt;
          &lt;span class="na"&gt;mountPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/etc/config&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Verify file is mounted&lt;/span&gt;
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;pod-name &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nb"&gt;cat&lt;/span&gt; /etc/nginx/nginx.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Auto-updates when ConfigMap changes within ~1 minute!&lt;/strong&gt;&lt;br&gt;
(Environment variables do NOT auto-update — need pod restart)&lt;/p&gt;


&lt;h2&gt;
  
  
  Create Secrets
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Method 1: kubectl create (auto base64 encodes values)&lt;/span&gt;
kubectl create secret generic db-credentials &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from-literal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;DB_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;supersecret123 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from-literal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;myapp

&lt;span class="c"&gt;# View secret (values are base64 encoded)&lt;/span&gt;
kubectl get secret db-credentials &lt;span class="nt"&gt;-o&lt;/span&gt; yaml

&lt;span class="c"&gt;# Decode a value&lt;/span&gt;
kubectl get secret db-credentials &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"{.data.DB_PASSWORD}"&lt;/span&gt; | &lt;span class="nb"&gt;base64&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;span class="c"&gt;# Output: supersecret123&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# YAML manifest — encode values yourself first&lt;/span&gt;
&lt;span class="c1"&gt;# echo -n "supersecret123" | base64&lt;/span&gt;
&lt;span class="c1"&gt;# Output: c3VwZXJzZWNyZXQxMjM=&lt;/span&gt;

&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Secret&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;db-credentials&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Opaque&lt;/span&gt;
&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;DB_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;c3VwZXJzZWNyZXQxMjM=&lt;/span&gt;
  &lt;span class="na"&gt;DB_USER&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bXlhcHA=&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Use Secrets in Pods
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;

      &lt;span class="c1"&gt;# As environment variables&lt;/span&gt;
      &lt;span class="na"&gt;envFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;secretRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;db-credentials&lt;/span&gt;

      &lt;span class="c1"&gt;# Or specific key&lt;/span&gt;
      &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DB_PASSWORD&lt;/span&gt;
          &lt;span class="na"&gt;valueFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;secretKeyRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;db-credentials&lt;/span&gt;
              &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DB_PASSWORD&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# As volume mount (MORE SECURE — not in process list)&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;secrets-vol&lt;/span&gt;
      &lt;span class="na"&gt;secret&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;secretName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;db-credentials&lt;/span&gt;
        &lt;span class="na"&gt;defaultMode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0400&lt;/span&gt;  &lt;span class="c1"&gt;# Read-only, owner only!&lt;/span&gt;

  &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
      &lt;span class="na"&gt;volumeMounts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;secrets-vol&lt;/span&gt;
          &lt;span class="na"&gt;mountPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/etc/secrets&lt;/span&gt;
          &lt;span class="na"&gt;readOnly&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="c1"&gt;# Files created:&lt;/span&gt;
&lt;span class="c1"&gt;# /etc/secrets/DB_PASSWORD&lt;/span&gt;
&lt;span class="c1"&gt;# /etc/secrets/DB_USER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Important: Secrets Are NOT Truly Secret By Default
&lt;/h2&gt;

&lt;p&gt;Kubernetes Secrets are only &lt;strong&gt;base64 encoded&lt;/strong&gt; in etcd — not encrypted!&lt;/p&gt;

&lt;p&gt;Anyone with etcd access can read them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Production solution — External Secrets Operator:&lt;/strong&gt;&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="c"&gt;# Install External Secrets Operator&lt;/span&gt;
helm repo add external-secrets https://charts.external-secrets.io
helm &lt;span class="nb"&gt;install &lt;/span&gt;external-secrets external-secrets/external-secrets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Sync from AWS Secrets Manager automatically&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;external-secrets.io/v1beta1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ExternalSecret&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;db-credentials&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;refreshInterval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1h&lt;/span&gt;
  &lt;span class="na"&gt;secretStoreRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aws-secretsmanager&lt;/span&gt;
    &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ClusterSecretStore&lt;/span&gt;
  &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;db-credentials&lt;/span&gt;   &lt;span class="c1"&gt;# K8s secret created automatically&lt;/span&gt;
  &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;secretKey&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DB_PASSWORD&lt;/span&gt;
      &lt;span class="na"&gt;remoteRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production/myapp/db&lt;/span&gt;
        &lt;span class="na"&gt;property&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;password&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ConfigMap vs Secret — When to Use What
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;App settings, URLs, flags&lt;/td&gt;
&lt;td&gt;ConfigMap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database passwords&lt;/td&gt;
&lt;td&gt;Secret&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API keys, tokens&lt;/td&gt;
&lt;td&gt;Secret&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TLS certificates&lt;/td&gt;
&lt;td&gt;Secret (type: tls)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Config files (nginx.conf)&lt;/td&gt;
&lt;td&gt;ConfigMap volume mount&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic config updates&lt;/td&gt;
&lt;td&gt;ConfigMap volume mount&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production secrets&lt;/td&gt;
&lt;td&gt;External Secrets Operator&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Quick Reference Commands
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# ConfigMap&lt;/span&gt;
kubectl create configmap name &lt;span class="nt"&gt;--from-literal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;value
kubectl get configmaps
kubectl describe configmap name
kubectl edit configmap name

&lt;span class="c"&gt;# Secret&lt;/span&gt;
kubectl create secret generic name &lt;span class="nt"&gt;--from-literal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;value
kubectl get secrets
kubectl describe secret name
kubectl get secret name &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"{.data.key}"&lt;/span&gt; | &lt;span class="nb"&gt;base64&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;

&lt;span class="c"&gt;# Delete&lt;/span&gt;
kubectl delete configmap name
kubectl delete secret name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Practice Kubernetes Interview Questions
&lt;/h2&gt;

&lt;p&gt;535+ real DevOps interview questions — Kubernetes, Docker, AWS, Terraform and more.&lt;/p&gt;

&lt;p&gt;Completely free at &lt;strong&gt;&lt;a href="https://devopsrise.vercel.app" rel="noopener noreferrer"&gt;devopsrise.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No login required. Bookmark questions. Download PDF.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>docker</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Kubernetes RBAC — Control Who Can Do What in Your Cluster</title>
      <dc:creator>DevOps Rise</dc:creator>
      <pubDate>Wed, 15 Jul 2026 07:29:01 +0000</pubDate>
      <link>https://dev.to/devopsrise_0607/kubernetes-rbac-control-who-can-do-what-in-your-cluster-2026-3p0d</link>
      <guid>https://dev.to/devopsrise_0607/kubernetes-rbac-control-who-can-do-what-in-your-cluster-2026-3p0d</guid>
      <description>&lt;p&gt;Without RBAC properly configured:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A developer can accidentally delete production pods&lt;/li&gt;
&lt;li&gt;A compromised app can read ALL secrets in the cluster&lt;/li&gt;
&lt;li&gt;CI/CD pipelines have unlimited cluster access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RBAC uses 4 objects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Role&lt;/strong&gt; — namespace-scoped permissions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ClusterRole&lt;/strong&gt; — cluster-wide permissions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RoleBinding&lt;/strong&gt; — attach Role to a user/serviceaccount&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ClusterRoleBinding&lt;/strong&gt; — attach ClusterRole cluster-wide&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Check Permissions First
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# What can YOU do?&lt;/span&gt;
kubectl auth can-i get pods
kubectl auth can-i delete deployments
kubectl auth can-i get secrets &lt;span class="nt"&gt;-n&lt;/span&gt; production

&lt;span class="c"&gt;# What can a specific user do?&lt;/span&gt;
kubectl auth can-i get pods &lt;span class="nt"&gt;--as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;john.doe &lt;span class="nt"&gt;-n&lt;/span&gt; dev
kubectl auth can-i delete pods &lt;span class="nt"&gt;--as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;john.doe &lt;span class="nt"&gt;-n&lt;/span&gt; dev  &lt;span class="c"&gt;# no&lt;/span&gt;
kubectl auth can-i get secrets &lt;span class="nt"&gt;--as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;john.doe &lt;span class="nt"&gt;-n&lt;/span&gt; dev  &lt;span class="c"&gt;# no&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Create a Role (Namespace-Scoped)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# developer-role.yaml&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Role&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;developer-role&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dev&lt;/span&gt;
&lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;apiGroups&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pods"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pods/log"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;verbs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;list"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;watch"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;apiGroups&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apps"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deployments"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;replicasets"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;verbs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;list"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;watch"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;apiGroups&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;configmaps"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;services"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;verbs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;list"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="c1"&gt;# Explicitly NO access to secrets!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; developer-role.yaml
kubectl describe role developer-role &lt;span class="nt"&gt;-n&lt;/span&gt; dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Bind Role to User
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# rolebinding.yaml&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;RoleBinding&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;developer-binding&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dev&lt;/span&gt;
&lt;span class="na"&gt;subjects&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;User&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;john.doe&lt;/span&gt;
    &lt;span class="na"&gt;apiGroup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rbac.authorization.k8s.io&lt;/span&gt;
&lt;span class="na"&gt;roleRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Role&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;developer-role&lt;/span&gt;
  &lt;span class="na"&gt;apiGroup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rbac.authorization.k8s.io&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; rolebinding.yaml

&lt;span class="c"&gt;# Test permissions&lt;/span&gt;
kubectl auth can-i get pods &lt;span class="nt"&gt;--as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;john.doe &lt;span class="nt"&gt;-n&lt;/span&gt; dev    &lt;span class="c"&gt;# yes ✅&lt;/span&gt;
kubectl auth can-i delete pods &lt;span class="nt"&gt;--as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;john.doe &lt;span class="nt"&gt;-n&lt;/span&gt; dev  &lt;span class="c"&gt;# no ✅&lt;/span&gt;
kubectl auth can-i get secrets &lt;span class="nt"&gt;--as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;john.doe &lt;span class="nt"&gt;-n&lt;/span&gt; dev  &lt;span class="c"&gt;# no ✅&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ClusterRole — Cluster-Wide Permissions
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# cluster-reader.yaml&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ClusterRole&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cluster-reader&lt;/span&gt;
&lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;apiGroups&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apps"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;batch"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;verbs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;list"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;watch"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="c1"&gt;# Still NO secrets access!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Built-in ClusterRoles you can use:&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="c"&gt;# View available built-in roles&lt;/span&gt;
kubectl get clusterroles | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; system

&lt;span class="c"&gt;# Common ones:&lt;/span&gt;
&lt;span class="c"&gt;# cluster-admin  - full access (be very careful!)&lt;/span&gt;
&lt;span class="c"&gt;# admin          - full access in namespace&lt;/span&gt;
&lt;span class="c"&gt;# edit           - read/write most resources&lt;/span&gt;
&lt;span class="c"&gt;# view           - read-only most resources&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ServiceAccounts for Applications
&lt;/h2&gt;

&lt;p&gt;Applications in pods should use ServiceAccounts — never hardcoded credentials:&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="c"&gt;# Create ServiceAccount&lt;/span&gt;
kubectl create serviceaccount myapp-sa &lt;span class="nt"&gt;-n&lt;/span&gt; default

&lt;span class="c"&gt;# Create Role with MINIMUM permissions&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Role&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp-role&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;default&lt;/span&gt;
&lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;apiGroups&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;configmaps"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;verbs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;resourceNames&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;myapp-config"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;  &lt;span class="c1"&gt;# Only THIS configmap!&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;apiGroups&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;secrets"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;verbs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;resourceNames&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;myapp-secret"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;  &lt;span class="c1"&gt;# Only THIS secret!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Bind ServiceAccount to Role&lt;/span&gt;
kubectl create rolebinding myapp-binding &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;myapp-role &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--serviceaccount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;default:myapp-sa

&lt;span class="c"&gt;# Use in Deployment spec:&lt;/span&gt;
&lt;span class="c"&gt;# serviceAccountName: myapp-sa&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  RBAC for CI/CD Pipelines
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create namespace and ServiceAccount for CI/CD&lt;/span&gt;
kubectl create namespace ci-cd
kubectl create serviceaccount github-actions &lt;span class="nt"&gt;-n&lt;/span&gt; ci-cd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# deployer role - just enough to update deployments&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ClusterRole&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deployer&lt;/span&gt;
&lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;apiGroups&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apps"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deployments"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;verbs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;list"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;update"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;patch"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;apiGroups&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pods"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;verbs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;list"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;watch"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; deployer-role.yaml

kubectl create clusterrolebinding github-actions-binding &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--clusterrole&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;deployer &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--serviceaccount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ci-cd:github-actions

&lt;span class="c"&gt;# CI/CD can deploy but CANNOT:&lt;/span&gt;
&lt;span class="c"&gt;# - Read secrets&lt;/span&gt;
&lt;span class="c"&gt;# - Delete resources&lt;/span&gt;
&lt;span class="c"&gt;# - Access other namespaces&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Audit RBAC — Who Has What Access
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List all roles in namespace&lt;/span&gt;
kubectl get roles &lt;span class="nt"&gt;-n&lt;/span&gt; dev
kubectl get rolebindings &lt;span class="nt"&gt;-n&lt;/span&gt; dev

&lt;span class="c"&gt;# List cluster-wide&lt;/span&gt;
kubectl get clusterroles | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; system
kubectl get clusterrolebindings | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; system

&lt;span class="c"&gt;# What can a serviceaccount do?&lt;/span&gt;
kubectl auth can-i &lt;span class="nt"&gt;--list&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;system:serviceaccount:default:myapp-sa

&lt;span class="c"&gt;# Describe binding to see subjects&lt;/span&gt;
kubectl describe rolebinding developer-binding &lt;span class="nt"&gt;-n&lt;/span&gt; dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  RBAC Best Practices
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Practice&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Least privilege always&lt;/td&gt;
&lt;td&gt;Limit blast radius&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Roles over ClusterRoles&lt;/td&gt;
&lt;td&gt;Namespace isolation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ServiceAccounts for apps&lt;/td&gt;
&lt;td&gt;No hardcoded credentials&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Never use cluster-admin for apps&lt;/td&gt;
&lt;td&gt;Too dangerous&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;resourceNames for specific access&lt;/td&gt;
&lt;td&gt;Extra restriction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit RBAC quarterly&lt;/td&gt;
&lt;td&gt;Remove unused permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Practice Kubernetes Interview Questions
&lt;/h2&gt;

&lt;p&gt;535+ real DevOps interview questions — Kubernetes, Docker, AWS, Terraform and more.&lt;/p&gt;

&lt;p&gt;Completely free at &lt;strong&gt;&lt;a href="https://devopsrise.vercel.app" rel="noopener noreferrer"&gt;devopsrise.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mock interview mode with timer available!&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>security</category>
      <category>devops</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Docker Networking Explained — Bridge, Host and Custom Networks (2026)</title>
      <dc:creator>DevOps Rise</dc:creator>
      <pubDate>Wed, 15 Jul 2026 07:27:53 +0000</pubDate>
      <link>https://dev.to/devopsrise_0607/docker-networking-explained-bridge-host-and-custom-networks-2026-1oo1</link>
      <guid>https://dev.to/devopsrise_0607/docker-networking-explained-bridge-host-and-custom-networks-2026-1oo1</guid>
      <description>&lt;p&gt;How do containers talk to each other? Why can my web container reach my database by name but not by default? This guide explains Docker networking completely.&lt;/p&gt;




&lt;h2&gt;
  
  
  Docker Network Types
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List all networks&lt;/span&gt;
docker network &lt;span class="nb"&gt;ls&lt;/span&gt;

&lt;span class="c"&gt;# Output:&lt;/span&gt;
&lt;span class="c"&gt;# NETWORK ID     NAME      DRIVER&lt;/span&gt;
&lt;span class="c"&gt;# abc123         bridge    bridge    &amp;lt;- default&lt;/span&gt;
&lt;span class="c"&gt;# def456         host      host      &amp;lt;- shares host network&lt;/span&gt;
&lt;span class="c"&gt;# ghi789         none      null      &amp;lt;- no networking&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Default Bridge Network — IP Only
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run two containers&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; web nginx
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; db postgres

&lt;span class="c"&gt;# Communicate by IP — works ✅&lt;/span&gt;
docker &lt;span class="nb"&gt;exec &lt;/span&gt;web ping 172.17.0.3

&lt;span class="c"&gt;# Communicate by name — FAILS ❌&lt;/span&gt;
docker &lt;span class="nb"&gt;exec &lt;/span&gt;web ping db
&lt;span class="c"&gt;# Error: bad address 'db'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Default bridge does NOT support DNS — containers cannot find each other by name!&lt;/p&gt;




&lt;h2&gt;
  
  
  Custom Bridge Network — Use This Always
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create custom network&lt;/span&gt;
docker network create myapp-network

&lt;span class="c"&gt;# Run containers on custom network&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; web &lt;span class="nt"&gt;--network&lt;/span&gt; myapp-network nginx
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; db &lt;span class="nt"&gt;--network&lt;/span&gt; myapp-network postgres

&lt;span class="c"&gt;# Now DNS works automatically!&lt;/span&gt;
docker &lt;span class="nb"&gt;exec &lt;/span&gt;web ping db        &lt;span class="c"&gt;# Works ✅&lt;/span&gt;
docker &lt;span class="nb"&gt;exec &lt;/span&gt;web curl http://db:5432  &lt;span class="c"&gt;# Works ✅&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your Node.js app can connect using service name:&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="nv"&gt;DATABASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postgresql://user:pass@db:5432/mydb
&lt;span class="c"&gt;# "db" resolves to container IP automatically!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Docker Compose — Automatic Networking
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# docker-compose.yml&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;web&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8080:80"&lt;/span&gt;       &lt;span class="c1"&gt;# Exposed to host&lt;/span&gt;

  &lt;span class="na"&gt;api&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_HOST=database&lt;/span&gt;  &lt;span class="c1"&gt;# Service name as hostname!&lt;/span&gt;
    &lt;span class="c1"&gt;# No ports — internal only&lt;/span&gt;

  &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres&lt;/span&gt;
    &lt;span class="c1"&gt;# No ports — NOT accessible from outside!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compose creates a default network automatically. Services reach each other using the &lt;strong&gt;service name as hostname&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security rule: Only expose ports for public-facing services!&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Port Mapping Explained
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# -p HOST_PORT:CONTAINER_PORT&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:80 nginx
&lt;span class="c"&gt;# localhost:8080 → container port 80&lt;/span&gt;

&lt;span class="c"&gt;# Bind to localhost only (more secure)&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 127.0.0.1:3000:3000 myapp
&lt;span class="c"&gt;# Only accessible from this machine, not external!&lt;/span&gt;

&lt;span class="c"&gt;# Multiple port mappings&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 80:80 &lt;span class="nt"&gt;-p&lt;/span&gt; 443:443 nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Host Network — Maximum Performance
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Container shares host network stack&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--network&lt;/span&gt; host nginx

&lt;span class="c"&gt;# Nginx now accessible on host port 80 directly&lt;/span&gt;
&lt;span class="c"&gt;# No port mapping needed!&lt;/span&gt;
curl http://localhost:80  &lt;span class="c"&gt;# Works!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maximum network performance&lt;/li&gt;
&lt;li&gt;Monitoring tools that inspect host network&lt;/li&gt;
&lt;li&gt;When container needs host port access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Warning: Less isolation — container can access everything on host!&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Networking Commands
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List all networks&lt;/span&gt;
docker network &lt;span class="nb"&gt;ls&lt;/span&gt;

&lt;span class="c"&gt;# Create network&lt;/span&gt;
docker network create myapp-network

&lt;span class="c"&gt;# Connect running container to network&lt;/span&gt;
docker network connect myapp-network container-name

&lt;span class="c"&gt;# Disconnect&lt;/span&gt;
docker network disconnect myapp-network container-name

&lt;span class="c"&gt;# Inspect network (see all containers and IPs)&lt;/span&gt;
docker network inspect myapp-network

&lt;span class="c"&gt;# Remove unused networks&lt;/span&gt;
docker network prune
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Debug Network Issues
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check which network a container is on&lt;/span&gt;
docker inspect container1 | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; 20 Networks

&lt;span class="c"&gt;# Test connectivity from inside container&lt;/span&gt;
docker &lt;span class="nb"&gt;exec &lt;/span&gt;container1 ping container2
docker &lt;span class="nb"&gt;exec &lt;/span&gt;container1 curl http://container2:3000/health

&lt;span class="c"&gt;# Run busybox for debugging&lt;/span&gt;
docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;--network&lt;/span&gt; myapp-network busybox sh
&lt;span class="c"&gt;# Inside: ping db, wget -O- http://api:3000&lt;/span&gt;

&lt;span class="c"&gt;# Check if port is listening inside container&lt;/span&gt;
docker &lt;span class="nb"&gt;exec &lt;/span&gt;container1 netstat &lt;span class="nt"&gt;-tlnp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Key Rules to Remember
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Containers need to talk&lt;/td&gt;
&lt;td&gt;Custom bridge network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Need DNS by name&lt;/td&gt;
&lt;td&gt;Custom bridge network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maximum performance&lt;/td&gt;
&lt;td&gt;Host network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Complete isolation&lt;/td&gt;
&lt;td&gt;None network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-container app&lt;/td&gt;
&lt;td&gt;Docker Compose&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Golden rule: In Docker Compose, use service name as hostname. Only expose ports for public services.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Practice Docker Interview Questions
&lt;/h2&gt;

&lt;p&gt;535+ real DevOps interview questions — Docker, Kubernetes, AWS, Terraform and more.&lt;/p&gt;

&lt;p&gt;Completely free at &lt;strong&gt;&lt;a href="https://devopsrise.vercel.app" rel="noopener noreferrer"&gt;devopsrise.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No login required. Mock interview mode available.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Top 40 Terraform Interview Questions with Answers (2026)</title>
      <dc:creator>DevOps Rise</dc:creator>
      <pubDate>Fri, 10 Jul 2026 10:35:21 +0000</pubDate>
      <link>https://dev.to/devopsrise_0607/top-40-terraform-interview-questions-with-answers-2026-1lol</link>
      <guid>https://dev.to/devopsrise_0607/top-40-terraform-interview-questions-with-answers-2026-1lol</guid>
      <description>&lt;h1&gt;
  
  
  Top 40 Terraform Interview Questions (2026)
&lt;/h1&gt;

&lt;p&gt;Terraform is asked in almost every DevOps/Cloud &lt;br&gt;
interview. Here are the most important questions.&lt;/p&gt;

&lt;p&gt;Full Q&amp;amp;A + PDF: &lt;a href="https://devopsrise.vercel.app/qa" rel="noopener noreferrer"&gt;devopsrise.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Beginner Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: What is Terraform?&lt;/strong&gt;&lt;br&gt;
Open-source IaC tool by HashiCorp. Provisions &lt;br&gt;
infrastructure using declarative HCL configuration.&lt;br&gt;
Supports 1000+ providers (AWS, Azure, GCP, K8s).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What is terraform init?&lt;/strong&gt;&lt;br&gt;
Downloads provider plugins, initializes backend,&lt;br&gt;
creates .terraform directory. Run first and after&lt;br&gt;
any provider changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Difference between terraform plan and apply?&lt;/strong&gt;&lt;br&gt;
plan: shows what will change WITHOUT making changes.&lt;br&gt;
apply: executes the plan after confirmation.&lt;br&gt;
Always review plan before apply in production!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What is Terraform state?&lt;/strong&gt;&lt;br&gt;
terraform.tfstate maps HCL config to real resource IDs.&lt;br&gt;
Source of truth for what Terraform manages.&lt;br&gt;
Store remotely (S3 + DynamoDB) in teams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What are Terraform providers?&lt;/strong&gt;&lt;br&gt;
Plugins that interface with cloud APIs.&lt;br&gt;
Examples: hashicorp/aws, hashicorp/azurerm,&lt;br&gt;
hashicorp/kubernetes. Declared in required_providers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intermediate Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: count vs for_each — which to prefer?&lt;/strong&gt;&lt;br&gt;
for_each: creates resources with stable string keys.&lt;br&gt;
Removing one key only destroys that resource.&lt;br&gt;
count: indexed numerically, removing middle item&lt;br&gt;
causes destroy+recreate cascade.&lt;br&gt;
Always prefer for_each!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How do you handle secrets in Terraform?&lt;/strong&gt;&lt;br&gt;
Never hardcode in .tf files (goes into state!).&lt;br&gt;
Use: environment variables (TF_VAR_password),&lt;br&gt;
AWS Secrets Manager data source,&lt;br&gt;
HashiCorp Vault provider,&lt;br&gt;
OIDC for passwordless cloud auth in CI/CD.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What is remote state and why use it?&lt;/strong&gt;&lt;br&gt;
Stores tfstate in S3/Terraform Cloud instead of locally.&lt;br&gt;
Benefits: team sharing, DynamoDB locking prevents&lt;br&gt;
concurrent applies, versioned, encrypted, backed up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What are Terraform modules?&lt;/strong&gt;&lt;br&gt;
Reusable collection of resources with defined inputs&lt;br&gt;
and outputs. Call with module block, access outputs&lt;br&gt;
via module.name.output_name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How do you import existing resources?&lt;/strong&gt;&lt;br&gt;
terraform import resource_type.name resource_id&lt;br&gt;
Brings manually created resources under Terraform&lt;br&gt;
management without recreating them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advanced Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: How do you implement Terraform in CI/CD?&lt;/strong&gt;&lt;br&gt;
PR: terraform fmt --check, validate, plan (post as comment)&lt;br&gt;
Merge: terraform apply saved plan&lt;br&gt;
Use OIDC for authentication — no stored AWS keys!&lt;br&gt;
Tools: Atlantis, Terraform Cloud, GitHub Actions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What is infrastructure drift?&lt;/strong&gt;&lt;br&gt;
Real infrastructure deviates from Terraform state&lt;br&gt;
due to manual console changes.&lt;br&gt;
Detection: terraform plan shows drift.&lt;br&gt;
Prevention: no manual changes, scheduled plan in CI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How do you rollback in Terraform?&lt;/strong&gt;&lt;br&gt;
No native rollback command. Options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Git revert .tf files, run apply&lt;/li&gt;
&lt;li&gt;Restore previous state from S3 versioning&lt;/li&gt;
&lt;li&gt;terraform destroy -target specific resource&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Q: What is Terraform Sentinel?&lt;/strong&gt;&lt;br&gt;
Policy-as-code framework in TF Cloud/Enterprise.&lt;br&gt;
Enforces compliance before apply runs.&lt;br&gt;
Use cases: require tags, cost limits, security rules.&lt;/p&gt;

&lt;p&gt;...and 26 more questions with answers 👇&lt;/p&gt;

&lt;p&gt;🔗 Full Q&amp;amp;A + PDF Download: &lt;br&gt;
&lt;a href="https://devopsrise.vercel.app/qa" rel="noopener noreferrer"&gt;devopsrise.vercel.app/qa&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;terraform init&lt;/td&gt;
&lt;td&gt;Initialize providers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;terraform plan&lt;/td&gt;
&lt;td&gt;Preview changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;terraform apply&lt;/td&gt;
&lt;td&gt;Apply changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;terraform destroy&lt;/td&gt;
&lt;td&gt;Destroy resources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;terraform state list&lt;/td&gt;
&lt;td&gt;List resources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;terraform import&lt;/td&gt;
&lt;td&gt;Import existing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;terraform fmt&lt;/td&gt;
&lt;td&gt;Format code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;terraform validate&lt;/td&gt;
&lt;td&gt;Validate config&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  devops #terraform #aws #iac
&lt;/h1&gt;

</description>
      <category>terraform</category>
      <category>devops</category>
      <category>aws</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Become a DevOps Engineer in 2026 — Complete Roadmap for Beginners</title>
      <dc:creator>DevOps Rise</dc:creator>
      <pubDate>Fri, 10 Jul 2026 08:54:17 +0000</pubDate>
      <link>https://dev.to/devopsrise_0607/how-to-become-a-devops-engineer-in-2026-complete-roadmap-for-beginners-1f4d</link>
      <guid>https://dev.to/devopsrise_0607/how-to-become-a-devops-engineer-in-2026-complete-roadmap-for-beginners-1f4d</guid>
      <description>&lt;h1&gt;
  
  
  How to Become a DevOps Engineer in 2026
&lt;/h1&gt;

&lt;p&gt;Many people ask me — where do I start with DevOps?&lt;br&gt;
Here's the exact structured path.&lt;/p&gt;

&lt;p&gt;I built a free platform with everything you need:&lt;br&gt;
🔗 &lt;a href="https://devopsrise.vercel.app" rel="noopener noreferrer"&gt;devopsrise.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 1 — Linux Fundamentals (2 weeks)
&lt;/h2&gt;

&lt;p&gt;Foundation of everything in DevOps.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File system, permissions, processes&lt;/li&gt;
&lt;li&gt;Bash scripting basics&lt;/li&gt;
&lt;li&gt;SSH, networking commands&lt;/li&gt;
&lt;li&gt;systemd, cron jobs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key commands to master:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ls -la&lt;/code&gt;, &lt;code&gt;chmod&lt;/code&gt;, &lt;code&gt;chown&lt;/code&gt;, &lt;code&gt;find&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ps aux&lt;/code&gt;, &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;kill&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;awk&lt;/code&gt;, &lt;code&gt;sed&lt;/code&gt;, &lt;code&gt;tail -f&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Phase 2 — Git &amp;amp; Version Control (1 week)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Branching, merging, rebasing&lt;/li&gt;
&lt;li&gt;GitHub workflow, Pull Requests&lt;/li&gt;
&lt;li&gt;Git hooks, conventional commits&lt;/li&gt;
&lt;li&gt;Trunk-based development&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Phase 3 — Cloud/AWS (3 weeks)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;EC2, S3, IAM, VPC&lt;/li&gt;
&lt;li&gt;RDS, Lambda, CloudWatch&lt;/li&gt;
&lt;li&gt;Auto Scaling, Load Balancer&lt;/li&gt;
&lt;li&gt;AWS CLI automation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Phase 4 — Docker (2 weeks)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Dockerfile, docker-compose&lt;/li&gt;
&lt;li&gt;Networking, volumes&lt;/li&gt;
&lt;li&gt;Multi-stage builds&lt;/li&gt;
&lt;li&gt;Security best practices&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Phase 5 — Kubernetes (3 weeks)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Pods, Deployments, Services&lt;/li&gt;
&lt;li&gt;HPA, RBAC, Helm&lt;/li&gt;
&lt;li&gt;Production best practices&lt;/li&gt;
&lt;li&gt;Debugging CrashLoopBackOff&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Phase 6 — CI/CD (2 weeks)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions pipelines&lt;/li&gt;
&lt;li&gt;Jenkins Declarative Pipeline&lt;/li&gt;
&lt;li&gt;Build → Test → Deploy automation&lt;/li&gt;
&lt;li&gt;ArgoCD for GitOps&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Phase 7 — Terraform (2 weeks)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Provision AWS infrastructure as code&lt;/li&gt;
&lt;li&gt;State management, modules&lt;/li&gt;
&lt;li&gt;CI/CD for Terraform&lt;/li&gt;
&lt;li&gt;Security scanning with tfsec&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Phase 8 — Monitoring (2 weeks)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Prometheus + Grafana setup&lt;/li&gt;
&lt;li&gt;AlertManager, Loki for logs&lt;/li&gt;
&lt;li&gt;SLOs and error budgets&lt;/li&gt;
&lt;li&gt;Kubernetes monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Total Timeline
&lt;/h2&gt;

&lt;p&gt;~4 months with 2-3 hours daily practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free Resources
&lt;/h2&gt;

&lt;p&gt;I created a complete FREE platform with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ 535+ Real Interview Questions (all 8 topics)&lt;/li&gt;
&lt;li&gt;✅ 122-Day day-by-day learning plan PDF&lt;/li&gt;
&lt;li&gt;✅ Commands Cheatsheet (click to copy)&lt;/li&gt;
&lt;li&gt;✅ Mock Interview Mode with timer&lt;/li&gt;
&lt;li&gt;✅ Free PDF downloads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://devopsrise.vercel.app" rel="noopener noreferrer"&gt;devopsrise.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No login. No payment. Just learn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips for Faster Learning
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Build projects after each phase&lt;/li&gt;
&lt;li&gt;Push everything to GitHub&lt;/li&gt;
&lt;li&gt;Write about what you learn (like this!)&lt;/li&gt;
&lt;li&gt;Join DevOps communities on Reddit and Discord&lt;/li&gt;
&lt;li&gt;Apply for jobs after Phase 5-6, not after Phase 8&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Drop a comment — which phase are you currently on?&lt;/p&gt;

&lt;h1&gt;
  
  
  devops #beginners #career #cloud
&lt;/h1&gt;

</description>
      <category>beginners</category>
      <category>docker</category>
      <category>devops</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>Complete Kubernetes Interview Q&amp;A — Beginner to Advanced (20260</title>
      <dc:creator>DevOps Rise</dc:creator>
      <pubDate>Fri, 10 Jul 2026 08:51:26 +0000</pubDate>
      <link>https://dev.to/devopsrise_0607/complete-kubernetes-interview-qa-beginner-to-advanced-20260-log</link>
      <guid>https://dev.to/devopsrise_0607/complete-kubernetes-interview-qa-beginner-to-advanced-20260-log</guid>
      <description>&lt;h1&gt;
  
  
  Complete Kubernetes Interview Q&amp;amp;A
&lt;/h1&gt;

&lt;p&gt;K8s is asked in every senior DevOps interview. &lt;br&gt;
Here are the most important questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beginner
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: What is Kubernetes?&lt;/strong&gt;&lt;br&gt;
Container orchestration platform. Handles: auto-scaling,&lt;br&gt;
self-healing, load balancing, rolling updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What is a Pod?&lt;/strong&gt;&lt;br&gt;
Smallest deployable unit. Wraps one or more containers&lt;br&gt;
sharing same network namespace and storage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Deployment vs Service?&lt;/strong&gt;&lt;br&gt;
Deployment: manages pod replicas, rolling updates&lt;br&gt;
Service: stable network endpoint, load balancing&lt;/p&gt;

&lt;h2&gt;
  
  
  Intermediate
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: How does HPA work?&lt;/strong&gt;&lt;br&gt;
Horizontal Pod Autoscaler scales replicas based on&lt;br&gt;
CPU/memory metrics every 15 seconds automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: CrashLoopBackOff — how to debug?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;kubectl describe pod — check Events&lt;/li&gt;
&lt;li&gt;kubectl logs pod --previous&lt;/li&gt;
&lt;li&gt;Check resource limits, image name, env vars&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Advanced
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: How do namespaces + cgroups enable containers?&lt;/strong&gt;&lt;br&gt;
Namespaces: isolation (pid, net, mnt, user)&lt;br&gt;
cgroups: resource limits (CPU, memory, I/O)&lt;/p&gt;

&lt;p&gt;...100+ more questions 👇&lt;/p&gt;

&lt;p&gt;🔗 devopsrise.vercel.app/qa&lt;/p&gt;

&lt;h1&gt;
  
  
  Kubernetes #DevOps #Docker #CloudNative
&lt;/h1&gt;

</description>
      <category>opensource</category>
      <category>devops</category>
      <category>automation</category>
      <category>career</category>
    </item>
    <item>
      <title>Top 40 Docker Interview Questions with Answers (2026)</title>
      <dc:creator>DevOps Rise</dc:creator>
      <pubDate>Fri, 10 Jul 2026 07:11:41 +0000</pubDate>
      <link>https://dev.to/devopsrise_0607/top-40-docker-interview-questions-with-answers-2026-1h0</link>
      <guid>https://dev.to/devopsrise_0607/top-40-docker-interview-questions-with-answers-2026-1h0</guid>
      <description>&lt;h1&gt;
  
  
  Top 40 Docker Interview Questions
&lt;/h1&gt;

&lt;p&gt;Preparing for a DevOps interview? Docker questions &lt;br&gt;
are asked in almost every interview.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beginner Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: What is Docker?&lt;/strong&gt;&lt;br&gt;
Docker is a containerization platform that packages &lt;br&gt;
applications with dependencies into portable containers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Difference between image and container?&lt;/strong&gt;&lt;br&gt;
Image: read-only blueprint (like a class)&lt;br&gt;
Container: running instance of image (like an object)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What is Dockerfile?&lt;/strong&gt;&lt;br&gt;
Text file with instructions to build a Docker image.&lt;br&gt;
FROM, WORKDIR, COPY, RUN, CMD, EXPOSE&lt;/p&gt;

&lt;h2&gt;
  
  
  Intermediate Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: What is multi-stage build?&lt;/strong&gt;&lt;br&gt;
Uses multiple FROM statements. Build in full image,&lt;br&gt;
copy only artifacts to minimal runtime image.&lt;br&gt;
Result: 1.2GB → 80MB production image!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: CMD vs ENTRYPOINT?&lt;/strong&gt;&lt;br&gt;
ENTRYPOINT: always runs, not easily overridden&lt;br&gt;
CMD: default args, easily overridden at runtime&lt;/p&gt;

&lt;h2&gt;
  
  
  Advanced Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: How do namespaces enable containers?&lt;/strong&gt;&lt;br&gt;
pid, net, mnt, uts, ipc, user namespaces&lt;br&gt;
provide isolation at OS level without VM overhead.&lt;/p&gt;

&lt;p&gt;...and 35 more questions with answers 👇&lt;/p&gt;

&lt;p&gt;🔗 Full Q&amp;amp;A + PDF: devopsrise.vercel.app/qa&lt;/p&gt;

&lt;h1&gt;
  
  
  Docker #DevOps #Kubernetes #InterviewPrep
&lt;/h1&gt;

</description>
      <category>kubernetes</category>
      <category>docker</category>
      <category>devops</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Top 50 Linux Commands Every DevOps Engineer Must Know (2026)</title>
      <dc:creator>DevOps Rise</dc:creator>
      <pubDate>Fri, 10 Jul 2026 07:10:59 +0000</pubDate>
      <link>https://dev.to/devopsrise_0607/top-50-linux-commands-every-devops-engineer-must-know-2026-18lp</link>
      <guid>https://dev.to/devopsrise_0607/top-50-linux-commands-every-devops-engineer-must-know-2026-18lp</guid>
      <description>&lt;h1&gt;
  
  
  Top 50 Linux Commands Every DevOps Engineer Must Know
&lt;/h1&gt;

&lt;p&gt;Working as a DevOps engineer means living in the terminal. &lt;br&gt;
Here are the most important Linux commands you must know.&lt;/p&gt;

&lt;h2&gt;
  
  
  File Operations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ls -la&lt;/code&gt; — List all files with details&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;find / -name "*.log"&lt;/code&gt; — Find files by name&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chmod 755 script.sh&lt;/code&gt; — Set permissions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chown user:group file&lt;/code&gt; — Change ownership&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Process Management
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ps aux&lt;/code&gt; — List all processes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;top&lt;/code&gt; — Live process monitor&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;kill -9 PID&lt;/code&gt; — Force kill process&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;nohup command &amp;amp;&lt;/code&gt; — Run after logout&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Networking
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ss -tulnp&lt;/code&gt; — Show listening ports&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;curl -v https://api.example.com&lt;/code&gt; — HTTP request&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ssh -i key.pem user@host&lt;/code&gt; — SSH with key&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;scp file.txt user@host:/path&lt;/code&gt; — Secure copy&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Log Monitoring
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;tail -f /var/log/syslog&lt;/code&gt; — Follow logs live&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;grep -r "error" /var/log/&lt;/code&gt; — Search in logs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;journalctl -u nginx -f&lt;/code&gt; — Service logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...and 35 more at 👇&lt;/p&gt;

&lt;p&gt;🔗 Full Cheatsheet + PDF Download:&lt;br&gt;
devopsrise.vercel.app/cheatsheet&lt;/p&gt;

&lt;h1&gt;
  
  
  DevOps #Linux #SysAdmin #CloudComputing
&lt;/h1&gt;

</description>
      <category>devops</category>
      <category>linux</category>
      <category>career</category>
      <category>beginners</category>
    </item>
    <item>
      <title>535+ Free DevOps Interview Questions — Complete Topic-wise Q&amp;A with Roadmap &amp; Cheatsheets</title>
      <dc:creator>DevOps Rise</dc:creator>
      <pubDate>Fri, 10 Jul 2026 07:06:01 +0000</pubDate>
      <link>https://dev.to/devopsrise_0607/535-free-devops-interview-questions-complete-topic-wise-qa-with-roadmap-cheatsheets-1olg</link>
      <guid>https://dev.to/devopsrise_0607/535-free-devops-interview-questions-complete-topic-wise-qa-with-roadmap-cheatsheets-1olg</guid>
      <description>&lt;h1&gt;
  
  
  535+ Free DevOps Interview Questions
&lt;/h1&gt;

&lt;p&gt;If you're preparing for a DevOps interview, I built &lt;br&gt;
a completely free platform called &lt;strong&gt;DevOps Rise&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://devopsrise.vercel.app" rel="noopener noreferrer"&gt;devopsrise.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's inside:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🎯 535+ Interview Questions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Linux &amp;amp; System Admin&lt;/li&gt;
&lt;li&gt;Docker &amp;amp; Kubernetes
&lt;/li&gt;
&lt;li&gt;AWS, Azure &amp;amp; GCP&lt;/li&gt;
&lt;li&gt;CI/CD (Jenkins &amp;amp; GitHub Actions)&lt;/li&gt;
&lt;li&gt;Terraform &amp;amp; Ansible&lt;/li&gt;
&lt;li&gt;Prometheus &amp;amp; ELK Stack&lt;/li&gt;
&lt;li&gt;Git &amp;amp; Version Control&lt;/li&gt;
&lt;li&gt;Security &amp;amp; Networking&lt;/li&gt;
&lt;li&gt;Scripting &amp;amp; Automation&lt;/li&gt;
&lt;li&gt;Mock Interview Scenarios&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All questions have &lt;strong&gt;Beginner / Intermediate / &lt;br&gt;
Advanced&lt;/strong&gt; levels with detailed answers.&lt;/p&gt;

&lt;h3&gt;
  
  
  🗺️ 122-Day Learning Roadmap
&lt;/h3&gt;

&lt;p&gt;Day-by-day breakdown — exactly what to study each day.&lt;br&gt;
Download as PDF.&lt;/p&gt;

&lt;h3&gt;
  
  
  📋 Commands Cheatsheet
&lt;/h3&gt;

&lt;p&gt;Linux, Docker, kubectl, Git, Terraform, AWS CLI&lt;br&gt;
— click to copy, PDF download available.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⏱️ Mock Interview Mode
&lt;/h3&gt;

&lt;p&gt;10 random questions with 2-minute timer per question.&lt;br&gt;
Track progress, bookmark important questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  📄 Free PDF Downloads
&lt;/h3&gt;

&lt;p&gt;Every topic has downloadable PDF with DevOps Rise &lt;br&gt;
watermark.&lt;/p&gt;

&lt;h2&gt;
  
  
  100% Free — No Login Required
&lt;/h2&gt;

&lt;p&gt;Check it out: devopsrise.vercel.app&lt;/p&gt;

&lt;p&gt;Would love feedback from the DevOps community!&lt;/p&gt;

</description>
      <category>career</category>
      <category>devops</category>
      <category>interview</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
