<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Image on Hoang Duong</title><link>https://tech.nguuyen.io.vn/en/tags/image/</link><description>Recent content in Image on Hoang Duong</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 22 Feb 2026 14:30:00 +0700</lastBuildDate><atom:link href="https://tech.nguuyen.io.vn/en/tags/image/index.xml" rel="self" type="application/rss+xml"/><item><title>Docker Basics: Image vs Container</title><link>https://tech.nguuyen.io.vn/en/posts/docker/docker-basics-image-vs-container/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate><guid>https://tech.nguuyen.io.vn/en/posts/docker/docker-basics-image-vs-container/</guid><description>&lt;img src="https://tech.nguuyen.io.vn/images/docker/docker-basics-image-vs-container.webp" alt="Featured image of post Docker Basics: Image vs Container" />&lt;h2 id="docker-image-and-container---two-essential-concepts">Docker Image and Container - Two Essential Concepts
&lt;/h2>&lt;p>When starting with Docker, the two most important concepts you need to understand are &lt;strong>Image&lt;/strong> and &lt;strong>Container&lt;/strong>. Beginners often confuse them, but in reality, they play different roles in the Docker ecosystem. Image is like a &lt;strong>recipe repository&lt;/strong> (cooking instructions), while Container is &lt;strong>the actual execution&lt;/strong> (the prepared dish). 🍳&lt;/p>
&lt;p>In this article, I&amp;rsquo;ll explain the detailed differences between Image and Container, how they work together, and provide real examples for better understanding.&lt;/p>
&lt;hr>
&lt;h2 id="i-what-is-a-docker-image">I. What is a Docker Image?
&lt;/h2>&lt;p>A Docker Image is a &lt;strong>template&lt;/strong> used to create a Container. It contains everything needed to run an application:&lt;/p>
&lt;ul>
&lt;li>Operating system — usually minimal Linux&lt;/li>
&lt;li>Runtime environment — Node.js, Python, Java, etc.&lt;/li>
&lt;li>Application code&lt;/li>
&lt;li>Dependencies (libraries)&lt;/li>
&lt;li>Configuration files&lt;/li>
&lt;li>Environment variables&lt;/li>
&lt;/ul>
&lt;h3 id="1-key-characteristics-of-docker-image">1. Key Characteristics of Docker Image
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Read-only&lt;/strong>: Image is read-only and cannot be changed after creation&lt;/li>
&lt;li>&lt;strong>Layered structure&lt;/strong>: Image is built from layers, each layer representing a command in Dockerfile&lt;/li>
&lt;li>&lt;strong>Reusable&lt;/strong>: The same image can be used to create multiple containers&lt;/li>
&lt;li>&lt;strong>Version-controlled&lt;/strong>: Each image has tags (e.g., &lt;code>1.0&lt;/code>, &lt;code>latest&lt;/code>, &lt;code>alpine&lt;/code>) for version management&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Example of Image Structure:&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Layer&lt;/th>
&lt;th>Content&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Layer 1&lt;/td>
&lt;td>Base OS (Alpine Linux)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Layer 2&lt;/td>
&lt;td>System packages (curl, wget)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Layer 3&lt;/td>
&lt;td>Node.js runtime (18.x)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Layer 4&lt;/td>
&lt;td>Application code&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Layer 5&lt;/td>
&lt;td>Environment variables&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="2-common-image-commands">2. Common Image Commands
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Pull an image from Docker Hub&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker pull node:18-alpine
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># List downloaded images&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker images
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Remove an unused image&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker image rm node:18-alpine
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Remove all unused images&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker image prune -a
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Build image from Dockerfile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker build -t myapp:1.0 .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="ii-what-is-a-docker-container">II. What is a Docker Container?
&lt;/h2>&lt;p>A Docker Container is a &lt;strong>running instance&lt;/strong> created from a Docker Image. Container has:&lt;/p>
&lt;ul>
&lt;li>Its own file system&lt;/li>
&lt;li>Isolated network space&lt;/li>
&lt;li>Independent processes and operations&lt;/li>
&lt;li>Its own environment variables&lt;/li>
&lt;/ul>
&lt;h3 id="1-key-characteristics-of-docker-container">1. Key Characteristics of Docker Container
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Read-only base + Read-write layer&lt;/strong>: Container has a read-write layer that allows data changes&lt;/li>
&lt;li>&lt;strong>Isolated&lt;/strong>: Container is isolated from host and other containers&lt;/li>
&lt;li>&lt;strong>Stateful&lt;/strong>: Container can be in various states: running, stopped, paused, exited&lt;/li>
&lt;li>&lt;strong>Ephemeral&lt;/strong>: Containers can be created and deleted quickly (&amp;lt; 1 second)&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Example of Container:&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Create and run container from image&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -d --name myapp node:18-alpine node server.js
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># List running containers&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker ps
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># List all containers (including stopped)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker ps -a
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Stop container&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker stop myapp
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Restart container&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker start myapp
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Remove container&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker rm myapp
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># View container logs&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker logs myapp
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="2-comparing-container-with-virtual-machine">2. Comparing Container with Virtual Machine
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Aspect&lt;/th>
&lt;th>Docker Container&lt;/th>
&lt;th>Virtual Machine&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Operating System&lt;/td>
&lt;td>Share kernel with host&lt;/td>
&lt;td>Full dedicated OS&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Boot Time&lt;/td>
&lt;td>~ 1-2 seconds&lt;/td>
&lt;td>~ 1-2 minutes&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Disk Size&lt;/td>
&lt;td>MB (10-100 MB)&lt;/td>
&lt;td>GB (1-10 GB)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Performance&lt;/td>
&lt;td>Nearly native&lt;/td>
&lt;td>Needs virtualization overhead&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Max Per Host&lt;/td>
&lt;td>Hundreds&lt;/td>
&lt;td>Tens&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p align="center">
&lt;img src="https://assets.bytebytego.com/diagrams/0414-how-does-docker-work.png" alt="Docker Container Architecture">
&lt;em>Docker Container Architecture&lt;/em>
&lt;/p>
&lt;hr>
&lt;h2 id="iii-detailed-comparison-image-vs-container">III. Detailed Comparison: Image vs Container
&lt;/h2>&lt;p>For easy visualization, see the comparison table below:&lt;/p>
&lt;h3 id="complete-comparison-table">Complete Comparison Table
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Aspect&lt;/th>
&lt;th>Image&lt;/th>
&lt;th>Container&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>Analogy&lt;/strong>&lt;/td>
&lt;td>Recipe repository (cooking recipe)&lt;/td>
&lt;td>Prepared dish&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>State&lt;/strong>&lt;/td>
&lt;td>Static (read-only)&lt;/td>
&lt;td>Dynamic (read-write)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Changes&lt;/strong>&lt;/td>
&lt;td>Cannot change after creation&lt;/td>
&lt;td>Can change while running&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Quantity&lt;/strong>&lt;/td>
&lt;td>1 image creates N containers&lt;/td>
&lt;td>Many containers from 1 image&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Creation Time&lt;/strong>&lt;/td>
&lt;td>Slow (first build ~5-10 mins)&lt;/td>
&lt;td>Fast (&amp;lt; 1 second)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Storage&lt;/strong>&lt;/td>
&lt;td>Stored in Docker cache&lt;/td>
&lt;td>Stored at runtime or in volumes&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Portability&lt;/strong>&lt;/td>
&lt;td>Easy to share (push/pull)&lt;/td>
&lt;td>Only runs where Docker is installed&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Version&lt;/strong>&lt;/td>
&lt;td>Has tags for management (1.0, 2.0, latest)&lt;/td>
&lt;td>No separate version&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Network&lt;/strong>&lt;/td>
&lt;td>No&lt;/td>
&lt;td>Has isolated network&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Storage&lt;/strong>&lt;/td>
&lt;td>Stored in layers&lt;/td>
&lt;td>Has read-write layer on top of image&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="relationship-between-image-and-container">Relationship between Image and Container
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Docker Image (Template)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> docker run
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Docker Container (Running Instance)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> docker commit
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Docker Image baru (updated)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>Notes:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Image&lt;/strong> is like a &lt;code>class&lt;/code> in Object Oriented Programming (OOP)&lt;/li>
&lt;li>&lt;strong>Container&lt;/strong> is like an &lt;code>object&lt;/code> (instance of a class)&lt;/li>
&lt;li>Use &lt;code>docker run&lt;/code> to create container from image&lt;/li>
&lt;li>Use &lt;code>docker commit&lt;/code> to save container as a new image&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="iv-real-world-example-from-start-to-finish">IV. Real-World Example from Start to Finish
&lt;/h2>&lt;p>For better understanding, let&amp;rsquo;s do a detailed example:&lt;/p>
&lt;h3 id="1-create-dockerfile-to-build-image">1. Create Dockerfile (to build image)
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-dockerfile" data-lang="dockerfile">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Dockerfile&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">FROM&lt;/span>&lt;span class="s"> node:18-alpine&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">WORKDIR&lt;/span>&lt;span class="s"> /app&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">COPY&lt;/span> package*.json ./&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">RUN&lt;/span> npm install&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">COPY&lt;/span> . .&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">CMD&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;node&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;server.js&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="2-build-image-from-dockerfile">2. Build image from Dockerfile
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Build image with name myapp and tag 1.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker build -t myapp:1.0 .
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># View created image&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker images
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Output:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># REPOSITORY TAG IMAGE ID CREATED SIZE&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># myapp 1.0 abc123def456 2 minutes ago 150MB&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="3-create-and-run-container-from-image">3. Create and run container from image
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Run container from image myapp:1.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -d &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --name myapp-container &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -p 3000:3000 &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> myapp:1.0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># View running containers&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker ps
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Output:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># CONTAINER ID IMAGE COMMAND STATUS PORTS&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># xyz789ghi012 myapp:1.0 &amp;#34;node server.js&amp;#34; Up 2 minutes 0.0.0.0:3000-&amp;gt;3000/tcp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># View logs&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker logs myapp-container
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="4-interact-with-container">4. Interact with container
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Access container shell&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker &lt;span class="nb">exec&lt;/span> -it myapp-container sh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Inside container — you can:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ls -la /app
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl http://localhost:3000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="5-remove-container-and-image">5. Remove container and image
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Stop container&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker stop myapp-container
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Remove container&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker rm myapp-container
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Remove image&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker rmi myapp:1.0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="v-best-practices-with-image-and-container">V. Best Practices with Image and Container
&lt;/h2>&lt;h3 id="1-image-management">1. Image Management
&lt;/h3>&lt;ul>
&lt;li>✅ Use specific versions (e.g., &lt;code>node:18.12-alpine&lt;/code> instead of &lt;code>node:latest&lt;/code>)&lt;/li>
&lt;li>✅ Reduce size using minimal base images (alpine, distroless)&lt;/li>
&lt;li>✅ Leverage layer cache by ordering commands properly&lt;/li>
&lt;li>✅ Use &lt;code>.dockerignore&lt;/code> to exclude unnecessary files&lt;/li>
&lt;li>✅ Regularly remove unused images with &lt;code>docker image prune&lt;/code>&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Example: Use specific image version&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FROM node:18.12.1-alpine
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># instead of&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FROM node:latest
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="2-container-management">2. Container Management
&lt;/h3>&lt;ul>
&lt;li>✅ Name containers clearly (&lt;code>--name app-container&lt;/code>)&lt;/li>
&lt;li>✅ Use &lt;code>-d&lt;/code> (detached mode) to run containers in background&lt;/li>
&lt;li>✅ Regularly check logs for debugging (&lt;code>docker logs -f&lt;/code>)&lt;/li>
&lt;li>✅ Use volumes if data persistence is needed&lt;/li>
&lt;li>✅ Limit resources with &lt;code>--cpus&lt;/code>, &lt;code>--memory&lt;/code>&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Run container with resource limits&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -d &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --name app &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --cpus&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;1.5&amp;#34;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --memory&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;512m&amp;#34;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -p 8080:80 &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> myapp:1.0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="common-troubleshooting">Common Troubleshooting
&lt;/h2>&lt;h3 id="1-cannot-create-container-from-image">1. Cannot create container from image
&lt;/h3>&lt;p>&lt;strong>Error:&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Error: Cannot start container from image
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>Causes:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Image hasn&amp;rsquo;t been built or pulled&lt;/li>
&lt;li>Image is corrupted&lt;/li>
&lt;li>Port is already in use by another container&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Solution:&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Check if image exists&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker images &lt;span class="p">|&lt;/span> grep myapp
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Pull again if not present&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker pull myapp:1.0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Rebuild image&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker build -t myapp:1.0 .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="2-container-doesnt-persist-data-when-stopped">2. Container doesn&amp;rsquo;t persist data when stopped
&lt;/h3>&lt;p>&lt;strong>Cause:&lt;/strong> Container is &lt;strong>ephemeral&lt;/strong>, data inside will be lost when it stops or is removed.&lt;/p>
&lt;p>&lt;strong>Solution:&lt;/strong> Use Docker Volumes&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Create volume&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker volume create myapp-data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Mount volume to container&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -d &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --name app &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -v myapp-data:/app/data &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> myapp:1.0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="3-container-not-accessible-from-outside">3. Container not accessible from outside
&lt;/h3>&lt;p>&lt;strong>Error:&lt;/strong> Cannot access &lt;code>http://localhost:3000&lt;/code> when running container&lt;/p>
&lt;p>&lt;strong>Solution:&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ensure port is mapped from container → host&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -d &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --name app &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -p 3000:3000 &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> myapp:1.0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># For multi-container setup, use docker network&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker network create mynet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -d --network mynet --name app1 myapp:1.0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -d --network mynet --name app2 myapp:1.0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="implementation-notes-">Implementation Notes 🔧
&lt;/h2>&lt;p>&lt;strong>When applying to your project&lt;/strong>, remember these important points:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Don&amp;rsquo;t modify containers directly&lt;/strong> — Rebuild image with Dockerfile&lt;/li>
&lt;li>&lt;strong>Use docker-compose.yaml&lt;/strong> to manage multiple containers and dependencies&lt;/li>
&lt;li>&lt;strong>Use CI/CD&lt;/strong> to automatically build and push images to Docker Hub/Registry&lt;/li>
&lt;li>&lt;strong>Monitor resources&lt;/strong> with &lt;code>docker stats&lt;/code> or Prometheus + Grafana&lt;/li>
&lt;li>&lt;strong>Backup data&lt;/strong> regularly from volumes&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Best practices:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Always name images and containers clearly&lt;/li>
&lt;li>Use specific tags for different environments (dev, staging, prod)&lt;/li>
&lt;li>Write &lt;code>.dockerignore&lt;/code> to reduce image size and speed up builds&lt;/li>
&lt;li>Use multi-stage build to create minimal images&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Troubleshooting:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>When container crashes, check logs: &lt;code>docker logs &amp;lt;container-name&amp;gt;&lt;/code>&lt;/li>
&lt;li>When pulling fails, check network: &lt;code>ping registry-1.docker.io&lt;/code>&lt;/li>
&lt;li>When container can&amp;rsquo;t access files, mount volume with correct permissions&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-conclusion">🎯 Conclusion
&lt;/h2>&lt;p>To summarize:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Docker Image = Recipe repository (read-only template)&lt;/strong> — Contains all settings needed to run an application&lt;/li>
&lt;li>&lt;strong>Docker Container = Prepared dish (running instance)&lt;/strong> — Container created from image with read-write layer&lt;/li>
&lt;li>Image is static, Container is dynamic&lt;/li>
&lt;li>Use &lt;code>docker run&lt;/code> to create container from image&lt;/li>
&lt;li>Use &lt;code>docker commit&lt;/code> to update container as a new image&lt;/li>
&lt;/ul>
&lt;p>Now you understand the differences between Image and Container. Next step: learn how to use Dockerfile to build images and Docker Compose to manage multiple containers. 🚀&lt;/p>
&lt;p>If you found this article helpful, remember to ⭐ star the repo or 📱 share with friends! 😊&lt;/p>
&lt;hr>
&lt;h2 id="references">References
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://docs.docker.com/" target="_blank" rel="noopener"
>Docker Official Documentation&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://docs.docker.com/develop/dev-best-practices/" target="_blank" rel="noopener"
>Best practices for writing Dockerfiles&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>