<?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: prash 1</title>
    <description>The latest articles on DEV Community by prash 1 (@prash_1_9a3a6266c93cd7276).</description>
    <link>https://dev.to/prash_1_9a3a6266c93cd7276</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%2F4040654%2Fdb1ef823-ea25-4699-8302-75b52ac1669c.jpeg</url>
      <title>DEV Community: prash 1</title>
      <link>https://dev.to/prash_1_9a3a6266c93cd7276</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prash_1_9a3a6266c93cd7276"/>
    <language>en</language>
    <item>
      <title># My First Docker Container: Installation and Essential Commands</title>
      <dc:creator>prash 1</dc:creator>
      <pubDate>Fri, 07 Aug 2026 08:20:46 +0000</pubDate>
      <link>https://dev.to/prash_1_9a3a6266c93cd7276/-my-first-docker-container-installation-and-essential-commands-43ol</link>
      <guid>https://dev.to/prash_1_9a3a6266c93cd7276/-my-first-docker-container-installation-and-essential-commands-43ol</guid>
      <description>&lt;h1&gt;
  
  
  My First Docker Container: Installation and Essential Commands
&lt;/h1&gt;

&lt;p&gt;In the previous article, we learned what Docker is and why it became one of the most important tools in modern software development and DevOps.&lt;/p&gt;

&lt;p&gt;Now it’s time to do something practical.&lt;/p&gt;

&lt;p&gt;In this article, we will install Docker and run our &lt;strong&gt;first Docker container&lt;/strong&gt;. By the end, you will understand the most important Docker commands that every beginner should know.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Docker
&lt;/h2&gt;

&lt;p&gt;Docker is available for &lt;strong&gt;Windows, macOS, and Linux&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;

&lt;p&gt;Download &lt;strong&gt;Docker Desktop&lt;/strong&gt; from the official Docker website and complete the installation.&lt;/p&gt;

&lt;p&gt;After installation, open &lt;strong&gt;Docker Desktop&lt;/strong&gt; and wait until Docker starts successfully.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linux (Ubuntu)
&lt;/h3&gt;

&lt;p&gt;Update the package list:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;docker.io &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the Docker service:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Enable Docker to start automatically after reboot:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Check whether Docker is installed correctly:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;You should see an output similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Docker version 28.x.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Running your first Docker command
&lt;/h2&gt;

&lt;p&gt;The easiest way to test Docker is:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This command downloads a small image called &lt;strong&gt;hello-world&lt;/strong&gt; and runs it.&lt;/p&gt;

&lt;p&gt;You should see a welcome message confirming that Docker is working correctly.&lt;/p&gt;

&lt;p&gt;Congratulations! You have just run your first Docker container.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding what happened
&lt;/h2&gt;

&lt;p&gt;The command:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;actually performs several steps automatically.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Docker looks for the &lt;strong&gt;hello-world image&lt;/strong&gt; locally.&lt;/li&gt;
&lt;li&gt;If it is not available, Docker downloads it from &lt;strong&gt;Docker Hub&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Docker creates a container from that image.&lt;/li&gt;
&lt;li&gt;Docker starts the container.&lt;/li&gt;
&lt;li&gt;The container prints a message and exits.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This single command demonstrates the basic Docker workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker images
&lt;/h2&gt;

&lt;p&gt;A Docker image is a template used to create containers.&lt;/p&gt;

&lt;p&gt;To see downloaded images:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker images
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    abc123xyz      2 weeks ago   13KB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The most important columns are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repository&lt;/strong&gt; – image name&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tag&lt;/strong&gt; – version&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image ID&lt;/strong&gt; – unique identifier&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Size&lt;/strong&gt; – image size&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Downloading an image manually
&lt;/h2&gt;

&lt;p&gt;Instead of running a container immediately, you can download an image first.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This downloads the &lt;strong&gt;Nginx web server image&lt;/strong&gt;.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker images
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should now see the Nginx image.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running a container
&lt;/h2&gt;

&lt;p&gt;To create and start a container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docker starts the Nginx web server.&lt;/p&gt;

&lt;p&gt;However, the terminal becomes occupied because the container is running in the foreground.&lt;/p&gt;

&lt;p&gt;Stop it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ctrl + C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Running a container in the background
&lt;/h2&gt;

