<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[docker-learn]]></title><description><![CDATA[docker-learn]]></description><link>https://docker-learn.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 00:05:54 GMT</lastBuildDate><atom:link href="https://docker-learn.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[🚀 Master Docker: Essential Commands and Troubleshooting Tips]]></title><description><![CDATA[Author: Shams RazaTags: #Docker #DevOps #Containers #Linux #TroubleshootingReading Time: ~7 min
GitHub: Docker-Learn

Containers are now a standard in modern application development, and Docker is the most popular containerization platform. Whether y...]]></description><link>https://docker-learn.hashnode.dev/master-docker-essential-commands-and-troubleshooting-tips</link><guid isPermaLink="true">https://docker-learn.hashnode.dev/master-docker-essential-commands-and-troubleshooting-tips</guid><category><![CDATA[Devops]]></category><category><![CDATA[Docker]]></category><category><![CDATA[containers]]></category><category><![CDATA[Orchestration]]></category><category><![CDATA[Linux]]></category><dc:creator><![CDATA[Shams Raza]]></dc:creator><pubDate>Sat, 14 Jun 2025 11:16:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1749898220271/81a493ff-c086-47eb-a23f-92c3d0b6c6b1.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<hr />
<p><strong>Author:</strong> <em>Shams Raza</em><br /><strong>Tags:</strong> <code>#Docker</code> <code>#DevOps</code> <code>#Containers</code> <code>#Linux</code> <code>#Troubleshooting</code><br /><strong>Reading Time:</strong> ~7 min</p>
<p>GitHub: <a target="_blank" href="https://github.com/DevopsStax/docker-learn.git">Docker-Learn</a></p>
<hr />
<p>Containers are now a standard in modern application development, and Docker is the most popular containerization platform. Whether you're a beginner or looking to level up your Docker skills, this guide walks you through:</p>
<p>✅ Docker basics<br />✅ Useful commands (Beginner → Advanced)<br />✅ Common Docker issues and how to fix them</p>
<hr />
<h3 id="heading-what-is-docker">🐳 What is Docker?</h3>
<p>Docker is an open-source platform to <strong>build</strong>, <strong>ship</strong>, and <strong>run</strong> applications inside containers. It packages software with all dependencies, ensuring consistent environments across development, testing, and production.</p>
<hr />
<h2 id="heading-docker-basics">🧱 Docker Basics</h2>
<h3 id="heading-1-install-docker">📦 1. Install Docker</h3>
<ul>
<li><p><strong>Windows/Mac</strong>: Install Docker Desktop from <a target="_blank" href="https://www.docker.com/products/docker-desktop">https://www.docker.com/products/docker-desktop</a></p>
</li>
<li><p><strong>Linux</strong>:</p>
</li>
</ul>
<pre><code class="lang-bash">sudo apt update
sudo apt install docker.io -y
sudo systemctl <span class="hljs-built_in">enable</span> --now docker
</code></pre>
<p>Add your user to the Docker group:</p>
<pre><code class="lang-bash">sudo usermod -aG docker <span class="hljs-variable">$USER</span>
</code></pre>
<hr />
<h3 id="heading-2-basic-docker-commands">🛠️ 2. Basic Docker Commands</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Task</td><td>Command</td></tr>
</thead>
<tbody>
<tr>
<td>Check Docker version</td><td><code>docker version</code></td></tr>
<tr>
<td>Pull image</td><td><code>docker pull nginx</code></td></tr>
<tr>
<td>Run container</td><td><code>docker run -d -p 80:80 nginx</code></td></tr>
<tr>
<td>List containers</td><td><code>docker ps -a</code></td></tr>
<tr>
<td>Stop container</td><td><code>docker stop &lt;container_id&gt;</code></td></tr>
<tr>
<td>Remove container</td><td><code>docker rm &lt;container_id&gt;</code></td></tr>
<tr>
<td>Remove image</td><td><code>docker rmi &lt;image_id&gt;</code></td></tr>
</tbody>
</table>
</div><p>Example:</p>
<pre><code class="lang-bash">docker run -it ubuntu bash
</code></pre>
<hr />
<h2 id="heading-intermediate-docker-commands">⚙️ Intermediate Docker Commands</h2>
<h3 id="heading-image-building">🧰 Image Building</h3>
<p>Create a <code>Dockerfile</code>:</p>
<pre><code class="lang-Dockerfile"><span class="hljs-keyword">FROM</span> python:<span class="hljs-number">3.11</span>-slim
<span class="hljs-keyword">WORKDIR</span><span class="bash"> /app</span>
<span class="hljs-keyword">COPY</span><span class="bash"> . .</span>
<span class="hljs-keyword">RUN</span><span class="bash"> pip install -r requirements.txt</span>
<span class="hljs-keyword">CMD</span><span class="bash"> [<span class="hljs-string">"python"</span>, <span class="hljs-string">"app.py"</span>]</span>
</code></pre>
<p>Build and tag the image:</p>
<pre><code class="lang-bash">docker build -t my-python-app .
docker images
</code></pre>
<hr />
<h3 id="heading-docker-volumes">🧪 Docker Volumes</h3>
<pre><code class="lang-bash">docker volume create my_data
docker run -v my_data:/data busybox
</code></pre>
<p>Useful for persisting data across container restarts.</p>
<hr />
<h3 id="heading-docker-networking">🧑‍🤝‍🧑 Docker Networking</h3>
<pre><code class="lang-bash">docker network create my_net
docker run -d --name app1 --network my_net nginx
docker run -it --network my_net busybox
</code></pre>
<p>Now from <code>busybox</code> you can <code>ping app1</code>.</p>
<hr />
<h2 id="heading-advanced-docker-commands">🧠 Advanced Docker Commands</h2>
<h3 id="heading-multi-stage-builds">🧭 Multi-Stage Builds</h3>
<p>Efficiently build lean images:</p>
<pre><code class="lang-Dockerfile"><span class="hljs-comment"># stage 1</span>
<span class="hljs-keyword">FROM</span> golang:<span class="hljs-number">1.19</span> as builder
<span class="hljs-keyword">WORKDIR</span><span class="bash"> /src</span>
<span class="hljs-keyword">COPY</span><span class="bash"> . .</span>
<span class="hljs-keyword">RUN</span><span class="bash"> go build -o app .</span>

