مفاهیم پیش نیاز

فرض کنید یک وب‌سایت دارید که شامل سه بخش است:

- فرانت‌اند (Frontend) با استفاده از React

- بک‌اند (Backend) با استفاده از Python API

- پایگاه داده (Database) با PostgreSQL

برای توسعه این پروژه، باید ابزارهایی مثل Node.js، Python و PostgreSQL را روی سیستم خود نصب کنید. اما چالش اصلی اینجاست:

چطور مطمئن شوید نسخه‌هایی که نصب می‌کنید با نسخه‌هایی که پروژه نیاز دارد، تداخل نداشته باشند یا باعث بروز خطا نشوند؟

کانتینرها (Containers)

راه‌حل این مشکل کانتینرها هستند.

کانتینرها فرایندهایی ایزوله‌شده‌اند که در محیطی جداگانه از سیستم عامل اصلی اجرا می‌شوند. برای هر بخش از پروژه (فرانت، بک، دیتابیس) می‌توان یک کانتینر مجزا تعریف کرد.

تفاوت با ماشین مجازی (Virtual Machine)

ماشین مجازی شامل یک سیستم‌عامل کامل است و منابع بیشتری مصرف می‌کند. اما کانتینر فقط شامل بخش‌های ضروری برای اجرای برنامه است، بنابراین سبک‌تر، سریع‌تر و بهینه‌تر عمل می‌کند.

کانتینر ایمیج (Container Image)

ایمیج (Image) یک قالب آماده و غیرقابل‌تغییر (read-only) است که شامل تمام فایل‌ها، پیکربندی‌ها و وابستگی‌های لازم برای اجرای یک کانتینر است.

مثال‌ها:

- ایمیج PostgreSQL شامل: فایل‌های اجرایی دیتابیس، فایل‌های پیکربندی و کتابخانه‌های مورد نیاز

- ایمیج برنامه Python شامل: مفسر Python، کد برنامه، و پکیج‌های مورد نیاز (dependencies)

برای اجرای یک کانتینر در محیطی دیگر (مثلاً روی سرور یا سیستم هم‌تیمی)، باید ایمیج آن را با محیط جدید به اشتراک گذاشت.

رجیستری (Registry) و ریپازیتوری (Repository)

برای ذخیره و اشتراک‌گذاری ایمیج‌ها، از رجیستری داکر (Docker Registry) استفاده می‌شود.

Registry: یک سرویس مرکزی برای ذخیره و مدیریت ایمیج‌ کانتینرها

Repository: یک مجموعه از ایمیج‌های مرتبط با یک پروژه یا سرویس خاص (مثلاً نسخه‌های مختلف یک برنامه)

تفاوت یک رجیستری با یک ریپازتوری در این است رجیستری محل ذخیره کانتینر ایمیج ها هستند در حالی که ریپازتوری ها مجموعه چند ایمیج مربوط به هم هستند. به‌عبارت دیگر Registry مثل یک کتابخانه بزرگ است، و Repository مثل یک قفسه در آن کتابخانه که نسخه‌های مختلف یک Image را مانند کتاب‌ها نگه می‌دارد.