Future ForgeFuture ForgeFuture ForgeFuture Forge
خدماتنمونه‌کارهاپکیج‌هاابزارهای رایگانیادداشت‌هادرباره ماتماس
شروع پروژه
  1. خانه
  2. /یادداشت‌ها
Future ForgeFuture Forge

استودیوی مهندسی محصول — طراحی، ساخت و استقرار نرم‌افزار.

پروژه‌تان را مطرح کنید

ارتباط

hello@futureforge.ir09128464105
Future ForgeFuture Forge

استودیوی مهندسی محصول — طراحی، ساخت و استقرار نرم‌افزار.

خدمات

طراحی و ساخت محصولتوسعه فول‌استکممیزی مهندسیمشاوره معماریزیرساخت و استقرارهوش مصنوعی در محصول

کاوش

نمونه‌کارهایادداشت‌هاپرسش‌هاپکیج‌ها

ابزارهای رایگان

ممیزی مهندسیمشاور معماریتخمین پروژهابزار پرامپت

شرکت

درباره ماتماسحریم خصوصیشرایط استفاده

پروژه‌تان را مطرح کنید

مسئله و محدودیت را بنویسید. اگر تطابق داشته باشیم، برای گفتگو هماهنگ می‌کنیم.

پروژه‌تان را مطرح کنید

ارتباط

hello@futureforge.ir09128464105
GitHubLinkedIn

© 2026 FutureForge. همه حقوق محفوظ است.

خانهخدماتابزارهای رایگانشروع پروژه
عملیات و استقرار

تفاوت Docker Image و Container چیست؟

Image قالب لایه‌ای و تغییرناپذیر است؛ Container نمونهٔ در حال اجرا از آن Image — با digests، لایه و دادهٔ پایدار.

سا
سهیل ابراهیم‌پور

بنیان‌گذار و مهندس محصول

·۲۹ شهریور ۱۴۰۵·6 دقیقه مطالعه
تفاوت Image و ContainerDocker imagecontainerlayerdigestDockerfilevolume
blueprint کانتینر و خروجی docker images و docker ps

در گفتگوهای تیم اغلب کسی می‌گوید «Container را آپلود کردم» در حالی که منظورش Image است، یا «Image را ری‌استارت کردم» در حالی که Image اجرا نمی‌شود — Container اجرا می‌شود. این جابه‌جایی واژه‌ها فقط زبانی نیست؛ باعث اشتباه در نسخه‌گذاری، Rollback و پاک کردن داده می‌شود.

طبق مستندات Docker، Image یک بستهٔ استاندارد شامل فایل‌ها، باینری‌ها، کتابخانه‌ها و پیکربندی لازم برای اجرای یک Container است. Container فرایند ایزوله‌ای است که از روی آن Image ساخته می‌شود. Image را می‌سازید، ذخیره و توزیع می‌کنید؛ Container را start/stop/delete می‌کنید.

این صفحه دو مفهوم را جدا می‌کند، لایه‌ها و تغییرناپذیری را توضیح می‌دهد، و نشان می‌دهد دادهٔ پایدار کجا باید باشد تا با حذف Container از بین نرود.

وایت‌برد Image به عنوان Recipe و Container به عنوان Instance

پاسخ کوتاه

Image = قالب فقط‌خواندنی (مثل کلاس یا نصب‌کنندهٔ نسخه‌دار). Container = نمونهٔ در حال اجرا یا متوقف‌شده از آن قالب (مثل آبجکت یا فرایند زنده). از یک Image می‌توانید چند Container بسازید. تغییر داخل Container در حال اجرا روی Image اصلی نوشته نمی‌شود؛ برای ماندگار کردن وضعیت جدید باید Image تازه commit/build کنید یا داده را در Volume بیرون بگذارید.

در مسیر حرفه‌ای: CI Image می‌سازد و به Registry می‌فرستد؛ محیط اجرا Container را از digest مشخص بالا می‌آورد. اگر این جمله برایتان روشن است، بقیهٔ جزئیات ابزار است.

Image را نسخه‌گذاری کنید؛ Container را مشاهده و عوض کنید. برعکسش یعنی هر ری‌استارت می‌تواند «نسخه» را گم کند.

Image: بستهٔ تغییرناپذیر لایه‌ای