&lt;p&gt;Use the &lt;strong&gt;-d&lt;/strong&gt; option (detached mode):&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Docker returns a long container ID.&lt;/p&gt;

&lt;p&gt;The container continues running in the background.&lt;/p&gt;

&lt;h2&gt;
  
  
  Viewing running containers
&lt;/h2&gt;

&lt;p&gt;To see active containers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CONTAINER ID   IMAGE   STATUS
a12b34c56d78   nginx   Up 2 minutes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Useful columns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Container ID&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Image&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Viewing all containers
&lt;/h2&gt;

&lt;p&gt;Even stopped containers are stored on your system.&lt;/p&gt;

&lt;p&gt;To see them:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;running containers&lt;/li&gt;
&lt;li&gt;stopped containers&lt;/li&gt;
&lt;li&gt;exited containers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stopping a container
&lt;/h2&gt;

&lt;p&gt;First, find the container ID:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then stop it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker stop container_id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker stop a12b34c56d78
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docker stops the running container.&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting a stopped container
&lt;/h2&gt;

&lt;p&gt;To start it again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker start container_id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker start a12b34c56d78
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The container resumes execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Removing a container
&lt;/h2&gt;

&lt;p&gt;A stopped container can be deleted.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

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

&lt;/div&gt;



&lt;p&gt;If the container is running, stop it first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Removing an image
&lt;/h2&gt;

&lt;p&gt;To delete an image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker rmi nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a container is using the image, Docker will prevent removal.&lt;/p&gt;

&lt;p&gt;Delete the container first, then remove the image.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running Ubuntu interactively
&lt;/h2&gt;

&lt;p&gt;One of the most useful beginner commands is:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;The options mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;-i&lt;/strong&gt; = interactive&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-t&lt;/strong&gt; = terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You enter a shell inside the Ubuntu container.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls
pwd
echo &lt;/span&gt;Hello Docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To exit:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;The container stops after exiting the shell.&lt;/p&gt;

&lt;h2&gt;
  
  
  Giving a container a name
&lt;/h2&gt;

&lt;p&gt;Instead of using random IDs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; mynginx nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the container has the name &lt;strong&gt;mynginx&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Stop it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker stop mynginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker start mynginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remove it:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Names are much easier to remember than container IDs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checking container logs
&lt;/h2&gt;

&lt;p&gt;To view application logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker logs mynginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is extremely useful for debugging.&lt;/p&gt;

&lt;p&gt;For continuous log monitoring:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker logs &lt;span class="nt"&gt;-f&lt;/span&gt; mynginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Press &lt;strong&gt;Ctrl + C&lt;/strong&gt; to stop following the logs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Executing commands inside a running container
&lt;/h2&gt;

&lt;p&gt;Suppose Nginx is running.&lt;/p&gt;

&lt;p&gt;Open a shell inside it:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Some images use &lt;strong&gt;sh&lt;/strong&gt; instead of &lt;strong&gt;bash&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;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; mynginx sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you are working inside the running container.&lt;/p&gt;

&lt;p&gt;Exit with:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  The five commands you should memorize
&lt;/h2&gt;

&lt;p&gt;If you are completely new to Docker, focus on these commands first.&lt;/p&gt;

&lt;p&gt;Download an image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run a container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; mynginx nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;View containers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stop a container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker stop mynginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remove a container:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;These commands cover most beginner Docker tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quick practice exercise
&lt;/h2&gt;

&lt;p&gt;Try this sequence yourself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull nginx
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; web nginx
docker ps
docker logs web
docker stop web
docker start web
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; web bash
&lt;span class="nb"&gt;exit
&lt;/span&gt;docker stop web
docker &lt;span class="nb"&gt;rm &lt;/span&gt;web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running these commands once is far better than reading them ten times.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next?
&lt;/h2&gt;

&lt;p&gt;In the next article, we will learn &lt;strong&gt;Docker architecture in detail&lt;/strong&gt;. We will understand images, containers, Docker Hub, and the Docker engine, and see what happens behind the scenes when you run a Docker command.&lt;/p&gt;

&lt;p&gt;The more you practice these basic commands, the easier Docker will become.&lt;/p&gt;

&lt;p&gt;Happy learning!&lt;/p&gt;

