دستورهای پایهای و چرخهی حیات کانتینرها
چرخهی حیات یک کانتینر (Container Lifecycle)
یک کانتینر از زمان ساخته شدن تا پاک شدن، وضعیتهای مختلفی (States) را سپری میکند:
- Created: کانتینر ساخته شده اما پردازش درون آن هنوز آغاز نشده است.
- Running: پردازش اصلی کانتینر (Process 1) در حال اجراست.
- Paused: پردازشهای کانتینر با سیگنالهای فریز سیستمعامل معلق شدهاند.
- Stopped (Exited): پردازش کانتینر متوقف شده یا کارش به پایان رسیده است. در این حالت فایلها هنوز روی دیسک باقی ماندهاند.
- Removed: کانتینر و لایهی خواندن/نوشتن موقت آن کاملاً از سیستم حذف شدهاند.
دستور همهکارهی docker run
دستور docker run در واقع ترکیب دو مرحله است: ابتدا کانتینر را میسازد (docker create) و سپس آن را اجرا میکند (docker start). اگر ایمیج در سیستم موجود نباشد، داکر ابتدا آن را از رجیستری دانلود میکند (docker pull).
Flag های حیاتی docker run:
-d(Detached): اجرای کانتینر در پسزمینه (مناسب وبسرورها و دیتابیسها).-it(Interactive + TTY): اتصال ورودی ترمینال به داخل کانتینر (مناسب ورود به شل).--name <name>: اختصاص نام مشخص به کانتینر (بهجای نامهای تصادفی داکر).--rm: حذف خودکار کانتینر بهمحض خروج یا توقف (بسیار مفید برای تستهای موقت).-p <host_port>:<container_port>: انتشار یا نگاشت پورت سرور میزبان به پورت داخل کانتینر.-e <KEY>=<VALUE>: تنظیم متغیرهای محیطی برای پردازش داخل کانتینر.--restart <policy>: سیاست راهاندازی مجدد در صورت کرش یا ریبوت سرور:no: عدم اجرای مجدد خودکار (پیشفرض).always: راهاندازی مجدد در هر شرایطی.unless-stopped: راهاندازی مجدد خودکار، مگر اینکه کاربر صریحاً آن را متوقف کرده باشد.on-failure: راهاندازی مجدد فقط در صورتی که پردازش با خطایی غیر از کد صفر خارج شود.
مثال ۱: اجرای یک وبسرور Nginx در پسزمینه
حالا با زدن دستور زیر در سرور میتوانید پاسخ وبسرور را ببینید:
مثال ۲: اجرای یک شل تعاملی موقت در Alpine Linux
پس از ورود به شل کانتینر میتوانید مشخصات سیستم را بررسی کنید و با exit خارج شوید:
به دلیل وجود flag --rm، پس از تایپ exit، کانتینر بلافاصله از سیستم پاک میشود و منابع دیسک آزاد میگردد.
مدیریت وضعیت کانتینرها
مشاهدهی لیست کانتینرها
کانتینرهای در حال اجرا را با دستور زیر مشاهده کنید:
برای مشاهدهی همهی کانتینرها (شامل متوقفشدهها):
متوقف کردن و شروع مجدد
حذف کانتینرها
کانتینری که در حال اجراست را نمیتوان حذف کرد (مگر با فلگ -f). ابتدا باید متوقف شود:
دستورهای عملیاتی و اشکالزدایی (Debugging)
در کارهای روزمرهی DevOps، توانایی سرک کشیدن به داخل کانتینر و دیدن لاگها برای رفع باگها حیاتی است.
۱. مشاهدهی لاگها (docker logs)
دیدن خروجی استاندارد (stdout و stderr) پردازشهای درون کانتینر:
۲. ورود به داخل کانتینر در حال اجرا (docker exec)
دستور exec به شما اجازه میدهد پردازش جدیدی (مثل شل لینوکس) را داخل کانتینری که قبلاً اجرا شده راهاندازی کنید:
درون کانتینر میتوانید فایلهای پیکربندی را ببینید یا اتصال شبکه را بررسی کنید. برای خروج کافیست exit بزنید (کانتینر اصلی خاموش نخواهد شد).
۳. بررسی جزئیات و متادیتا (docker inspect)
دیدن تمام تنظیمات، آدرس IP، مسیرهای Mount و وضعیت کانتینر با فرمت JSON:
میتوانید با فیلتر --format اطلاعات خاصی مثل آدرس IP کانتینر را استخراج کنید:
۴. نظارت بر مصرف منابع (docker stats)
مشاهدهی مصرف لحظهای رم، پردازنده، ورودی/خروجی شبکه و دیسک کانتینرها شبیه به ابزار top:
۵. کپی کردن فایل بین هاست و کانتینر (docker cp)
پاکسازی فضای دیسک (docker system prune)
با گذشت زمان، کانتینرهای خاموش، ایمیجهای قدیمی بدون نام (Dangling Images) و کشهای بیلد دیسک سرور را پر میکنند. برای پاکسازی امن آنها:
اگر میخواهید تمام والیومهای بیاستفاده و همهی ایمیجهای استفادهنشده نیز کاملاً پاک شوند (با احتیاط استفاده شود):
منابع یادگیری
ویدیو
- آشنایی و کارهای مقدماتی با داکر قسمت یک از سه — جادی — آموزش فارسی آشنایی با مفاهیم و دستورهای مقدماتی داکر
مستندات و مقالات
- Docker Run Reference — راهنمای جامع جزئیات و پارامترهای اجرایی کانتینرها