خانه DevOps کانتینر داکر چیست؟ معرفی صفر تا صد Container DevOps Docker نوشته شده توسط: تیم فنی نیک آموز تاریخ انتشار: ۲۴ مرداد ۱۴۰۳ آخرین بروزرسانی: ۲۶ مرداد ۱۴۰۳ زمان مطالعه: 17 دقیقه ۵ (۱) کانیتنر در داکر مثل یک چمدان جادویی است که هرآن چیزی که برای ساخت برنامه به آن نیاز دارید، در هر کجا دراختیارتان قرار میدهد. Docker که قبلا با اسم «dot-docker» شناخته میشد، یک پلتفرم فوقالعاده است که به شما این امکان را میدهد اپلیکیشنهایتان را بستهبندی کنید و بدون دردسر هماهنگی با نرمافزارهای دیگر، آنها را روی فضای ابری (کلود) اجرا کنید. در این مقاله، به دنیای کانتینرها سفر میکنیم و با داکر، ابزار قدرتمند برای مدیریت کانتینرها، آشنا میشویم. اگر دنبال راهی برای ساده و سریع کردن توسعه و استقرار نرمافزار خود هستید، خواندن این مقاله کمکتان میکند. کانتینر (Container) چیست؟ کانتینر داکر (Docker Container) نوعی واحد استانداردسازی شده از نرمافزار بوده که بستههای کد، کتابخانه و هر آن چیزی که برای اجرای پایدار و پرسرعت اپلیکیشن حین انتقال نیاز دارید، در خود جای داده است. تصور کنید یک جعبه ابزار جادویی دارید که تمام وسایل مورد نیاز برای راهاندازی یک نرمافزار را دارد. این جعبه، از کد برنامه، ابزارهای مورد نیاز برای اجرا، کتابخانههای سیستمی و تنظیمات لازم برخوردار است. جعبه جادویی همان چیزی است که به آن «تصویر کانتینر داکر» میگویند. با اجرای این تصویر، یک «کانتینر» ساخته میشود. این کانتینرها روی سیستمعاملهای لینوکس و ویندوز قابل حمل هستند و فرقی نمیکند روی چه زیرساختی اجرا شوند، همیشه به یک شکل عمل میکنند. کانتینرها نرمافزار را از محیط اطرافش جدا میکنند و باعث میشوند برنامه بهصورت یکپارچه، چه در محیط توسعه و چه در محیط آمادهسازی (استیجینگ) اجرا شود. بادرنظر گرفتن این موضوع، سوال اینجاست که اصلا چه نیازی به استفاده از کانتینر در داکر وجود دارد؟ برای پاسخ به این سوال، اجازه دهید ابتدا ضرورت استفاده از داکر را بررسی کنیم. چرا از داکر استفاده کنیم؟ داکر استاندارد جهانی کانتینرها را تعریف کرده است، به این معنی که برنامه شما میتواند بهراحتی روی هر سیستمی که از داکر پشتیبانی میکند، اجرا شود. کانتینر در داکر از هسته سیستمعامل میزبان استفاده میکنند، بنابراین برای اجرای هر برنامه به یک سیستم عامل جداگانه نیاز نیست. این امر، باعث صرفهجویی در منابع سرور و کاهش هزینههای مربوط به لایسنس میشود. علاوهبراین، برنامهها درون کانتینرها ایمنتر هستند و داکر بالاترین سطح پیش فرض برای جداسازی ایمن را در اختیار شما قرار میدهد. بهطور کلی، استفاده از Docker در ساخت و استقرار اپلیکیشنها مزایای زیادی دارد، از جمله: کش کردن (Caching) گروهی از کانتینرها: این کار باعث افزایش سرعت اجرای مجدد اپلیکیشنها میشود. اشتراکگذاری انعطافپذیر منابع: کانتینرها به صورت بهینه از منابع سیستم استفاده میکنند و امکان اشتراکگذاری انعطافپذیر این منابع را فراهم میآورند. قابلیت ارتقا (Scalability): میتوان تعداد زیادی کانتینر را روی یک میزبان (Host) اجرا کرد. این موضوع باعث میشود اپلیکیشن شما به راحتی قابل ارتقا باشد. اجرای سرویس روی سختافزار ارزانتر: با استفاده از کانتینرها، دیگر نیازی به سرورهای اختصاصی گرانقیمت نخواهید داشت. استقرار سریع، ایجاد آسان نمونههای جدید و مهاجرتهای بهینهتر: کانتینر در داکر باعث میشوند استقرار و راهاندازی اپلیکیشنها بسیار سریعتر و سادهتر شود. سهولت جابجایی و نگهداری اپلیکیشنها: کانتینر در Docker بستههای نرمافزاری مستقلی هستند که جابجایی و نگهداری آنها بسیار آسان است. امنیت بهتر: دسترسی به کد در حال اجرا داخل کانتینر داکر محدود میشود و وابستگیهای نرمافزاری (dependency) کاهش پیدا میکند که منجر به امنیت بالاتر میشود. با در نظر گرفتن این مزایا، میتوانید زیرساخت کانتینری موردنیاز برای ساختن اپلیکیشنها در فضای ابری را راهاندازی کنید. مفاهیم و اصطلاحات کلیدی در داکر داکر به عنوان پلتفرم کانتینرسازی به شما امکان میدهد بهراحتی کانتینر در Docker را بسازید، اجرا و مدیریت کنید. اکنون سراغ اصطلاحات مهم در دنیای Docker میرویم: ایمیج (Image): مانند یک نقشه برای ساخت کانتینر محسوب میشود. این نقشه شامل تمام تنظیمات و ملزومات مورد نیاز برای اجرای برنامه است. کانتینر (Container): کانتینر یک نسخه اجرایی بوده که از روی ایمیج ساخته میشود. وقتی شما یک ایمیج را اجرا میکنید، در واقع یک کانتینر از آن میسازید و برنامه داخل همان کانتینر داکر اجرا میشود . دیمن (Docker Daemon): یک سرویس پسزمینه است که روی سیستمعامل شما اجرا میشود و با فرستادن دستور از طریق رابط کاربری کانتینرها را مدیریت میکند. این سرویس، ایمیجها را دانلود و آپلود کرده، کانتینرها را ساخته، اجرا و توزیع میکند. رابط کاربری (Docker Client): یک ابزار خط فرمان بوده که به شما اجازه میدهد با دیمن Docker ارتباط برقرار کنید و به آن دستور دهید. Docker Hub: مثل یک مخزن بزرگ برای ایمیجهای Docker است. در این مخزن، ایمیجهای بسیاری برای برنامههای مختلف وجود دارد که شما میتوانید از آنها استفاده کنید. البته میتوانید مخزن اختصاصی خودتان را هم داشته باشید و ایمیجهای خودتان را آنجا قرار دهید. راهاندازی و مدیریت کانتینر ها در این بخش بررسی میکنیم چگونه با استفاده از رابط کاربری نرمافزار داکر دسکتاپ، یک کانتینر اجرا کنیم. مراحل اجرا: باز کردن Docker Desktop: اول از همه برنامه Docker Desktop را باز کنید. جستجوی تصویر (Image): بالای صفحه یک نوار جستجو وجود دارد. عبارت welcome-to-docker را تایپ کنید. دریافت تصویر (Pull): بعد از تایپ کردن اسم تصویر، دکمه Pull را بزنید تا Docker آن را دانلود کند. اجرای کانتینر (Run): حالا که تصویر را دانلود کردید، روی دکمه Run کلیک کنید. تنظیمات اختیاری (Optional settings): این بخش اختیاری است و تنظیمات بیشتری را میتوانید از این طریق انجام دهید. نام کانتینر (Container name): شما میتوانید یک اسم دلخواه برای کانتینر داکر خودتان انتخاب کنید. در کادر Container name اسم موردنظرتان را بنویسید، مثلا welcome-to-docker. پورت میزبان (Host port): این قسمت برای تعیین پورت سیستمعامل است تا با کانتینر ارتباط برقرار کنید. مثلا میتوانید عدد ۸۰۸۰ را وارد کنید. اجرا (Run): بعد از اینکه تنظیمات را انجام دادید، دکمه Run را بزنید تا کانتینر اجرا شود. تبریک! شما با موفقیت اولین کانتینر خودتان را اجرا کردید. برای مشاهده تمامی کانتینرهای در حال اجرا، میتوانید به بخش «Containers» در داشبورد داکر مراجعه کنید. در این بخش لیستی از تمامی کانتینرهای در حال اجرا یا متوقف شده را مشاهده خواهید کرد. هر Container در داکر اطلاعاتی را به شما نمایش میدهد که شامل نام، تصویر (ایمیج) پایهای، وضعیت (در حال اجرا یا متوقف)، پورتهای در معرض دید (اختیاری) و شناسه یکتا (ID) آن میشود. به عنوان مثال، یک کانتینر داکر ممکن است یک وبسرور ساده را اجرا کند که یک وبسایت ابتدایی را نمایش میدهد. اما در پروژههای پیچیدهتر، بخشهای مختلف در کانتینرهای جداگانه اجرا میشوند. برای نمونه، ممکن است برای بخش فرانت (نمای کاربری)، بکاند (بخش پردازش) و پایگاه داده، از کانتینرهای مجزا استفاده شود. Docker Desktop به شما این امکان را میدهد تا جنبههای مختلف کانتینر خود را بررسی و با آنها کار کنید. بیایید با هم این کار را انجام دهیم: مدیریت فایل در کانتینر داکر به بخش نمایش کانتینرها (Containers) در داشبورد Docker Desktop بروید. کانتینر داکر مورد نظر خود را انتخاب کنید. روی تب «فایلها» (Files) کلیک کرده تا سیستم فایل ایزوله شده کانتینر را مشاهده کنید. توقف کانتینر در داکر بهطور پیشفرض، کانتینر docker/welcome-to-docker تا زمانی که شما آن را متوقف نکنید، به کار خود ادامه میدهد. برای توقف یک کانتینر در Docker، مراحل زیر را دنبال کنید: به بخش نمایش کانتینرها (Containers) در داشبورد Docker Desktop بروید. کانتینری را که میخواهید متوقف کنید، پیدا کنید. در ستون (Actions)، گزینه (Stop) را انتخاب کنید. با این کار، کانتینر انتخاب شده متوقف میشود. شبکه سازی در داکر؛ اتصال آسان بین کانتینر ها شبکهسازی در داکر به شما این امکان را میدهد که گروهی از کانتینرها را ایجاد کنید تا باهم ارتباط داشته باشند. این شبکه توسط یک گره اصلی به نام مدیر (manager) مدیریت میشود. کانتینرهای درون شبکه داکر میتوانند با رد و بدل بستههای اطلاعاتی با یکدیگر صحبت کنند. شبکه، مجموعهای از دو یا چند دستگاه است که میتوانند بهصورت فیزیکی یا مجازی با هم ارتباط برقرار کنند. شبکه داکر یک شبکه مجازی است که توسط داکر برای برقراری ارتباط بین کانتینرها ساخته میشود. اگر دو کانتینر داکر روی یک میزبان (کامپیوتر) اجرا شوند، بدون نیاز به باز کردن پورتها روی دستگاه میزبان، میتوانند با هم ارتباط برقرار کنند. فرقی نمیکند میزبان شما ویندوز، لینوکس یا ترکیبی از این دو باشد، میتوانید از داکر برای مدیریت شبکه کانتینرتان استفاده کنید. همانطور که در هر شبکهای درایورهایی برای برقراری ارتباط وجود دارد، در شبکه داکر نیز درایورهای شبکه وجود دارند. چندین درایور شبکه بهصورت پیشفرض در داکر موجود است و برخی دیگر را میتوان با کمک افزونهها نصب کرد. برای دیدن لیست شبکههای موجود در داکر میتوانید از دستور زیر استفاده کنید: docker network ls انواع درایور های شبکه در داکر درایورهای شبکه در داکر به شما امکان میدهند که نحوه اتصال کانتینرها به شبکه را کنترل کنید. در اینجا انواع مختلف درایورهای شبکه در داکر همراه با توضیحاتی در مورد هر کدام آورده شده است: درایور شرح bridge این شبکه پیشفرض برای کانتینرهایی است که بدون تعیین نوع خاصی از درایور ساخته میشوند. کانتینرهایی که از درایور bridge استفاده میکنند میتوانند با هم و با میزبان داکر ارتباط برقرار کنند. host در این حالت، کانتینرها مستقیماً روی شبکه سیستم عامل میزبان اجرا میشوند و از همان آدرس IP میزبان استفاده میکنند. این کار باعث میشود که کانتینرها از میزبان جدا نشوند و برای سناریوهایی که نیاز به جداسازی قوی دارند مناسب نیست. none با استفاده از این درایور، هیچ آدرس IP به کانتینر اختصاص داده نمیشود. این نوع شبکه برای کانتینرهایی که نیازی به برقراری ارتباط با شبکه ندارند مناسب است. overlay این درایور شبکهای ایجاد میکند که امکان اتصال بین چندین موتور Docker را فراهم میکند. این شبکه برای سرویسهای Docker Swarm که نیاز به برقراری ارتباط با یکدیگر دارند مفید است. ipvlan این درایور به شما امکان میدهد تا کنترل کاملی بر روی آدرسدهی IP نسخه ۴ و ۶ برای کانتینرها داشته باشید. macvlan با استفاده از این درایور میتوان یک آدرس MAC اختصاصی به هر کانتینر اختصاص داد. این کار میتواند برای سناریوهایی که نیاز به اتصال مستقیم کانتینرها به شبکه فیزیکی دارند مفید باشد. Docker Compose مدیریت چند کانتینر داکر کامپوز ابزاری متنباز است که به شما امکان میدهد کانتینرهای خود را بهراحتی با استفاده از یک تعریف ساخت (build definition) راهاندازی و مدیریت کنید. شما مجموعهای از وابستگیهای خاص پروژه و وظایف زمان ساخت را تعریف میکنید که هر Container در داکر را ساخته و اجرا خواهد کرد. این ابزار همچنین از دستوراتی برای مدیریت کل چرخه عمر برنامه شما برخوردار است، از جمله: راهاندازی، توقف و بازسازی سرویسها مشاهده وضعیت سرویسهای در حال اجرا مشاهده خروجی لاگ سرویسهای در حال اجرا اجرای یک دستور خاص روی یک سرویس مزایای کلیدی داکر کامپوز مزیت شرح کنترل ساده تعریف و مدیریت کل برنامه در یک فایل YAML به جای دستورات پیچیده برای مدیریت تک تک کانتینرها همکاری موثر اشتراک آسان فایل پیکربندی برای هماهنگی بهتر بین توسعهدهندگان، تیم عملیات و سایر افراد پروژه توسعه سریع برنامه صرفهجویی در زمان راهاندازی مجدد محیط برنامه با استفاده از کش قابلیت حمل بالا امکان شخصیسازی تنظیمات برای محیطهای مختلف با استفاده از متغیرها جامعه کاربری گسترده دسترسی به منابع آموزشی و پشتیبانی فنی قوی با داکر کامپوز میتوانید پروژههای خود را بهسادگی مدیریت کرده و در زمان صرفهجویی کنید. ذخیره سازی و مدیریت داده ها در داکر وقتی فایلی داخل یک کانتینر داکر ایجاد میکنید، بهصورت پیشفرض روی یک بخش قابل تغییر از آن کانتینر ذخیره میشود. یعنی: دائمی نیست: اگه کانتینر را خاموش کنید، اطلاعات هم از بین میرود. دسترسی سخت: اگر برنامه دیگری به آن نیاز داشته باشد، بیرون کشیدن این اطلاعات کار راحتی نیست. قفلشده روی میزبان: اطلاعات روی همان سیستمی که کانتینر اجرا میشود، قفل شده و بهراحتی قابل انتقال به جای دیگر نیست. سرعت پایینتر: نوشتن روی این بخش قابل تغییر، به یک درایور مخصوص نیاز دار۸ه که باعث میشود سرعتش نسبت به حالت ذخیرهسازی روی سیستم میزبان (با استفاده از volumes) پایینتر بیادد. اما نگران نباشید! Docker دو راه حل دارد تا اطلاعات را بتوانید حتی بعد از خاموش کردن کانتینر، روی سیستم میزبان نگه دارید: Volumes (حجمها): یک روش عالی برای ذخیرهسازی اطلاعات بوده که حتی بعد از خاموش شدن کانتینر، روی سیستم میزبان باقی میماند. Bind Mounts (اتصالهای بایند): با این روش میتوانید یک پوشه مشخص از سیستم میزبان را به داخل Container در داکر متصل کنید و اطلاعات را بهطور مستقیم روی همان پوشه ذخیره کنید. علاوهبراین، Docker اطلاعات را بهصورت موقت (فقط تا زمان روشن بودن کانتینر) داخل حافظه سیستم میزبان ذخیره میکند. این روش برای اطلاعاتی مناسب است که به آن نیاز ندارید. بهطور کلی، Volume گزینه بهتری برای توسعه برنامههای جدید داکری است. Volumeها قابل اشتراکگذاری هستند، توسط داکر مدیریت میشوند و از سیستمعامل میزبان مستقل هستند. Bind Mount زمانی مناسب است که نیاز به سرعت بالا داشته باشید و بخواهید بهطور مستقیم به یک پوشه خاص روی هاست دسترسی پیدا کنید. امنیت در داکر؛ ۶ مورد از بهترین شیوه های امن سازی کانتینر ها امنیت در داکر کل چرخه اجرای برنامههای کانتینری را در برمیگیرد، از زمان ساخت تا اجرا و مدیریت آنها. این امنیت، شامل موارد زیر میشود: محیط اجرای کانتینر: خود محیط اجرای کانتینرها باید از نظر امنیتی پیکربندی درستی داشته باشد. ایمنی تصاویر پایه: تصاویری که برنامه شما براساس آنها ساخته میشود، باید ایمن و بهروز باشند. امنیت Docker Daemon: هسته اصلی داکر که مدیریت کانتینرها را برعهده دارد، باید ایمنسازی شود. امنیت Dockerfile: دستورات موجود در این فایل که نحوه ساخت برنامه را مشخص میکنند، نباید آسیبپذیری امنیتی ایجاد کنند. درادامه، شما را با بهترین شیوههای امنسازی کانتینر در داکر آشنا خواهیم کرد. ۱. اجازه دسترسی روت به کانتینر ها ندهید شاید اجرای یک کانتینر داکر با دسترسی روت (root) سادهترین راه بهنظر برسد، اما این کار در محیطهای واقعی اصلا توصیه نمیشود. داکر بهصورت پیشفرض کانتینرها را با دسترسی روت اجرا نمیکند و بهتر است اصلا این دسترسی را فعال نکنید. در صورتی که از کوبرنتیز استفاده میکنید، با ایجاد یک خط مشی امنیتی برای Podها (pod security policy) با دستور MustRunAsNonRoot، جلوی راهاندازی کانتینرها با دسترسی روت را بهطور کامل بگیرید. ۲. از رجیستریهای معتبر برای تصاویر کانتینری استفاده کنید رجیستریهای کانتینری به شما امکان میدهند تصاویر موردنیاز خود را بهراحتی دانلود کنید. اما همین راحتی میتواند یک ریسک امنیتی هم باشد. به همین دلیل، بهتر است همیشه از رجیستریهای معتبر مانند Docker Trusted Registry استفاده کنید. قبل از استفاده از هر رجیستری، امنیت آن را بررسی کنید و برای محافظت در برابر حملات اینترنتی، آن را پشت فایروال قرار دهید. اجازه دانلود یا آپلود تصاویر به افراد ناشناس را ندهید. با راهاندازی کنترل دسترسی مبتنی بر نقش (RBAC) مشخص کنید چه کاربرانی به چه منابعی دسترسی دارند و دسترسیهای غیرمجاز را مسدود کنید. این کار ممکن است کمی زمانبر باشد، اما جلوی نفوذ به رجیستری شما را خواهد گرفت. ۳. مصرف منابع کانتینرها را محدود کنید داکر به شما این امکان را میدهد که برای هر کانتینر، سهمیه منابع مانند حافظه و CPU را مشخص کنید. این کار باعث میشود تا یک کانتینر، منابع کل سیستم را به هدر ندهد و کارایی محیط داکر را بالا میبرد. همچنین با محدود کردن منابع، جلوی حملاتی که قصد دارند با مصرف بالای منابع، سرویسهای شما را مختل کنند، گرفته میشود. ۴. تصاویر خود را اسکن کنید برای امنیت بیشتر، تصاویر داکر خود را بهطور مرتب اسکن کنید. اسکن کردن تصاویر در زمان دانلود و بهصورت دورهای، باعث میشود تا آسیبپذیریهای احتمالی شناسایی و برطرف شوند. با اسکن دورهای، تصاویر بهروز شده و فایلها و پوشههای حیاتی بررسی میشوند. ۵. شبکه ها و درگاه های ارتباطی (API) خود را ایمن کنید کانتینر داکر از طریق شبکه و درگاههای ارتباطی (API) با هم ارتباط برقرار میکند. این ارتباط برای عملکرد صحیح کانتینر در Docker ضروری است، اما نیازمند مانیتورینگ دقیق و داشتن خط مشیهای امنیتی مناسب است. این منابع را به گونهای طراحی کنید که مانیتورینگ را راحت کنند و امکان مسدودسازی سریع حملات را فراهم آورند. ۶. مانیتورینگ کانتینر های داکر مانیتورینگ، بخش جداییناپذیر هر استراتژی امنیتی است. در یک برنامه کانتینریزه شده، به دلیل تعداد زیاد اجزای مختلف و استفاده از کامپوننتهای غیرقابل تغییر، مانیتورینگ کمی چالشبرانگیز است. ابزارهای تخصصی مانیتورینگ کانتینرها به شما کمک میکنند تا دید بهتر و جامعتری نسبت به عملکرد برنامههای کانتینریزه شده خود داشته باشید. جمع بندی؛ کانتینر های داکر، راهکار انقلابی توسعه و استقرار نرم افزار کانتینر داکر واحد سبکی از نرمافزار بوده که شامل تمام وابستگیهای لازم برای اجرا، مانند کد، کتابخانهها، سیستمعامل و تنظیمات است. این کانتینرها بهصورت ایزوله اجرا میشوند و از یکدیگر و از سیستم میزبان جدا شدند. این امر مزایای متعددی دارد، از جمله: قابلیت تکرارپذیری: کانتینرها همیشه به یک شکل اجرا میشوند، فارغ از محیطی که در آن اجرا میشوند. پرتابل بودن: کانتینرها را میتوان به راحتی بین محیطهای مختلف، مانند لپتاپ، سرورهای ابری و یا دیتاسنترها، جابجا کرد. ایزولاسیون: کانتینرها از یکدیگر جدا شدند، که این امر باعث میشود که یک کانتینر معیوب بر سایر کانتینرها یا سیستم میزبان تاثیر نگذارد. قابلیت مقیاسپذیری: کانتینرها را میتوان به سرعت و به صورت خودکار راهاندازی و متوقف کرد. این ویژگی امکان مقیاسدهی آسان برنامهها را در زمان نیاز فراهم میکند. کارایی: کانتینرها از هسته سیستمعامل میزبان به اشتراک میگذارند. این رویکرد باعث میشود آنها کارآمدتر از ماشینهای مجازی سنتی باشند. چه رتبه ای میدهید؟ میانگین ۵ / ۵. از مجموع ۱ اولین نفر باش معرفی نویسنده مقالات 366 مقاله توسط این نویسنده محصولات 0 دوره توسط این نویسنده تیم فنی نیک آموز مقالات مرتبط ۰۹ مرداد DevOps توزیع لینوکس چیست؟ همراه با معرفی ۱۰ نمونه پرکاربرد انواع نسخه های لینوکس تیم فنی نیک آموز ۲۹ تیر DevOps تفاوت داکر با ماشین مجازی چیست؟ بررسی ضروریترین فاکتورها تیم فنی نیک آموز ۲۱ تیر DevOps راهنمای کامل POD در کوبرنتیز : از راهاندازی تا دیباگ! تیم فنی نیک آموز ۱۶ فروردین DevOps مسیر شغلی دواپس (DevOps) | چگونه مهندس دواپس شویم؟ تیم فنی نیک آموز دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