</description>
      <category>docker</category>
    </item>
    <item>
      <title># Docker for Absolute Beginners: What It Is and Why It Matters</title>
      <dc:creator>prash 1</dc:creator>
      <pubDate>Fri, 07 Aug 2026 08:18:54 +0000</pubDate>
      <link>https://dev.to/prash_1_9a3a6266c93cd7276/-docker-for-absolute-beginners-what-it-is-and-why-it-matters-54ac</link>
      <guid>https://dev.to/prash_1_9a3a6266c93cd7276/-docker-for-absolute-beginners-what-it-is-and-why-it-matters-54ac</guid>
      <description>&lt;h1&gt;
  
  
  Docker for Absolute Beginners: What It Is and Why It Matters
&lt;/h1&gt;

&lt;p&gt;If you are starting your DevOps or cloud journey, Docker is one of the most important tools you will learn. I remember being confused when people said, “It works on my machine.” Docker was created to solve exactly that problem.&lt;/p&gt;

&lt;p&gt;In this article, I will explain Docker in the simplest possible way. No complicated definitions, no advanced commands. Just the core concept that every beginner should understand.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem before Docker
&lt;/h2&gt;

&lt;p&gt;Imagine two developers working on the same project.&lt;/p&gt;

&lt;p&gt;Developer A builds the application on their laptop, and everything works perfectly.&lt;/p&gt;

&lt;p&gt;Developer B copies the project and tries to run it, but gets errors.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because their environments are different.&lt;/p&gt;

&lt;p&gt;Maybe one has Python 3.12 while the other has Python 3.10.&lt;/p&gt;

&lt;p&gt;Maybe one has MySQL installed and the other doesn’t.&lt;/p&gt;

&lt;p&gt;Maybe some library versions are different.&lt;/p&gt;

&lt;p&gt;These differences create deployment problems.&lt;/p&gt;

&lt;p&gt;Docker solves this by packaging the application together with everything it needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Docker?
&lt;/h2&gt;

&lt;p&gt;Docker is a platform that allows you to package an application and all its dependencies into a container.&lt;/p&gt;

&lt;p&gt;Think of a container as a lightweight box that contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your application&lt;/li&gt;
&lt;li&gt;required libraries&lt;/li&gt;
&lt;li&gt;runtime environment&lt;/li&gt;
&lt;li&gt;configuration&lt;/li&gt;
&lt;li&gt;dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because everything is inside the container, the application behaves the same on any system that has Docker installed.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple real-life example
&lt;/h2&gt;

&lt;p&gt;Imagine you are moving a fully furnished room.&lt;/p&gt;

&lt;p&gt;Instead of carrying the bed, table, chair, and wardrobe separately, you place everything inside a shipping container.&lt;/p&gt;

&lt;p&gt;That container can be transported anywhere.&lt;/p&gt;

&lt;p&gt;Docker containers work in a similar way.&lt;/p&gt;

&lt;p&gt;Your application is packed inside a container and can run on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your laptop&lt;/li&gt;
&lt;li&gt;your friend’s computer&lt;/li&gt;
&lt;li&gt;a company server&lt;/li&gt;
&lt;li&gt;AWS&lt;/li&gt;
&lt;li&gt;Azure&lt;/li&gt;
&lt;li&gt;Google Cloud&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;without changing the application itself.&lt;/p&gt;

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

&lt;p&gt;A container is a running instance of a Docker image.&lt;/p&gt;

&lt;p&gt;An image is a blueprint.&lt;/p&gt;

&lt;p&gt;A container is the actual running application.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Ubuntu image&lt;/li&gt;
&lt;li&gt;Python image&lt;/li&gt;
&lt;li&gt;Nginx image&lt;/li&gt;
&lt;li&gt;MySQL image&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you start an image, Docker creates a container from it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker image vs Docker container
&lt;/h2&gt;

&lt;p&gt;This is the most important beginner concept.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker image
&lt;/h3&gt;

&lt;p&gt;A Docker image is a template.&lt;/p&gt;

&lt;p&gt;It contains the application and everything needed to run it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker container
&lt;/h3&gt;

&lt;p&gt;A container is a running copy of an image.&lt;/p&gt;

&lt;p&gt;You can create multiple containers from the same image.&lt;/p&gt;