<span class="hljs-comment"># stage 2</span>
<span class="hljs-keyword">FROM</span> alpine
<span class="hljs-keyword">COPY</span><span class="bash"> --from=builder /src/app /app</span>
<span class="hljs-keyword">CMD</span><span class="bash"> [<span class="hljs-string">"/app"</span>]</span>
</code></pre>
<hr />
<h3 id="heading-health-checks">🧪 Health Checks</h3>
<pre><code class="lang-Dockerfile"><span class="hljs-keyword">HEALTHCHECK</span><span class="bash"> CMD curl --fail http://localhost:80 || <span class="hljs-built_in">exit</span> 1</span>
</code></pre>
<p>Add this in Dockerfile to check container health.</p>
<hr />
<h3 id="heading-docker-compose-for-multi-container-apps">🐳 Docker Compose (for multi-container apps)</h3>
<p><code>docker-compose.yml</code>:</p>
<pre><code class="lang-yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">"3.9"</span>
<span class="hljs-attr">services:</span>
  <span class="hljs-attr">web:</span>
    <span class="hljs-attr">image:</span> <span class="hljs-string">nginx</span>
    <span class="hljs-attr">ports:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">"80:80"</span>
  <span class="hljs-attr">app:</span>
    <span class="hljs-attr">build:</span> <span class="hljs-string">.</span>
    <span class="hljs-attr">volumes:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">.:/app</span>
    <span class="hljs-attr">depends_on:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">web</span>
</code></pre>
<p>Run with:</p>
<pre><code class="lang-bash">docker-compose up --build
</code></pre>
<hr />
<h2 id="heading-docker-troubleshooting">🧯 Docker Troubleshooting</h2>
<h3 id="heading-error-permission-denied-when-using-docker">❗ Error: "Permission denied" when using Docker</h3>
<p>Fix:</p>
<pre><code class="lang-bash">sudo usermod -aG docker <span class="hljs-variable">$USER</span>
newgrp docker
</code></pre>
<hr />
<h3 id="heading-container-exits-immediately">❗ Container exits immediately</h3>
<p>Check logs:</p>
<pre><code class="lang-bash">docker logs &lt;container_id&gt;
</code></pre>
<p>Run in interactive mode to debug:</p>
<pre><code class="lang-bash">docker run -it &lt;image&gt; /bin/bash
</code></pre>
<hr />
<h3 id="heading-port-already-in-use">❗ Port already in use</h3>
<p>Check and kill:</p>
<pre><code class="lang-bash">sudo lsof -i :80
sudo <span class="hljs-built_in">kill</span> -9 &lt;PID&gt;
</code></pre>
<hr />
<h3 id="heading-cannot-connect-to-docker-daemon">❗ Cannot connect to Docker daemon</h3>
<p>Check service:</p>
<pre><code class="lang-bash">sudo systemctl status docker
sudo systemctl restart docker
</code></pre>
<hr />
<h3 id="heading-image-too-large">❗ Image too large</h3>
<p>Use Alpine base:</p>
<pre><code class="lang-Dockerfile"><span class="hljs-keyword">FROM</span> python:<span class="hljs-number">3.11</span>-alpine
</code></pre>
<p>Clean up:</p>
<pre><code class="lang-bash">docker system prune
docker builder prune
</code></pre>
<hr />
<h2 id="heading-conclusion">🔚 Conclusion</h2>
<p>Docker makes development and deployment faster, more consistent, and scalable. Mastering its commands and troubleshooting skills helps you become a better DevOps engineer or backend developer.</p>
<p>✅ Start small, build fast, and troubleshoot confidently.</p>
<hr />
<h2 id="heading-bonus-resources">📚 Bonus Resources</h2>
<ul>
<li><p><a target="_blank" href="https://docs.docker.com/">Docker Docs</a></p>
</li>
<li><p><a target="_blank" href="https://labs.play-with-docker.com/">Play with Docker</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/veggiemonk/awesome-docker">Awesome Docker GitHub</a></p>
</li>
</ul>
<hr />
<p>💬 <strong>Have questions or tips to share? Drop them in the comments below!</strong><br />🔔 Follow me for more DevOps and cloud articles.</p>
<hr />
]]></content:encoded></item></channel></rss>