دو اصل مهم Image از مستندات Docker:

  1. تغییرناپذیری (immutable): بعد از ساخته شدن Image را «ویرایش» نمی‌کنید؛ Image جدید می‌سازید یا لایه روی آن اضافه می‌کنید.
  2. ساختار لایه‌ای: هر لایه مجموعه‌ای از تغییرات فایل‌سیستم است (اضافه، حذف، تغییر).

برای اپ Python می‌توانید از Image رسمی Python شروع کنید و لایه‌هایی برای نصب وابستگی و کپی کد اضافه کنید. تمرکز روی اپ می‌ماند نه روی نصب دوبارهٔ runtime. لایه‌ها باعث می‌شوند rebuild فقط بخش‌های تغییرکرده را دوباره بسازد و کش build مفید باشد.

از کجا Image می‌آید؟

Docker Hub بازار پیش‌فرض عمومی است؛ Imageهای رسمی و ناشران تأییدشده نقطهٔ شروع رایج‌اند. تیم‌ها برای Production معمولاً Registry خصوصی دارند. `docker pull` لایه‌ها را می‌گیرد؛ `docker image history` لایه‌ها و فرمان ساخت را نشان می‌دهد.

تگ مثل `myapp:1.4` برچسب انسانی است؛ digest (مثلاً sha256:…) اثر انگشت محتواست. برای استقرار مطمئن، digest را قفل کنید تا تگ جابه‌جا نشود.

Container: نمونهٔ اجرایی

Container را با API یا CLI می‌سازید، شروع و متوقف می‌کنید، به شبکه وصل می‌کنید یا حذف می‌کنید. هنگام اجرا، Docker معمولاً یک لایهٔ خواندن/نوشتن روی Image فقط‌خواندنی می‌گذارد تا Container بتواند فایل بسازد یا عوض کند. با حذف Container، تغییراتی که در Volume پایدار ذخیره نشده‌اند از بین می‌روند — نکته‌ای که مستندات overview هم تأکید می‌کند.

چند Container از یک Image می‌توانند هم‌زمان با تنظیمات مختلف (پورت، متغیر محیطی، نام) اجرا شوند. حذف یکی روی بقیه اثر ندارد؛ مستقل مدیریت می‌شوند.

جدول تفاوت عملی

سؤال روزمرهImageContainer
آیا اجرا می‌شود؟خیر؛ قالب استبله؛ فرایند/نمونه
کجا ذخیره می‌شود؟دیسک محلی / Registryروی میزبان runtime
نسخه‌گذاری چگونه؟تگ + digestID و نام نمونه
تغییر کد اپ؟Dockerfile و build جدیدموقت داخل لایهٔ writable (نامناسب برای Prod)
دادهٔ کاربر/دیتابیس؟نباید داخل Image اسرار/دادهٔ زنده باشدبا Volume/bind mount بیرون نگه دارید
Rollback یعنی؟برگشت به digest قبلیجایگزینی Container با Image قبلی

Analogy کوتاه برای غیرتکنیکال

Image مثل دستور پخت چاپ‌شده و ثابت است. Container مثل یک‌بار پختن آن دستور در آشپزخانه است. می‌توانید همزمان چند ظرف از همان دستور بپزید. اگر وسط پخت ادویه عوض کنید، کتاب دستور پخت عوض نشده؛ فقط همان ظرف تغییر کرده. برای نسخهٔ جدید باید دستور پخت تازه چاپ کنید (Image جدید).

Dockerfile، build و رابطه با Container

Dockerfile مراحل ساخت Image را توصیف می‌کند. خروجی build یک Image است نه یک Container در حال سرویس. سپس `docker run` از روی Image یک Container می‌سازد و معمولاً فرایند اصلی را اجرا می‌کند. در CI باید build را از run جدا کنید: تست روی Image ساخته‌شده، Deploy همان digest.

اشتباه رایج: وارد Container شدن، پکیج نصب کردن، و فکر کردن «محیط درست شد» بدون ثبت در Dockerfile. آن تغییر با از بین رفتن Container می‌میرد و روی ماشین همکار تکرار نمی‌شود.

دادهٔ پایدار: Volume و bind mount

اگر دیتابیس یا فایل آپلود کاربر داخل لایهٔ writable Container بماند، با `docker rm` یا جایگزینی نسخه پاک می‌شود. Volume داده را خارج از چرخهٔ عمر Container نگه می‌دارد. Image باید کد و وابستگی را حمل کند؛ حالت و دادهٔ کاربر را نه. این تفکیک همان منطق Build/Release و محیط‌هاست که در استقرار مهم است.