&lt;p&gt;For example, one Nginx image can create three Nginx containers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Docker became so popular
&lt;/h2&gt;

&lt;p&gt;Docker became popular because it solves several real-world problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Consistency
&lt;/h3&gt;

&lt;p&gt;The application works the same everywhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  Isolation
&lt;/h3&gt;

&lt;p&gt;Each container has its own environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fast deployment
&lt;/h3&gt;

&lt;p&gt;Containers start much faster than virtual machines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Easy scaling
&lt;/h3&gt;

&lt;p&gt;You can create multiple containers quickly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Better resource usage
&lt;/h3&gt;

&lt;p&gt;Containers use fewer system resources.&lt;/p&gt;

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

&lt;p&gt;Before Docker, virtualization was commonly used.&lt;/p&gt;

&lt;h3&gt;
  
  
  Virtual machine
&lt;/h3&gt;

&lt;p&gt;A virtual machine contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;guest operating system&lt;/li&gt;
&lt;li&gt;libraries&lt;/li&gt;
&lt;li&gt;application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each VM requires a full operating system.&lt;/p&gt;

&lt;p&gt;This makes VMs relatively heavy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker container
&lt;/h3&gt;

&lt;p&gt;Containers share the host operating system kernel.&lt;/p&gt;

&lt;p&gt;They only package the application and its dependencies.&lt;/p&gt;

&lt;p&gt;This makes containers lightweight and fast.&lt;/p&gt;

&lt;p&gt;A simple comparison:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Virtual Machine&lt;/th&gt;
&lt;th&gt;Docker Container&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Includes full OS&lt;/td&gt;
&lt;td&gt;Shares host OS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Heavy&lt;/td&gt;
&lt;td&gt;Lightweight&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slower startup&lt;/td&gt;
&lt;td&gt;Fast startup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;More memory&lt;/td&gt;
&lt;td&gt;Less memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Large disk usage&lt;/td&gt;
&lt;td&gt;Small disk usage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How Docker works
&lt;/h2&gt;

&lt;p&gt;Docker has three main components.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker client
&lt;/h3&gt;

&lt;p&gt;The commands you type.&lt;/p&gt;

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

&lt;p&gt;docker run nginx&lt;/p&gt;

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

&lt;p&gt;The background service that creates and manages containers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker registry
&lt;/h3&gt;

&lt;p&gt;A place where images are stored.&lt;/p&gt;

&lt;p&gt;The default public registry is Docker Hub.&lt;/p&gt;

&lt;p&gt;When you run:&lt;/p&gt;

&lt;p&gt;docker pull nginx&lt;/p&gt;

&lt;p&gt;Docker downloads the Nginx image from Docker Hub.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Docker workflow
&lt;/h2&gt;

&lt;p&gt;A beginner-friendly workflow looks like this.&lt;/p&gt;

&lt;p&gt;Step 1: Write application&lt;/p&gt;

&lt;p&gt;Create your application.&lt;/p&gt;

&lt;p&gt;Step 2: Create Dockerfile&lt;/p&gt;

&lt;p&gt;Describe how the application should be packaged.&lt;/p&gt;

&lt;p&gt;Step 3: Build image&lt;/p&gt;

&lt;p&gt;Docker creates an image.&lt;/p&gt;

&lt;p&gt;Step 4: Run container&lt;/p&gt;

&lt;p&gt;Docker starts the application inside a container.&lt;/p&gt;

&lt;p&gt;The flow is:&lt;/p&gt;

&lt;p&gt;Application → Dockerfile → Image → Container&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical example
&lt;/h2&gt;

&lt;p&gt;Suppose you have a small Python application.&lt;/p&gt;

&lt;p&gt;Without Docker:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;install Python&lt;/li&gt;
&lt;li&gt;install pip&lt;/li&gt;
&lt;li&gt;install dependencies&lt;/li&gt;
&lt;li&gt;configure environment&lt;/li&gt;
&lt;li&gt;run application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Docker:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;build image&lt;/li&gt;
&lt;li&gt;run container&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;p&gt;This is why Docker is heavily used in DevOps and cloud engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Docker is used
&lt;/h2&gt;

