داکر برای مبتدیان
- بهدست: مدیر
- دستهبندی: علوم کامپیوتر و الگوریتم

داکر برای مبتدیان؛ هر آنچه که باید بدانید: Docker یک پلت فرم باز برای توسعه، حمل و نقل و اجرای برنامه ها است. داکر شما را قادر می سازد تا برنامه های کاربردی خود را از زیرساخت خود جدا کنید تا بتوانید نرم افزار را به سرعت تحویل دهید. با داکر ، می توانید زیرساخت خود را به همان روشی که برنامه های خود را سرپرستی می کنید، مدیریت کنید.
داکر برنامه های بسته بندی شده ای به نام کانتینر (containers) ایجاد می کند. هر کانتینر یک محیط ایزوله شبیه به ماشین مجازی (Virtual Machine) فراهم می کند. برخلاف VM ها، کانتینرهای Docker یک سیستم عامل کامل را اجرا نمی کنند. آنها هسته هاست شما را به اشتراک می گذارند و در سطح نرم افزار مجازی سازی می کنند.
مبانی داکر
Docker به یک ابزار استاندارد برای توسعه دهندگان نرم افزار و مدیران سیستم تبدیل شده است. این یک روش منظم برای راه اندازی سریع برنامه ها بدون تأثیر بر بقیه سیستم شما است. شما می توانید یک سرویس جدید را با یک دستور اجرای docker اجرا کنید.
کانتینرها همه چیزهایی را که برای اجرای یک برنامه لازم است، از وابستگیهای بسته سیستمعامل گرفته تا کد منبع شما، در خود گنجاندهاند. شما مراحل ایجاد کانتینر را به عنوان دستورالعمل در Dockerfile تعریف می کنید. داکر از Dockerfile برای ساخت یک تصویر استفاده می کند.
تصاویر نرم افزار موجود در کانتینرها را تعریف می کنند. این تقریباً معادل راه اندازی یک VM با ISO سیستم عامل است. اگر یک تصویر ایجاد کنید، هر کاربر Docker میتواند برنامه شما را با اجرای docker اجرا کند.
داکر چگونه کار می کند؟
کانتینرها از ویژگی های هسته سیستم عامل برای ارائه محیط های مجازی سازی شده استفاده می کنند. ایجاد کانتینرها از ابتدا با دستوراتی مانند chroot امکان پذیر است. این یک فرآیند را با یک دایرکتوری اصلی (root directory) مشخص به جای ریشه سیستم شروع می کند. اما استفاده مستقیم از ویژگیهای کرنل (Kernel)، مشکل، ناامن و مستعد خطا است.
داکر یک راه حل کامل برای تولید، توزیع و استفاده از کانتینر است. نسخههای Docker مدرن از چندین مؤلفه مستقل تشکیل شدهاند. اول، Docker CLI وجود دارد، که شما با آن در ترمینال خود تعامل دارید. CLI دستورات را به Daemon Docker ارسال می کند. این می تواند به صورت محلی یا روی یک میزبان راه دور اجرا شود. دیمون مسئول مدیریت کانتینرها و تصاویری است که از آنها ایجاد شده اند.
جزء نهایی Container Runtime نامیده می شود. زمان اجرا ویژگی های هسته را برای راه اندازی کانتینرها فراخوانی می کند.داکر با زمان های اجرا که به مشخصات OCI پایبند هستند سازگار است. این استاندارد باز امکان همکاری بین ابزارهای مختلف کانتینری را فراهم می کند.
وقتی برای اولین بار شروع به کار می کنید، نیازی به نگرانی زیادی در مورد عملکرد داخلی داکر ندارید. نصب داکر بر روی سیستم شما هر آنچه را که برای ساخت و اجرای کانتینر نیاز دارید در اختیار شما قرار می دهد.
ماشین های مجازی و تکامل داکر
مدتها پیش، قبل از معرفی Docker و کانتینرها، شرکتهای بزرگ سرورهای زیادی میخریدند تا مطمئن شوند خدمات و تجارت آنها از بین نمیرود. این فرآیند معمولاً به این معنی بود که شرکتها سرورهای بیشتری از میزان مورد نیاز خریداری میکردند که بسیار گران بود. اما آنها باید این کار را انجام میدادند، زیرا با افزایش تعداد کاربران به سرورهایشان، میخواستند مطمئن شوند که میتوانند به خوبی بدون هیچ گونه قطعی خدمات مورد نیاز کاربران را در اختیارشان
سپس ما VMware و IBM را که (هنوز بحثی که چه کسی آن را اول معرفی کرد, وجود دارد) مجازی سازی را معرفی کردند داشتیم که به ما اجازه می داد چندین سیستم عامل را روی یک میزبان اجرا کنیم. این خصوصیت می توانست همه چیز را تغییر دهد اما به نظر می رسید که با هسته های متعدد و سیستم عامل ها بسیار گران باشد.
بنابراین به سرعت به سمت کانتینرسازی مدرن پیش می رویم.ما شرکتی به نام Docker داریم که بسیاری از مشکلات را حل می کند.
چرا بسیاری از مردم از داکر استفاده می کنند؟
کانتینرها به دلیل اینکه بسیاری از چالش های رایج در توسعه نرم افزار را حل می کنند,بسیار محبوب شده اند. توانایی یک بار کانتینری کردن و اجرا کردن آن در همه جا,شکاف بین محیط توسعه و سرورهای تولیدی شما را کاهش می دهد.
استفاده از کانتینرها به شما این اطمینان را می دهد که هر محیطی یکسان است. اگر یک عضو جدید در تیم خود دارید، آنها فقط نیاز به اجرا کردن داکر دارند تا نمونه توسعه خودشان را راهاندازی کنند. هنگامی که سرویس خود را راه اندازی می کنید، می توانید از تصویر Docker خود برای استقرار در تولید استفاده کنید.
داکر راحت تر از یک ماشین مجازی تمام عیار است. ماشین های مجازی ابزارهای همه منظوره ای هستند که برای پشتیبانی از هر حجم کاری ممکن طراحی شده اند. در مقابل، کانتینرها سبک وزن، خودکفا هستند و برای موارد دور ریختنی مناسب تر هستند. از آنجایی که داکر هسته میزبان را به اشتراک می گذارد، کانتینرها تأثیر ناچیزی بر عملکرد سیستم دارند. زمان راه اندازی کانتینر تقریباً آنی است، زیرا شما فقط فرآیندها را شروع می کنید، نه کل سیستم عامل.
Docker توسعه و برنامه ها را آسان میکند. این بدان معناست که برنامهها بدون توجه به اینکه کجا هستند و روی چه دستگاهی اجرا میشوند یکسان اجرا میشوند.
کانتینرهای داکر را میتوان تقریباً روی هر ماشینی بدون هیچ مشکلی در سازگاری مستقر کرد، بنابراین نرمافزار شما در سیستم باقی میماند، استفاده از نرمافزار را سادهتر، کار کمتری برای توسعه، و نگهداری و استقرار آسانتر میکند. به بیان ساده، روزهای “این در حال کار بر روی دستگاه من است” مدت ها گذشته است.
یک توسعهدهنده معمولاً با دسترسی به Docker Hub، یک مخزن ابری آنلاین (online cloud repository) از کانتینرهای Docker، شروع میکند و یکی را که حاوی یک محیط از پیش پیکربندیشده برای زبان برنامهنویسی خاص خود، مانند Ruby یا NodeJS، با تمام فایلها و چارچوبهای مورد نیاز برای دریافت است، میکشد. Docker یکی از ابزارهایی است که واقعاً به شعار خود یعنی “ساخت، ارسال و اجرا” عمل می کند.
در سراسر جهان و صنعت، بسیاری از شرکت ها و موسسات از Docker برای سرعت بخشیدن به فعالیت های توسعه خود استفاده می کنند. PayPal اکنون بیش از ۷۰۰ برنامه کاربردی دارد و همه آنها را به برنامه های مبتنی بر کانتینر تبدیل کرده است. آنها ۱۵۰ هزار کانتینر را اجرا می کنند و این به آنها کمک کرده تا بهره وری توسعه دهندگان خود را تا ۵۰ درصد افزایش دهند.
MetLife، نمونه عالی دیگر، صرفه جویی زیادی در زیرساخت خود انجام داد زیرا آنها قادر بودند از سیستم عامل های کمتری برای مدیریت برنامه های بیشتر استفاده کنند. این امر آنها توانستند در کاهش هزینه های زیرساختی صرفه جویی کنند. پس از انتقال به داکر، MetLife شاهد کاهش ۷۰ درصدی هزینههای VM، ۶۷ درصد کاهش CPU، ۱۰ برابر کاهش بهره برداریCPU و کاهش ۶۶ درصدی هزینه ها بود.
چرا داکر اینقدر محبوب شده است؟
داکر نوعی مجازیسازی است، اما برخلاف ماشینهای مجازی، منابع مستقیماً با میزبان به اشتراک گذاشته میشوند. این به شما امکان می دهد تا بسیاری از کانتینرهای داکر را اجرا کنید که در آن فقط می توانید چند ماشین مجازی را اجرا کنید.
یک ماشین مجازی باید مجموعه ای از منابع مانند فضای HDD، حافظه، قدرت پردازش، شبیه سازی سخت افزار و بوت کردن کل سیستم عامل را نگهداری می کند. سپس VM از طریق یک برنامه مترجم که روی سیستم عامل میزبان به نام ” Hypervisor” اجرا می شود، با کامپیوتر میزبان ارتباط برقرار می کند.
از سوی دیگر، داکر به صورت بومی با هسته سیستم ارتباط برقرار می کند و واسطه را در ماشین های لینوکس و حتی ویندوز ۱۰، ویندوز سرور ۲۰۱۶ و بالاتر دور می زند.
این بدان معنی است که شما می توانید هر نسخه لینوکس را در یک کانتینر اجرا کنید و به صورت بومی اجرا می شود. نه تنها این، داکر از فضای دیسک کمتری نیز استفاده می کند.
چگونه می توان با Docker شروع به کار کرد؟
داکر نرم افزاری است که روی لینوکس و ویندوز اجرا می شود. ایجاد، مدیریت و حتی هماهنگ کردن کانتینرها را انجام می دهد.
کلمه Docker از یک عبارت انگلیسی به معنای کارگر اسکله گرفته شده است که به معنای کسی است که کانتینرهای بار را از کشتی ها بارگیری و تخلیه می کند.
Docker دارای سه لایه اصلی است که در شکل زیر نشان داده شده است:
- زمان اجرا,وظیفه راه اندازی و توقف کانتینرها را بر عهده دارد و در پایین ترین سطح کار می کند.
- زمان اجرا در سطح پایین runc نامیده می شود. وظیفه آن ارتباط با سیستم عامل اصلی و راه اندازی و توقف کانتینرها است
- زمان اجرا در سطح بالاتر Containerd نامیده می شود. کار زیادی می کند. به عنوان مثال، کل چرخه حیات یک کانتینر را مدیریت می کند، از جمله کشیدن تصاویر، ایجاد رابط های شبکه، و مدیریت نمونه های runc سطح پایین.
- Docker Daemon بالاتر از کانتینرها قرار دارد و وظایف سطح بالاتری را انجام می دهد، مانند افشای IP داکر از راه دور، مدیریت تصاویر، حجم ها، شبکه ها و موارد دیگر.
- ازدحام داکر (Docker swarm) یک فناوری بومی داکر برای مدیریت خوشههای گره است. اما اکثر توسعه دهندگان از Kubernetes استفاده می کنند.
Docker به زبان برنامه نویسی Go نوشته شده است و از چندین ویژگی هسته لینوکس برای ارائه عملکرد آن بهره می برد. داکر از فناوری به نام فضاهای نامی (namespaces ) برای ارائه فضای کاری مجزا به نام کانتینر استفاده می کند. هنگامی که یک کانتینر را اجرا می کنید، داکر مجموعه ای از فضاهای نام را برای آن کانتینر ایجاد می کند.
این فضاهای نام, لایه ای از انزوا را ارائه می دهند. هر جنبه از یک کانتینر در یک فضای نام جداگانه اجرا می شود و دسترسی آن به آن namespaces محدود می شود.
بدون دیدگاه