فرمان‌های ذهنی (بدون وابستگی به حفظ کردن همهٔ فلگ‌ها)

  • دیدن Imageهای محلی و کشیدن از Registry → کار با Image.
  • دیدن فرایندهای در حال اجرا / توقف / لاگ زنده → کار با Container.
  • ساخت از Dockerfile → تولید Image.
  • run از Image → ایجاد/اجرای Container.

وقتی در چت می‌نویسید «Container را به سرور بفرست»، دقیق‌تر بگویید «Image را push کن و روی سرور Container را از آن digest بالا بیاور». زبان دقیق، عملیات دقیق می‌سازد.

امنیت و بهداشت Image

  • از Image پایهٔ معتبر و به‌روز شروع کنید.
  • لایهٔ نهایی را مینیمال نگه دارید (multi-stage build در صورت نیاز).
  • اسکن آسیب‌پذیری را بخشی از CI کنید.
  • Secret را در لایهٔ Image نگذارید.
  • تگ شناور `latest` را برای Production مبنا نکنید.

جمع‌بندی برای تصمیم

Image قالب لایه‌ای تغییرناپذیر برای توزیع است؛ Container نمونهٔ اجرایی با لایهٔ نوشتنی موقت. نسخه‌گذاری و Registry متعلق به Image است؛ مشاهده، مقیاس و جایگزینی متعلق به Container. دادهٔ پایدار را از هر دو جدا کنید.

قدم کوچک: برای سرویس اصلیتان یک تگ معنا‌دار و ثبت digest بعد از build در CI؛ Deploy فقط با همان digest. از فردای آن روز بحث «کدام نسخه بالا است» کوتاه‌تر می‌شود.

منابع و مراجع

  • Docker Docs — What is an image? — https://docs.docker.com/get-started/docker-concepts/the-basics/what-is-an-image/
  • Docker Docs — What is a container? — https://docs.docker.com/get-started/docker-concepts/the-basics/what-is-a-container/
  • Docker Docs — What is Docker? (images & containers) — https://docs.docker.com/get-started/docker-overview/

برای مقایسه با VM مقالهٔ ۱۰۶ و برای چندسرویسی با Compose مقالهٔ ۱۰۸ را ببینید.

نویسنده

سا

سهیل ابراهیم‌پور بنیان‌گذار FutureForge است. روی طراحی محصول، معماری و استقرار نرم‌افزار سفارشی کار می‌کند.

یادداشت‌های مرتبط

یادداشت‌های مرتبط

دسته‌بندی‌ها

خدمات مرتبط

از یادداشت تا پروژه

اگر موضوع این مقاله به سیستم یا محصول شما نزدیک است، می‌توانیم درباره دامنه واقعی صحبت کنیم.

اگر در انتخاب معماری یا مسیر توسعه مطمئن نیستید، می‌توانید درباره پروژه صحبت کنیم.

مسئله و محدودیت را بنویسید. اگر تطابق داشته باشیم، برای گفتگو هماهنگ می‌کنیم.

سهیل ابراهیم‌پور
یادداشت‌ها
Docker چیست؟ بسته‌بندی و اجرای یکنواخت نرم‌افزار
لینوکس چیست و چرا بخش بزرگی از اینترنت روی لینوکس اجرا می‌شود؟
Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه
تعیین اندازهٔ سرور: RAM، CPU و Storage بر اساس Workload
Docker در برابر Kubernetes؛ مقایسهٔ دقیق نه شعار

عملیات و استقرار

Docker چیست؟ بسته‌بندی و اجرای یکنواخت نرم‌افزار

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

لینوکس چیست و چرا بخش بزرگی از اینترنت روی لینوکس اجرا می‌شود؟

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

تعیین اندازهٔ سرور: RAM، CPU و Storage بر اساس Workload

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

Docker در برابر Kubernetes؛ مقایسهٔ دقیق نه شعار

۲۹ شهریور ۱۴۰۵
همه یادداشت‌ها219
معماری نرم‌افزار13
واژه‌نامه37
عملیات و استقرار87
مهندسی محصول74
راهنمای وب8
طراحی و ساخت محصول
توسعه فول‌استک
ممیزی مهندسی
مشاوره معماری
زیرساخت و استقرار
پروژه‌تان را مطرح کنید
ابزارهای رایگان
پروژه‌تان را مطرح کنید