&lt;p&gt;Docker is used almost everywhere.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web applications&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Microservices&lt;/li&gt;
&lt;li&gt;CI/CD pipelines&lt;/li&gt;
&lt;li&gt;Cloud deployments&lt;/li&gt;
&lt;li&gt;Testing environments&lt;/li&gt;
&lt;li&gt;Machine learning applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Companies like Netflix, Spotify, Uber, and many startups use container-based deployments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common beginner misconceptions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Docker is a virtual machine
&lt;/h3&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;Docker uses containers, not traditional virtual machines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker replaces Linux
&lt;/h3&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;Docker runs on Linux and also works on Windows and macOS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker is only for DevOps
&lt;/h3&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;Developers, testers, data engineers, and ML engineers also use Docker.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one concept you must remember
&lt;/h2&gt;

&lt;p&gt;If you remember only one sentence from this article, remember this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Docker image is a blueprint, and a Docker container is a running application created from that blueprint.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Everything else becomes much easier after understanding this idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next?
&lt;/h2&gt;

&lt;p&gt;In the next article, we will install Docker and create our first container. We will learn the basic commands that every Docker user should know.&lt;/p&gt;

&lt;p&gt;If you’re beginning your DevOps journey, Docker is one of the best investments you can make. Spend time understanding the fundamentals, and the advanced topics will become much easier later.&lt;/p&gt;

&lt;p&gt;Happy learning!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>cloud</category>
    </item>
    <item>
      <title>DOCKER</title>
      <dc:creator>prash 1</dc:creator>
      <pubDate>Fri, 24 Jul 2026 08:54:42 +0000</pubDate>
      <link>https://dev.to/prash_1_9a3a6266c93cd7276/docker-50if</link>
      <guid>https://dev.to/prash_1_9a3a6266c93cd7276/docker-50if</guid>
      <description>&lt;p&gt;Here's a follow-up post continuing the series — same voice, picking up where the Linux post left off:&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Docker Made Sense the Day I Stopped Treating It Like Magic&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After my last post on falling in love with Linux, a few people asked the obvious next question: "okay, but when do I actually get to Docker?"&lt;/p&gt;

&lt;p&gt;Here's the honest answer — I jumped into Docker way too early the first time, before Linux made sense, and it felt like memorizing spells. &lt;code&gt;docker run&lt;/code&gt;. &lt;code&gt;docker build&lt;/code&gt;. &lt;code&gt;docker-compose up&lt;/code&gt;. Things worked when I copy-pasted commands, and broke in ways I couldn't explain when I didn't. It wasn't until I understood Linux processes, filesystems, and networking that Docker stopped being magic and started being obvious.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker Isn't a New Thing. It's a Trick on Top of Old Things.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This was the single biggest unlock for me: Docker isn't some separate virtual computer running inside your computer. A container is just a regular Linux process, with some clever isolation layered on top — its own view of the filesystem, its own network namespace, its own process tree. That's it.&lt;/p&gt;

&lt;p&gt;Once I understood that, questions that used to confuse me stopped being mysterious:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Why does my container see a different filesystem?" — because of Linux namespaces, not because Docker built a tiny VM.&lt;/li&gt;
&lt;li&gt;"Why did my container die immediately after starting?" — because the one process it was running exited, and containers live and die with their main process, just like any other Linux process.&lt;/li&gt;
&lt;li&gt;"Why is my container using so much memory?" — because &lt;code&gt;cgroups&lt;/code&gt; are throttling or reporting resource usage, the same mechanism Linux itself uses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Docker didn't invent isolation. It packaged existing Linux features into something usable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Commands That Actually Matter Here Too&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Same philosophy as the Linux post — don't memorize everything, get fluent in a small core set first.&lt;/p&gt;

&lt;p&gt;Building and running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; myapp &lt;span class="nb"&gt;.&lt;/span&gt;
docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Seeing what's actually going on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps          &lt;span class="c"&gt;# what's running right now&lt;/span&gt;
docker ps &lt;span class="nt"&gt;-a&lt;/span&gt;       &lt;span class="c"&gt;# what's running or has exited&lt;/span&gt;
docker logs &lt;span class="nt"&gt;-f&lt;/span&gt; myapp   &lt;span class="c"&gt;# this is your tail -f from the Linux post&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Getting inside a running container to debug it:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;The first time I ran this and realized I was just... inside a normal Linux shell, looking at normal Linux files, using the same &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;, and &lt;code&gt;grep&lt;/code&gt; I'd already learned — that's when Docker really clicked. It wasn't a new skill. It was the same skill, in a slightly different box.&lt;/p&gt;

