image: قالب، container: نمونهی در حال اجرا
یکی از مفاهیم پایهای که باید کاملاً روشن باشد، تفاوت بین image و container است. image یک بستهی فقط-خواندنی (read-only) است که شامل کد برنامه، کتابخانهها، تنظیمات و همهچیزهایی است که برنامه برای اجرا نیاز دارد. میتوان image را مثل یک قالب یا الگو در نظر گرفت، شبیه به کلاس در برنامهنویسی شیءگرا.
container نمونهی در حال اجرای یک image است، دقیقاً مثل نمونه (instance) ساختهشده از یک کلاس. از یک image میتوان چندین container مستقل و همزمان ساخت که هرکدام حافظه، فایلسیستم موقت و شبکهی جداگانه دارند اما همگی از همان قالب اولیه ساخته شدهاند.
docker run -d --name web1 nginx
docker run -d --name web2 nginx
دستور بالا دو container مستقل به نامهای web1 و web2 از روی یک image یکسان (nginx) میسازد. فلگ -d یعنی کانتینر در پسزمینه (detached) اجرا شود.
چرخهی حیات یک کانتینر
یک کانتینر میتواند در حالتهای در حال اجرا، متوقف یا حذفشده باشد:
docker stop web1
docker start web1
docker restart web1
docker rm -f web2
نکتهی مهم این است که وقتی یک کانتینر متوقف میشود، فایلسیستم آن از بین نمیرود و با docker start میتوان دوباره آن را با همان دادهها اجرا کرد؛ اما با docker rm کانتینر و تمام تغییرات موقتش برای همیشه حذف میشود، مگر اینکه دادهها در یک volume ذخیره شده باشند که در فصل بعد بررسی میکنیم.