مدیریت کانتینر داکر، به معنی مدیریت متعلقات یک نرمافزار در داکر و بدون نیاز به ساخت سیستمعامل مجازی است. متعلقاتی که داخل کانتینرها دستهبندیشده و شامل کدها، کتابخانهها، ابزارهای سیستمی و… است. مدیریت این وابستگیها، با دستورات پایهای داکر شروعشده و به ابزارهای پیشرفتهای مانند Docker Compose و Docker Swarm و تکنیکهایی مثل شبکهی بریج (Bridge) میرسد. در این مطلب ابتدا نکات کلیدی و پایهای کنترل کانتینر داکر را میبینید. بعد با نکات پیشرفتهتری آشنا میشوید که حتی مدیریت پیچیدگیها را به طور مؤثری راحتتر میکند.
کانتینرها چطور بهکمک داکرها مدیریت میشود؟
داکر یک پلتفرم متنباز برای ساخت، اجرا و مدیریت کانتینر (Container Management) است. کانتینر (کانتینر داکر) فضایی ایزوله است که تمام فایلها، کتابخانهها و وابستگیهای لازم برای اجرای یک برنامه را در دل خود گنجاندهاست. اما تأمین ابزارها و زیرساختهای لازم برای راهاندازی، اجرا و مدیریت کانتینرها، به عهدهی داکر (Docker) است.
در واقع این داکر است که یک بسته نرمافزاری کامل را طوری کپسوله میکند که برای اجرا شدن، نیاز مستقیمی به زیرساختها نداشتهباشد. به عبارت دیگر، در داکر یک برنامه به میکروسرویسها تجزیه میشود که هر کدام مسئولیت اجرای گوشهای از برنامه را دارد. سپس هر میکروسرویس بههمراه تمام ملزوماتش در یک یا چند کانتینر قرار میگیرد.
داکر، بر خلاف ماشینهای مجازی که اساس کارشان ساختن سیستمعاملهای مجازی است، به سیستمعاملهای مجازی نیازی ندارد. داکر بهکمک تکنیکهایی مانند فضای نام (Namespaces) و گروههای کنترل (Control Groups یا cgroups)، منابع سیستم را برای هر کانتینر، تأمین و ایزوله میکند. به این ترتیب کانتینرها به واسطه داکرها، از هستهی سیستمعامل اصلی استفاده میکند؛ اما همزمان در یک محیط کاملاً ایزوله قرار دارد.
مدیریت کانتینر داکر در سطح مبتدی شامل اموری مانند استفاده از دستورات داکر برای کارهای پایهای، ذخیره دادهها در داکرهاب (Docker hub)، استفاده از داکرفایل (Dockerfile) برای ساخت تصاویر، عیبیابی بهکمک داکر لاگها و استفاده از داکر والیوم (Docker Volumes) برای ذخیرهسازی دادهها است. در سطح حرفهای نیز با تکنیکهایی مانند استفاده از ابزارهای اتوماسیون (مانند Docker Compose و Docker Swarm)، محدودسازی منابع، استفاده از قابلیتهایی مثل Health Checks و… سروکار دارید.
مطلب مفید: کانتینر داکر چیست؟
مدیریت کانتینر داکر برای مبتدیها
روشهای مدیریت داکر و تکنیکهایی که میتوانید به کار بگیرید، به میزان دانش و تجربهی شما بستگی دارد. به همین خاطر نیز ابتدا نکاتی را میبینید که بهعنوان یک تازهکار باید در مورد مدیریت کانتینرها توسط داکر بدانید.
1- آشنایی با دستورات داکر
کنترل کانتینر داکر در سطح جزئیات و کارهای روزانه، با دستورات داکر بهراحتی و بهسرعت قابل اجرا است. بنابراین بهعنوان یک مبتدی بهترین کار این است که با دستورات پایهای و مهم داکر برای مدیریت کانتینرها آشنا شوید.
با دستوراتی مانند docker run، docker ps، docker stop و docker rm میتوانید کانتینرها را اجرا کرده و روی آنها نظارت داشته باشید. این دستورات پایهای را که پیشوند docker دارد، باید در ترمینال یا خط فرمان سیستمعامل وارد کنید.
2- استفاده از داکرهاب برای تصاویر آماده
تصاویر داکر (Docker Images) الگوی اصلی ساخت کانتینرها است. به جای این که این تصاویر را از ابتدا ایجاد کنید یا برای دانلود آنها به سراغ منابع غیرمعتبر بروید، میتوانید از داکرهاب (Docker Hub) استفاده کنید.
داکرهاب (Docker Hub)، یک منبع ابری عمومی مثل گیتهاب (gitHub) است. با این تفاوت که به طور خاص به تصاویر داکر اختصاص دارد. توسعهدهندگان مختلف انواع تصاویر داکر آماده (مثل nginx، mysql و node.js) را در این مخزن بارگذاری میکنند و شما هم میتوانید از آنها استفاده کنید. این تصاویر اغلب بهصورت دائم بهروزرسانی شده و امنیت بالایی دارد.
مطلب مفید: حذف تصاویر داکر
3- ساخت داکرفایل و استفاده از آن برای ساخت تصاویر
داکرفایل (Dockerfile) یک فایل متنی ساده حاوی مجموعهای از دستورات برای ساخت یک تصویر داکر است. بهکمک این فایل میتوانید بهصورت خودکار و تکرارپذیر، محیطی را ایجاد کنید که تمام وابستگیها، تنظیمات و پیکربندیهای لازم برای اجرای برنامه داشته باشد.
مدیریت کانتینر داکر بدون ساخت داکرفایل هم ممکن است. اما مزایای ساخت و استفاده از این فایل عبارت است از:
- خودکارسازی فرایند ساخت تصاویر به جای ساخت دستی آنها
- تضمین این که هر بار که تصویری از داکرفایل ساخته میشود، محیطی یکسان برای اجرای برنامه به وجود میآید (بدون نگرانی از ناسازگاریهای سیستم)
- اشتراکگذاری بسیار راحت آن برای ساخت تصاویری همشکل در سیستمهای مختلف
- تعریف راحت تنظیمات خاص (مانند جزئیات نصب بستهها و ایجاد فایلهای لازم)
- امکان کنترل نسخههای مختلف تصویر با اعمال تغییرات کوچک در داکرفایل
4- عیبیابی بهکمک داکر لاگها
یکی از راحتترین و بهترین روشهای مدیریت داکر در حوزهی عیبیابی برنامه، مشاهده و آنالیز داکر لاگها (Docker logs) است. میتوانید با دستور زیر لاگهای کانتینر را ببینید و مشکلات احتمالی را شناسایی کنید:
docker logs my_container
5- استفاده از داکر والیوم برای ذخیرهسازی دادهها
داکر والیوم (Docker Volumes) روشی برای ذخیرهسازی دادهها بهصورت پایدار و خارج از کانتینرها است. وقتی دادهها را داخل یک کانتینر ذخیره میکنید، با توقف یا حذف کانتینر، این دادهها هم ازبینمیرود. اما با ذخیرهی آنها در داکر والیوم، این دادهها همواره و در هر شرایطی باقیمیماند. ضمن این که میتوانید چند کانتینر را به یک والیوم متصل کنید تا از دادههای مشترک استفاده کند.
6- مدیریت تصاویر داکر با تگها
استفاده از تگها (Tags) برای تصاویر داکر یک تکنیک کارآمد در مدیریت و سازماندهی تصاویر است. با تگها میتوانید نسخههای مختلف یک تصویر (مانند v1.0 یا v1.1) را دستهبندی کرده و بهراحتی بین آنها جابهجا شوید.
برای تعریف تگ، کافی است موقع ساخت تصویر، از گزینهی -t استفاده کنید. مانند کد زیر که در آن تگ myapp:v1.0 برای تصویری تعریفشده که قرار است ساختهشود:
docker build -t myapp:v1.0 .
مدیریت کانتینر داکر برای حرفهایها
اگر از سطح مبتدی عبور کردهاید و میخواهید کانتینرها را به روشهایی بهینهتر و راحتتر مدیریت کنید، نکات زیر را در نظر داشتهباشید. با رعایت این نکات، بهترین نتیجه را از معماری کانتینرهای داکر میگیرید.
1- استفاده از ابزارهای مدیریت کانتینر
ابزارهای Docker در پروژههای بزرگتر و پیچیدهتر، نقش اول مدیریت کانتینرها را بازی میکند. مهمترین ابزارهایی که استفاده از آنها بخش اساسی مدیریت کانتینرها محسوب میشود، شامل موارد زیر است:
- Docker Compose: ابزاری است برای مدیریت چند کانتینر بهصورت همزمان که بهواسطه آن میتوانید تمام سرویسهای یک برنامه را در یک فایل YAML تعریف کنید. راهاندازی، توقف و مدیریت کانتینرها بهکمک این ابزار، بسیار سادهتر است.
- Docker Swarm: کاربرد اصلی این ابزار، ایجاد کلاسترهای داکر و توزیع کانتینرها بین چند سرور است. به این ترتیب میتوانید بار کاری را بین کانتینرها متعادل کرده و در صورت بروز مشکل در یک کانتینر، آن را بهطور خودکار جایگزین کنید. Docker Swarm یکی از سادهترین ابزارهای مدیریتی داکر است که برای پروژههای کوچک تا متوسط کارایی بیشتری دارد.
- Kubernetes: این ابزار شباهت زیادی با Docker Swarm دارد. اما برای پروژههای بزرگتر و برای تعداد کانتینرهای بیشتر کارآمدتر است. از طرفی امکانات پیشرفتهتری هم برای خودکارسازی و مدیریت حجم کاری دارد.
2- محدود کردن منابع
محدود کردن منابع (CPU، RAM و حافظهی دیسک) امری اختیاری است؛ اما این کار را بهشدت توصیه میکنیم. این محدودسازی شامل تعریف سقف حافظه قابل استفاده، محدودیت تعداد پردازندههای CPU، اولویت استفاده از CPU و حافظهی دیسک و… میشود.
این کار کانتینرها را از استفاده نامحدود از منابع منع کرده و به این ترتیب بهکارگیری منابع را بهینه میکند. بهخصوص اگر با برنامههای چندکانتینری بزرگ سروکار دارید، با همین تکنیک ساده میتوانید مطمئن شوید که هیچ کانتینری باعث اختلال در عملکرد سایر کانتینرها نمیشود.
3- بررسی سلامت کانتینرها با Health Checks
مدیریت کانتینر داکر شامل بررسی وضعیت سلامت کانتینرها نیز میشود که بهلطف قابلیت Health Checks این کار بهطور خودکار قابل انجام است. اگر داکر مشکلی را در یک کانتینر تشخیص دهد، با روشهای مختلف (مانند راهاندازی مجدد یا اطلاع به ارکستراتورهایی مثل Kubernetes یا Docker Swarm) با مشکل برخورد میکند. به این ترتیب سرویسها همواره پایدار و در دسترس است. این قابلیت بهراحتی و با دستور HEALTHCHECK در Dockerfile فعال میشود.
4- استفاده از تصاویر بهینه
تصاویر داکر اساس کار کانتینرها است. بنابراین استفاده از تصاویر سبک و بهینه، زمان استقرار (Deployment) را تا حد زیادی کاهش میدهد. همینطور صرفهجویی در فضای ذخیرهسازی و کاهش پهنای باند را هم بههمراه دارد. بهترین روشهای بهینهسازی این تصاویر عبارت است از:
- استفاده از تصاویر پایهی کمحجم (مثل استفاده از Alpine Linux با چند مگابایت حجم، به جای تصویر پایهی Ubuntu با حدود چندصد مگابایت حجم).
- ساخت تصاویر بهصورت Multi-Stage Builds (در این تکنیک کدهای پایهای و ابزارهای اضافی در مراحل ابتدایی تصویر قرار میگیرد. سپس فقط موارد ضروری برای اجرای نهایی برنامه به تصویر اصلی منتقل میشود).
- اجتناب از ساخت لایههای غیرضروری در تصویر
- پاک کردن کش و فایلهای موقت بعد از نصب متعلقات و کتابخانهها
- به حداقل رساندن لایهها با نوشتن دستورات فکرشده و حداقلی (هر دستور در Dockerfile یک لایه جدید ایجاد میکند).
5- مانیتورینگ کانتینر داکر با ابزارهای پیشرفته
ابزارهای مدیریت کانتینر میتواند مسئولیت مانیتورینگ دائم کانتینرها را هم به عهده بگیرد و این کار را دقیقتر و سادهتر پیش برده و باعث بهبود عملکرد و پایداری سرویسها شود. Prometheus و Grafana دو ابزار پرکاربرد برای مانیتورینگ و نظارت بر کانتینرهای داکر است.
Prometheus متریکهای مرتبط با کانتینرها را به طور خودکار جمعآوری کرده و اطلاعات دقیقی از وضعیت و منابع مصرفی هر کانتینر ارائه میدهد. Grafana نیز بهکمک Prometheus، دادهها را بهصورت گرافیکی نمایش میدهد. به این ترتیب، مدیر سیستم تغییرات منابع و ناهنجاریهای احتمالی را بهراحتی هر چهتمامتر، شناسایی میکند.
6- شبکهسازی کانتینرها بهکمک شبکه Bridge
در کنترل کانتینر داکر باید بدانید که هر کانتینر در داکر یک آدرس IP دارد و بهکمک همین IP با کانتینرهای دیگر برقرار کرده و یک شبکه را میسازد. ساخت و مدیریت این شبکه، میتواند به روشهایی قدیمی مثل Link انجام شود. اما توصیهی ما این است که تکنیکهای مدرنی مثل شبکهی Bridge را جایگزین روشهای قدیمی کنید.
در روش Link یک وابستگی مستقیم بین دو کانتینر ایجاد میشود که استقلال کانتینرها را کم کرده و آنها وابستهتر میکند. بهطوری که اگر یکی از کانتینرها غیرفعال یا حذف شود، کانتینر دیگر نیز تحت تأثیر قرار میگیرد.
اما در شبکهی Bridge کانتینرها بهصورت مستقل به یک شبکه مشترک متصل میشود و هر کدام یک آدرس IP منحصربهفرد دریافت میکند. در این ساختار، کانتینرها با یکدیگر و با منابع خارجی بهراحتی ارتباط برقرار میکند (بدون این که وابستگی مستقیمی بین کانتینرها باشد).
جمعبندی
مدیریت کانتینر داکر، از ابتداییترین مفاهیم، مانند استفاده از دستورات پایهای شروع میشود و در سطوح بالاتر، به ابزارهای پیشرفته برای شبکهسازی، ذخیرهسازی، مانیتورینگ و… میرسد. با این تکنیکها میتوانید از پروژههای کوچک با چند کانتینر محدود شروع کنید و به پروژههایی در مقیاس بزرگ با کلاسترهای شلوغ برسید و حتی چندین نسخه از یک برنامه را به طور همزمان و کاملاً مجزا برای اهدافی مثل تست A/B اجرا کنید.
سؤالات متداول
1. نقش داکر در مدیریت کانتینر داکر چیست؟
داکر پلتفرمی است که برای هر کانتینر، یک محیط ایزوله و مستقل را فراهم میکند که توسعهدهندگان در آن میتوانند تمام وابستگیهای یک برنامه را در قالب یک بسته (تصویر) مدیریت کنند.
2- چرا باید از Docker Compose استفاده کنیم؟
Docker Compose ابزاری است که امکان تعریف و اجرای چندین کانتینر وابسته را فراهم میکند. این ابزار بهویژه در محیطهای توسعه و تست کاربردی است و مدیریت چند سرویس و وابستگیهایشان را سادهتر میکند.
3- چه تفاوتی بین Docker Swarm و Kubernetes وجود دارد؟
هر دو ابزارهایی برای مدیریت خودکار کانتینرها است. اما Kubernetes امکانات بیشتری برای مقیاسدهی و اتوماسیون دارد و برای محیطهای پیچیده و بزرگتر، مناسبتر است.
4- از دستورات داکر برای کدام امور مدیریت کانتینر داکر استفاده میشود؟
ساخت و مشاهدهی وضعیت کانتینرها، مدیریت منابع، مدیریت ذخیرهسازی در Volumes، مدیریت شبکههای کانتینری، مانیتورینگ اولیهی لاگها، ساخت تصاویر و پاکسازی کانتینرها و تصاویر.
5- آیا Volumes در Docker Compose پشتیبانی میشود؟
بله، Docker Compose از Volumes پشتیبانی میکند و میتوانید آنها را در فایل docker-compose.yml تعریف کنید.
بدون دیدگاه