&lt;p&gt;Cleaning up (because disk space disappears fast):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker system prune
docker image prune
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why This Sets You Up for Kubernetes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's the part that made the next step obvious: Kubernetes doesn't run "apps." It runs containers. Every pod is one or more containers, scheduled onto a node, which is — you guessed it — a Linux machine. The &lt;code&gt;docker logs&lt;/code&gt;, &lt;code&gt;docker exec&lt;/code&gt;, and resource concepts you just learned map almost directly onto &lt;code&gt;kubectl logs&lt;/code&gt;, &lt;code&gt;kubectl exec&lt;/code&gt;, and Kubernetes resource limits.&lt;/p&gt;

&lt;p&gt;Learn Docker on top of Linux, and Kubernetes stops looking like a new mountain. It starts looking like the same mountain, just with more automation strapped onto it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I'd Tell Someone Starting Docker Today&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Don't start with Docker Compose and fifteen services wired together. Start with one container. Build it. Break it. Exec into it and poke around like it's just another Linux box — because it is. Once building and debugging a single container feels boring and routine, multi-container setups and orchestration stop being scary and start being the next logical step.&lt;/p&gt;

&lt;p&gt;Next up: I'll go through the CI/CD pipeline basics I wish I'd understood &lt;em&gt;before&lt;/em&gt; I started copy-pasting YAML from Stack Overflow.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>DEVOPS</title>
      <dc:creator>prash 1</dc:creator>
      <pubDate>Tue, 21 Jul 2026 19:07:02 +0000</pubDate>
      <link>https://dev.to/prash_1_9a3a6266c93cd7276/devops-3bbi</link>
      <guid>https://dev.to/prash_1_9a3a6266c93cd7276/devops-3bbi</guid>
      <description>&lt;h1&gt;
  
  
  Why Every DevOps Engineer Needs to Fall in Love With Linux (Before Anything Else)
&lt;/h1&gt;

&lt;p&gt;When I started learning DevOps, I made the classic beginner mistake. I jumped straight into Docker tutorials, then AWS, then Kubernetes — because those are the tools that show up in every job description and every flashy YouTube thumbnail. Linux felt boring. Old. Something my seniors used because "that's just how it's always been done."&lt;/p&gt;

&lt;p&gt;It took me exactly one broken container, one failed SSH connection, and one very confused 2 AM debugging session to realize I had it backwards.&lt;/p&gt;

&lt;p&gt;Here's the truth nobody tells you early enough: &lt;strong&gt;Docker runs on Linux. AWS servers run on Linux. Your CI/CD pipelines run on Linux. Kubernetes nodes run on Linux.&lt;/strong&gt; Skip Linux, and you're building a house on a foundation you don't understand.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Terminal Isn't Scary — It's Honest
&lt;/h2&gt;

&lt;p&gt;The first time I opened a terminal, it felt like staring into a black hole with a blinking cursor judging me. No buttons. No menus. Just... a prompt, waiting.&lt;/p&gt;

&lt;p&gt;But here's what changed my mind: the terminal doesn't hide anything from you. When something breaks in a GUI, you get a vague error popup and a spinning wheel. When something breaks in Linux, you get a log file that tells you &lt;em&gt;exactly&lt;/em&gt; what went wrong, on &lt;em&gt;exactly&lt;/em&gt; which line, at &lt;em&gt;exactly&lt;/em&gt; what time. Once I understood that, the terminal stopped being intimidating and started being the most honest tool I had.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Commands That Actually Matter (Not All 200 of Them)
&lt;/h2&gt;

