Docker یک پلت فرم منبع باز است که توسعه دهندگان را قادر می سازد تا کانتینرها را بسازند، استقرار دهند، اجرا کنند، به روز کنند و مدیریت کنند - مؤلفه های استاندارد و اجرایی که کد منبع برنامه را با کتابخانه های سیستم عامل (OS) و وابستگی های مورد نیاز برای اجرای آن کد در هر محیطی ترکیب می کنند.
کانتینرها توسعه و تحویل برنامه های کاربردی توزیع شده را ساده می کنند. با تغییر سازمان ها به سمت توسعه بومی ابری و محیط های چند ابری ترکیبی، آنها به طور فزاینده ای محبوب شده اند. برای توسعه دهندگان امکان ایجاد کانتینرها بدون Docker، با کار مستقیم با قابلیت های ساخته شده در لینوکس و سایر سیستم عامل ها وجود دارد. اما داکر کانتینریسازی را سریعتر، آسانتر و ایمنتر میکند. به گزارش این کمپانی بیش از 13 میلیون توسعهدهنده از این پلتفرم استفاده میکنند.
داکر همچنین به Docker, Inc.، شرکتی که نسخه تجاری Docker را می فروشد، و به پروژه منبع باز Docker که Docker, Inc و بسیاری از سازمان ها و افراد دیگر در آن مشارکت دارند، اشاره دارد.
چرا از Docker (داکر) استفاده کنیم؟
Docker امروزه آنقدر محبوب است که "Docker" و "container" به جای یکدیگر استفاده می شوند. اما اولین فناوریهای مرتبط با کانتینر برای سالها – حتی دههها – قبل از انتشار عمومی داکر در سال ۲۰۱۳ در دسترس بودند.
مهمتر از همه، در سال 2008، LinuXContainers (LXC) در هسته لینوکس پیادهسازی شد و مجازیسازی را برای یک نمونه از لینوکس به طور کامل فعال کرد. در حالی که امروزه از LXC هنوز استفاده می شود، فناوری های جدیدتری با استفاده از هسته لینوکس در دسترس هستند. اوبونتو، یک سیستم عامل لینوکس مدرن و منبع باز، این قابلیت را نیز فراهم می کند.
Docker به توسعه دهندگان این امکان را می دهد تا با استفاده از دستورات ساده به این قابلیت های کانتینری سازی بومی دسترسی داشته باشند و آنها را از طریق یک رابط برنامه نویسی کاربردی (API) به صورت خودکار انجام دهند. در مقایسه با LXC، Docker ارائه می دهد:
- قابلیت حمل کانتینر بهبودیافته و بدون درز: در حالی که ظروف LXC اغلب به پیکربندیهای مخصوص ماشین اشاره میکنند، کانتینرهای Docker بدون تغییر در هر دسکتاپ، مرکز داده و محیط ابری اجرا میشوند.
- وزن سبکتر و بهروزرسانیهای دانهدارتر: با LXC، چندین فرآیند را میتوان در یک ظرف واحد ترکیب کرد. این امکان ساخت برنامهای را فراهم میکند که میتواند در حالی که یکی از قسمتهای آن برای بهروزرسانی یا تعمیر حذف شده است، به اجرا ادامه دهد.
- ایجاد خودکار کانتینر: داکر می تواند به طور خودکار یک کانتینر بر اساس کد منبع برنامه بسازد.
- نسخهسازی کانتینر: داکر میتواند نسخههای یک تصویر کانتینر را ردیابی کند، به نسخههای قبلی برگردد، و ردیابی کند که چه کسی و چگونه یک نسخه را ساخته است. حتی می تواند فقط دلتاها را بین نسخه موجود و نسخه جدید آپلود کند.
- استفاده مجدد از کانتینر: کانتینرهای موجود را می توان به عنوان تصاویر پایه استفاده کرد - اساساً مانند الگوهایی برای ساخت ظروف جدید.
- کتابخانههای کانتینر مشترک: توسعهدهندگان میتوانند به یک رجیستری منبع باز که حاوی هزاران کانتینر مشارکتشده توسط کاربر است دسترسی داشته باشند.
امروزه کانتینریسازی Docker با Microsoft Windows و Apple MacOS نیز کار میکند. توسعه دهندگان می توانند کانتینرهای داکر را بر روی هر سیستم عاملی اجرا کنند و اکثر ارائه دهندگان پیشرو ابر، از جمله Amazon Web Services (AWS)، Microsoft Azure، و IBM Cloud خدمات خاصی را برای کمک به توسعه دهندگان در ساخت، استقرار و اجرای برنامه های کانتینری با Docker ارائه می دهند.
کانتینرها در داکر چگونه کار می کنند و چرا اینقدر محبوب هستند
کانتینرها با جداسازی فرآیند و قابلیت های مجازی سازی که در هسته لینوکس تعبیه شده است امکان پذیر می شوند. این قابلیتها - مانند گروههای کنترل (Cgroups) برای تخصیص منابع بین فرآیندها، و فضاهای نام برای محدود کردن دسترسی یا مشاهده فرآیندها به منابع یا مناطق دیگر سیستم - چندین مؤلفه برنامه را قادر میسازد تا منابع یک نمونه واحد از میزبان عامل را به اشتراک بگذارد. سیستم تقریباً به همان روشی که هایپروایزر چندین ماشین مجازی (VM) را قادر می سازد تا CPU، حافظه و سایر منابع یک سرور سخت افزاری واحد را به اشتراک بگذارند.
در نتیجه، فناوری کانتینر همه عملکردها و مزایای ماشین های مجازی را ارائه می دهد - از جمله جداسازی برنامه، مقیاس پذیری مقرون به صرفه و یکبار مصرف - به علاوه مزایای مهم اضافی:
- وزن سبک تر: برخلاف ماشین های مجازی، کانتینرها بار کل یک نمونه سیستم عامل و هایپروایزر را حمل نمی کنند. آنها فقط شامل فرآیندهای سیستم عامل و وابستگی های لازم برای اجرای کد هستند. اندازه کانتینرها بر حسب مگابایت (در مقایسه با گیگابایت برای برخی ماشینهای مجازی) اندازهگیری میشوند، از ظرفیت سختافزار بهتر استفاده میکنند و زمان راهاندازی سریعتری دارند.
- بهره وری توسعه دهندگان بهبود یافته: برنامه های کانتینری را می توان یک بار نوشت و در هر مکانی اجرا کرد. و در مقایسه با VMها، کانتینرها سریعتر و آسانتر برای استقرار، تهیه و راه اندازی مجدد هستند. این آنها را برای استفاده در خطوط لوله یکپارچه سازی و تحویل مداوم (CI/CD) ایده آل می کند و برای تیم های توسعه که از شیوه های Agile و DevOps استفاده می کنند مناسب تر هستند.
- بهره وری بیشتر از منابع: با کانتینرها، توسعه دهندگان می توانند چندین برابر تعداد نسخه هایی از یک برنامه کاربردی را روی همان سخت افزار اجرا کنند که می توانند با استفاده از VM ها. این می تواند هزینه های ابر را کاهش دهد.
شرکتهایی که از کانتینر استفاده میکنند، مزایای دیگری از جمله بهبود کیفیت برنامه، پاسخ سریعتر به تغییرات بازار و موارد دیگر را گزارش میدهند.
ابزارها و اصطلاحات داکر
برخی از ابزارها، اصطلاحات و فناوری هایی که توسعه دهندگان هنگام استفاده از Docker با آنها مواجه می شوند عبارتند از:
-
DockerFile
هر کانتینر داکر با یک فایل متنی ساده حاوی دستورالعملهایی برای ساخت تصویر ظرف آن شروع میشود. DockerFile فرآیند ایجاد تصویر را خودکار می کند. این اساساً فهرستی از دستورالعمل های رابط خط فرمان (CLI) است که Docker Engine برای جمع آوری تصویر اجرا می کند. فهرست دستورات آن بزرگ است، اما استاندارد شده است: عملیات داکر بدون توجه به محتوا، زیرساخت یا سایر متغیرهای محیطی یکسان عمل می کند.
-
Docker images
تصاویر Docker حاوی کد منبع برنامه اجرایی و همچنین تمام ابزارها، کتابخانه ها و وابستگی هایی هستند که کد برنامه برای اجرا به عنوان یک ظرف نیاز دارد. وقتی تصویر داکر را اجرا می کنید، به یک نمونه (یا چند نمونه) از کانتینر تبدیل می شود.
ساختن یک تصویر Docker از ابتدا امکان پذیر است، اما اکثر توسعه دهندگان آن را از مخازن رایج پایین می آورند. چندین تصویر داکر را می توان از یک تصویر پایه ایجاد کرد و آنها اشتراکات پشته خود را به اشتراک خواهند گذاشت.
تصاویر داکر از لایه ها تشکیل شده اند و هر لایه مربوط به نسخه ای از تصویر است. هر زمان که یک توسعه دهنده تغییراتی در تصویر ایجاد می کند، یک لایه بالایی جدید ایجاد می شود و این لایه بالایی جایگزین لایه بالایی قبلی به عنوان نسخه فعلی تصویر می شود. لایههای قبلی برای بازگرداندن یا استفاده مجدد در پروژههای دیگر ذخیره میشوند.
هر بار که یک کانتینر از یک تصویر داکر ایجاد می شود، یک لایه جدید دیگر به نام لایه کانتینر ایجاد می شود. تغییرات ایجاد شده در کانتینر - مانند افزودن یا حذف فایلها - فقط در لایه کانتینر ذخیره میشوند و فقط زمانی وجود دارند که کانتینر در حال اجرا است. این فرآیند تکراری ایجاد تصویر، کارایی کلی را افزایش میدهد، زیرا چندین نمونه کانتینر زنده میتوانند تنها از یک تصویر پایه اجرا شوند، و وقتی این کار را انجام میدهند، از یک پشته مشترک استفاده میکنند.
-
Docker containers
کانتینرهای Docker نمونههای زنده و در حال اجرا تصاویر Docker هستند. در حالی که تصاویر داکر فایلهای فقط خواندنی هستند، کانتینرها محتوایی زنده، زودگذر و اجرایی هستند. کاربران می توانند با آنها تعامل داشته باشند و مدیران می توانند تنظیمات و شرایط آنها را با استفاده از دستورات آن تنظیم کنند.
-
Docker Hub
داکر هاب مخزن عمومی تصاویر آن است که خود را "بزرگترین کتابخانه و انجمن تصاویر کانتینر در جهان" می نامد. بیش از 100000 تصویر کانتینری را در خود نگه می دارد که از فروشندگان نرم افزار تجاری، پروژه های منبع باز و توسعه دهندگان منفرد تهیه شده اند. این شامل تصاویری است که توسط Docker, Inc.، تصاویر تایید شده متعلق به Docker Trusted Registry و هزاران تصویر دیگر تولید شده است.
همه کاربران داکر هاب می توانند تصاویر خود را به دلخواه به اشتراک بگذارند. آنها همچنین می توانند تصاویر پایه از پیش تعریف شده را از سیستم فایل آن دانلود کنند تا به عنوان نقطه شروع برای هر پروژه کانتینری سازی مورد استفاده قرار گیرند.
مخازن تصویر دیگری نیز وجود دارد، به ویژه GitHub. GitHub یک سرویس میزبانی مخزن است که به دلیل ابزارهای توسعه برنامه و به عنوان پلتفرمی که همکاری و ارتباطات را تقویت می کند، شناخته شده است. کاربران Docker Hub می توانند یک مخزن (repo) ایجاد کنند که می تواند بسیاری از تصاویر را در خود جای دهد. مخزن می تواند عمومی یا خصوصی باشد و می تواند به حساب های GitHub یا BitBucket مرتبط شود.
-
Docker Desktop
Docker Desktop یک برنامه کاربردی برای Mac یا Windows است که شامل Engine، CLI Client، Compose، Kubernetes و موارد دیگر است. همچنین شامل دسترسی به داکر هاب می شود.
-
Docker daemon
داکر دیمون سرویسی است که تصاویر داکر را با استفاده از دستورات کلاینت ایجاد و مدیریت می کند. و اساسا به عنوان مرکز کنترل اجرای داکر شما عمل می کند. سروری که داکر دیمون روی آن اجرا می شود، میزبان داکر نامیده می شود.
-
Docker registry
رجیستری داکر یک سیستم ذخیره سازی و توزیع منبع باز مقیاس پذیر برای تصاویر داکر است. رجیستری به شما امکان می دهد نسخه های تصویر را در مخازن با استفاده از برچسب گذاری برای شناسایی ردیابی کنید. این با استفاده از git، یک ابزار کنترل نسخه، انجام می شود.
استقرار داکر و ارکستراسیون
هنگامی که فقط چند کانتینر را اجرا می کنید، مدیریت یک برنامه در Docker Engine، در زمان اجرای واقعی صنعت، بسیار ساده است. اما برای استقرارهایی که شامل هزاران کانتینر و صدها سرویس است، مدیریت گردش کار بدون کمک برخی ابزارهای هدفمند تقریباً غیرممکن است.
ابزارهای مدیریت بهتر برنامه ها در داکر
-
Docker plugins
افزونههای Docker را میتوان برای کاربردیتر کردن داکر استفاده کرد. تعدادی از افزونههای آن در سیستم افزونه Docker Engine گنجانده شدهاند و افزونههای شخص ثالث نیز میتوانند بارگذاری شوند.
-
Docker Compose
توسعهدهندگان میتوانند از Docker Compose برای مدیریت برنامههای چند کانتینری استفاده کنند، جایی که همه کانتینرها روی یک میزبان داکر اجرا میشوند. آن یک فایل YAML (.YML) ایجاد میکند که مشخص میکند کدام سرویسها در برنامه گنجانده شدهاند و میتوانند کانتینرها را با یک فرمان واحد اجرا و اجرا کنند. از آنجایی که سینتکس YAML به زبان آگنوستیک است، فایلهای YAML را میتوان در برنامههای نوشته شده در جاوا، پایتون، روبی و بسیاری از زبانهای دیگر استفاده کرد.
توسعهدهندگان همچنین میتوانند از Docker Compose برای تعریف حجمهای پایدار برای ذخیرهسازی، تعیین گرههای پایه و سند و پیکربندی وابستگیهای سرویس استفاده کنند.
-
Kubernetes
نظارت و مدیریت چرخههای حیات کانتینر در محیطهای پیچیدهتر به ابزار هماهنگسازی کانتینر نیاز دارد. در حالی که داکر شامل ابزار ارکستراسیون خود (به نام Docker Swarm) است، اکثر توسعه دهندگان به جای آن Kubernetes را انتخاب می کنند.
Kubernetes یک پلتفرم ارکستراسیون کانتینر منبع باز است که برگرفته از پروژه ای است که برای استفاده داخلی در گوگل توسعه یافته است. Kubernetes وظایف یکپارچه برای مدیریت معماریهای مبتنی بر کانتینر، از جمله استقرار کانتینر، بهروزرسانی، کشف سرویس، تأمین ذخیرهسازی، تعادل بار، نظارت بر سلامت و موارد دیگر را برنامهریزی و خودکار میکند. علاوه بر این، اکوسیستم منبع باز ابزارهای Kubernetes - که شامل Istio و Knative میشود - به سازمانها این امکان را میدهد تا یک پلتفرم بهعنوان سرویس (PaaS) با بهرهوری بالا را برای برنامههای کاربردی کانتینری و یک رمپ سریعتر برای محاسبات بدون سرور مستقر کنند.
ابزارها مکمل سرعت در کارهای ما هستند و برای بازار کار یادگیری ابزارها مهم هستند مهمتر از ابزارها یادگیری فریم ورک و زبان های برنامه نویسی هستند.