&lt;p&gt;You don't need to memorize every Linux command that exists. I wasted weeks trying to do that. What you actually need is a small toolkit you can use without thinking:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Moving around and looking at things:&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="nb"&gt;pwd&lt;/span&gt;          &lt;span class="c"&gt;# where am I right now&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt;       &lt;span class="c"&gt;# what's in this folder (including hidden files)&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; /var/log  &lt;span class="c"&gt;# go somewhere else&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Reading files without opening a heavy editor:&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="nb"&gt;cat &lt;/span&gt;file.txt
less file.txt
&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; app.log     &lt;span class="c"&gt;# this one alone will save you during every production incident&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Finding things when you don't know where they are:&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;find / &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"app.log"&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"ERROR"&lt;/span&gt; app.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Understanding what's actually running:&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;ps aux
top
&lt;span class="nb"&gt;kill&lt;/span&gt; &lt;span class="nt"&gt;-9&lt;/span&gt; 1234
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Permissions — the thing that confuses everyone at first:&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="nb"&gt;chmod&lt;/span&gt; +x script.sh
&lt;span class="nb"&gt;sudo chown &lt;/span&gt;user:group file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's genuinely 80% of what I use, daily, even now. The rest I look up when I need it. Nobody has every flag of every command memorized — including senior engineers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Day I Understood Why Permissions Matter
&lt;/h2&gt;

&lt;p&gt;Early on, I got a &lt;code&gt;Permission denied&lt;/code&gt; error running a script and just typed &lt;code&gt;sudo&lt;/code&gt; in front of everything to make it go away. It worked, so I moved on.&lt;/p&gt;

&lt;p&gt;Later, on a real project, someone asked me why a config file had &lt;code&gt;777&lt;/code&gt; permissions (basically, "anyone can read, write, or execute this"). I didn't have an answer. That's when I actually sat down and learned what &lt;code&gt;chmod&lt;/code&gt; numbers mean — and realized I had been creating a security hole out of laziness, not understanding.&lt;/p&gt;

&lt;p&gt;That's the thing about Linux — it doesn't stop you from shooting yourself in the foot. It trusts you to know what you're doing. Which means you actually have to &lt;em&gt;learn&lt;/em&gt; what you're doing.&lt;/p&gt;

&lt;h2&gt;
  
  
  SSH: The Command That Makes You Feel Like a "Real" Engineer
&lt;/h2&gt;

&lt;p&gt;There's a specific moment every DevOps beginner remembers — the first time you SSH into a remote server and it actually connects.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh username@server-ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Suddenly you're not clicking around a dashboard anymore. You're &lt;em&gt;inside&lt;/em&gt; a machine, potentially thousands of miles away, typing commands that actually do something. It's a small moment, but it's the moment Linux stops being "a thing I'm learning" and starts being "a tool I use."&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters Even More on AWS
&lt;/h2&gt;

&lt;p&gt;If you're heading toward cloud/DevOps work like I was, here's the part that made everything click: every EC2 instance you launch is (almost always) a Linux server. Every container you build with Docker is running on a Linux kernel underneath, even if you're on a Mac or Windows laptop. Every Kubernetes node is Linux.&lt;/p&gt;

&lt;p&gt;So when your app crashes at 2 AM and your manager asks "what happened," the answer isn't going to be found in a fancy AWS dashboard. It's going to be found in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /var/log/app.log
journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; myapp &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;        &lt;span class="c"&gt;# is the disk full?&lt;/span&gt;
free &lt;span class="nt"&gt;-m&lt;/span&gt;      &lt;span class="c"&gt;# did it run out of memory?&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Linux is where the &lt;em&gt;real&lt;/em&gt; answers live. Everything else — Docker, Kubernetes, AWS — is just a nicer interface built on top of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd Tell Someone Starting Today
&lt;/h2&gt;

&lt;p&gt;Don't try to "finish" Linux before moving to Docker or AWS — you never really finish learning it, and that's fine. But do get comfortable enough that a terminal doesn't scare you. Get to the point where &lt;code&gt;cd&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, and &lt;code&gt;chmod&lt;/code&gt; feel like typing your own name.&lt;/p&gt;

&lt;p&gt;Break something on purpose. Delete a file you didn't need. Lock yourself out of a permission you set wrong. Fix it. That's how it actually sticks — not from reading a cheat sheet, but from being annoyed enough to figure it out yourself at 11 PM.&lt;/p&gt;

&lt;p&gt;Because eventually, when a container won't start, or a deployment silently fails, or a server runs out of disk space — you won't be the person waiting for someone else to fix it.&lt;/p&gt;

&lt;p&gt;You'll be the person who opens the terminal, types three commands, and just... knows.&lt;/p&gt;

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