در این صفحه می خوانید ؟
- معرفی داکر (Docker)
- ویژگی های داکر (Docker)
- چرا از Docker استفاده کنیم؟
- ابزار و اصطلاحات داکر
- مقایسه داکر (Docker) با ماشین مجازی (VM)
معرفی داکر (Docker)
Docker مجموعه ای از محصولاتی پلتفرم به عنوان سرویس (PaaS) است که از مجازی سازی سطح سیستم عامل برای ارائه نرم افزار در بسته هایی به نام کانتینر استفاده می کنند. کانتینرها از یکدیگر جدا شده و نرم افزار، کتابخانه ها و فایل های پیکربندی خود را بسته بندی می کنند. آنها می توانند از طریق کانال های کاملاً مشخص با یکدیگر ارتباط برقرار کنند. تمام کانتینرها توسط یک هسته سیستم عامل کار می کنند و بنابراین از منابع کمتری نسبت به ماشین های مجازی استفاده می کنند.
Docker یک پلتفرم کانتینر سازی متن باز است. داکر به توسعه دهندگان امکان می دهد تا برنامه ها را در کانتینر بسته بندی کنند – کامپوننت های استاندارد شده قابل اجرایی است که کد منبع برنامه را با کتابخانه های سیستم عامل و وابستگی های مورد نیاز برای اجرای آن کد در هر محیطی ترکیب می کند. کانتینر تحویل اپلیکیشن های توزیع شده را ساده کرده و با تغییر سازمان ها به سمت توسعه نیتیو کلود و محیط های مولتی کلود هیبریدی، رواج رو به رشدی پیدا کرده است.
توسعه دهندگان می توانند کانتینر بدون Docker ایجاد کنند، اما این پلتفرم ساخت، استقرار و مدیریت کانتینر را آسان تر، ساده تر و ایمن تر می کند. Docker در اصل یک جعبه ابزار است که توسعه دهندگان را قادر می سازد تا با استفاده از دستورات ساده و اتوماسیون صرفه جویی در کار از طریق یک API واحد، کانتینر را بسازند، مستقر کنند، اجرا کنند، به روز کنند و متوقف کنند.
این سرویس دارای دو پلن رایگان و پریمیوم است. نرم افزاری که میزبان کانتینر است، Docker Engine نامیده می شود. اولین بار در سال 2013 شروع به کار کرده و توسط Docker، Inc توسعه داده شده است.
هر برنامه ای در قالب کانتینر باید محیطی برای اجرای سخت افزار و سیستم عامل داشته باشد. داکر یک پلتفرم اوپن سورس است که با ساخت Container امکان داشتن محیطی برای توسعه نرم افزار فراهم می کند. امکان استفاده از کرنل سیستم عاملی که بر روی نرم افزار نصب شده را مهیا می سازد و در نتیجه سبک تر از ماشین های مجازی می باشد. داکر برنامه کامپیوتری است که مجازی سازی در سطح سیستم عامل را انجام می دهد، همچنین به عنوان "containerization" شناخته می شود.
کاربرد اصلی داکر برای توسعه دهندگان جهت ساخت اپلیکیشن می باشد. علاوه بر این برای مدیران شبکه نیز کاربرد دارد. می توانید سیستم عامل و ابزارهای مورد نیاز را سریع نصب کنید و نرم افزار خود را تست کنید و هنگام اتمام کار محیط تست را پاک کنید. بیشتر از آن، داکر یک ابزار محبوب برای توسعه، راه اندازی و اجرای برنامه ها با استفاده از کانتینر است. کانتینر به ما این اجازه را می دهد همه چیزهایی که برنامه کاربردی ما مانند کتابخانه ها و دیگر وابستگی ها نیاز دارد، بسته بندی کنیم و آن را به عنوان یک بسته واحد حمل کنیم. به این ترتیب، برنامه ما می تواند بر روی هر دستگاه اجرا شود و رفتار مشابهی داشته باشد. کانتینرهای Docker همه جا هستند از جمله لینوکس، ویندوز، مرکز داده، ابر، Serverless و غیره.
تاریخچه داکر (Docker)
داکر برای اولین بار در سال 2010 به عنوان یک شرکت سرویس پلتفرم به نام dotCloud توسط Solomon Hykes و Sebastien Pahl شروع به کار کرد و در سال 2011 به بهره برداری رسید. Solomon Hykes داکر را در فرانسه به عنوان یک پروژه داخلی در dotCloud شروع کرد. داکر نشان دهنده تکامل تکنولوژی انحصاری dotCloud است که خود بر روی پروژه های پیشین مانند Cloudlets ساخته شده است. Docker به عنوان نرم افزار اوپن سورس در مارس 2013 منتشر شد. در تاریخ 13 مارس 2014، با انتشار نسخه 0.9، Docker LXC را به عنوان محیط اجرای پیش فرض رها کرد و آن را با کتابخانه libcontainer خود که در زبان برنامه نویسی گو (GO) نوشته شده است جایگزین کرد.
کاتینر (Container) چیست؟
کانتینر یک واحد استاندارد نرم افزار است که بسته بندی کد و تمام وابستگی های آن را انجام می دهد بنابراین برنامه به سرعت و با اطمینان از یک محیط محاسباتی به محیط دیگر اجرا می شود. تصویر کانتینر Docker یک بسته نرم افزاری سبک، مستقل و قابل اجرا است که شامل همه موارد لازم برای اجرای یک برنامه است: کد، زمان اجرا، ابزارهای سیستم، کتابخانه های سیستم و تنظیمات.
تصاویر کانتینر در زمان اجرا و در مورد کانتینرهای Docker به کانتینر تبدیل می شوند - ایمیج وقتی روی موتور Docker کار می کنند به ظرف تبدیل می شوند. برای هر دو برنامه لینوکس و مبتنی بر ویندوز، نرم افزارهای کانتینر دار بدون در نظر گرفتن زیرساخت ها همیشه یکسان اجرا می شوند. کانتینرها نرم افزار را از محیط خود جدا کرده و اطمینان حاصل می کنند که علی رغم اختلافات بین توسعه و مرحله بندی، به طور یکنواخت کار می کند.
کانتینرهای docker که با موتور docker کار می کنند:
- استاندارد: داکر استاندارد صنعتی را برای ظروف ایجاد کرد، بنابراین می توانند در هر مکان قابل حمل باشند
- سبک وزن: کانتینرها از هسته سیستم عامل دستگاه مشترک هستند و بنابراین برای هر برنامه نیازی به سیستم عامل ندارند، که باعث افزایش کارایی سرور و کاهش هزینه های سرور و صدور مجوز می شود.
- امن: برنامه ها در ظروف ایمن تر هستند و Docker قوی ترین قابلیت انزوا پیش فرض را در صنعت فراهم می کند.
نحوه کارکرد کانتینر و دلیل محبوبیت آنها
کانتینرها با جداسازی فرآیند و قابلیت های مجازی سازی ساخته شده در هسته لینوکس امکان پذیر می شوند. این قابلیت ها مانند گروه های کنترلی (Cgroups) برای تخصیص منابع بین فرآیندها و namespaces جهت محدود کردن دسترسی یا قابلیت مشاهده فرآیندها به سایر منابع یا مناطق سیستم، کامپوننت های متعدد اپلیکیشن ها را قادر می سازد تا منابع یک نمونه واحد از میزبان سیستم عامل را به اشتراک بگذارند؛ همانند طوریکه hypervisor چندین ماشین مجازی (VM) را قادر می سازد تا CPU، حافظه و سایر منابع یک سرور سخت افزاری را به اشتراک بگذارند.
در نتیجه، فناوری کانتینر تمام قابلیت ها و مزایای ماشین های مجازی از جمله جداسازی برنامه، مقیاس پذیری مقرون به صرفه و مزایای اضافی مهم دیگر را نیز ارائه می دهد:
وزن سبک تر: بر خلاف ماشین های مجازی، کانتینرها payload یک نمونه سیستم عامل و هایپروایزر را حمل نمی کنند. آنها فقط شامل فرآیندهای سیستم عامل و وابستگی های لازم برای اجرای کد هستند. اندازه کانتینرها بر حسب مگابایت (در مقایسه با گیگابایت برای برخی از VM ها) اندازه گیری می شود، در نتیجه از ظرفیت سخت افزاری بهتر استفاده می کند و زمان راه اندازی سریع تری دارد.
بهره وری بیشتر منابع: با کانتینرها، می توانید چندین برابر یک نسخه از یک اپلیکیشن را در همان سخت افزار با استفاده از VM ها اجرا کنید. این امر می تواند هزینه های ابری شما را کاهش دهد.
بهبود بهره وری توسعه دهنده: در مقایسه با VM ها، استقرار، تهیه و راه اندازی مجدد کانتینرها سریعتر و آسان تر است. این امر آنها را برای استفاده در پایپ لاین های یکپارچه سازی و تحویل مداوم (CI/CD) ایده آل می کند و برای تیم های توسعه ای که از شیوه های Agile و DevOps استفاده می کنند، مناسب تر است.
شرکت هایی که از کانتینرها استفاده می کنند مزایای دیگری از جمله بهبود کیفیت برنامه، پاسخ دهی سریعتر به تغییرات بازار و موارد دیگر را گزارش می دهند.
کوبرنتیز (Kubernetes) چیست؟
Kubernetes یک سیستم ارکستراسیون منبع باز برای خودکار کردن مدیریت، قرار دادن، مقیاس گذاری و مسیریابی کانتینرهایی است که در سال های اخیر مورد توجه توسعه دهندگان و تیم های عملیاتی فناوری اطلاعات قرار گرفته است. این اولین بار توسط گوگل توسعه داده شد و در سال 2014 به Open Source کمک کرد و اکنون توسط بنیاد رایانش ابری Cloud نگهداری می شود. یک جامعه و اکوسیستم Kubernetes فعال در اطراف Kubernetes با هزاران نفر از همکاران و ده ها نفر از شرکای مجاز در حال توسعه است.
Kubernetes به پلت فرم استاندارد ارکستراسیون کانتینرها تبدیل شده است. تمام ارائه دهندگان اصلی ابر از آن پشتیبانی می کنند، و این گزینه منطقی برای سازمان هایی است که به دنبال انتقال برنامه های بیشتر به ابر هستند. Kubernetes یک فریمورک مشترک برای اجرای سیستم های توزیع شده ارائه می دهد تا تیم های توسعه زیرساخت های ثابت و غیر قابل تغییر از توسعه تا تولید برای هر پروژه داشته باشند. Kubernetes می تواند نیازهای مقیاس بندی، در دسترس بودن، خرابی سیستم، الگوهای استقرار و موارد دیگر را مدیریت کند.
قابلیت های Kubernetes عبارتند از:
- خدمات و تعریف فرآیند
- کشف خدمات و توازن بار
- ارکستراسیون ذخیره سازی
- مدیریت منابع در سطح کانتینر
- استقرار و بازگشت خودکار
- مدیریت بهداشتی کانتینر
- اسرار و مدیریت پیکربندی
اجزای تشکیل دهنده داکر (Docker)
داکر به عنوان یک سرویس ارائه خدمات شامل سه قسمت است:
- نرم افزار
Docker daemon که dockerd نامیده می شود، یک فرایند مداوم است که کانتینرهای داکر و اشیاء کانتینر را مدیریت می کند. این سرویس برای درخواست های فرستاده شده از طریق API Docker Engine گوش می دهد. برنامه کلاینت که Docker نامیده می شود رابط کاربری خط فرمان را فراهم می کند و به کاربران اجازه می دهد با Docker daemon ارتباط برقرار کنند.
- اشیا
اشیا داکر، اجزای مختلفی هستند که برای گرد آوری یک برنامه در Docker استفاده می شوند. کلاس های اصلی اشیاء Docker عبارتند از: ایمیج ها، کانتینر ها و سرویس ها. کانتینر Docker یک محیط استاندارد و محصور شده است که برنامه ها را اجرا می کند. ایمیج Docker یک قالب فقط خواندنی است که برای ساختن کانتینر استفاده می شود. ایمیج برای ذخیره و ارسال برنامه ها مورد استفاده قرار می گیرند. سرویس Docker اجازه می دهد تا کانتینر در چندین Daemon Docker مقیاس شود. این نتیجه که به عنوان یک گروه شناخته می شود، مجموعه ای از همکاری Daemons ها است که از طریق API Docker ارتباط برقرار می کنند.
- ریجستری
داکر رجیستری یک مخزن برای ایمیج های داکر است. کلاینت های داکر برای ثبت ایمیج ها برای دانلود از "pull" و برای استفاده یا آپلود از "push" ایمیج هایی که ساخته شده اند،به رجیستری متصل می شوند. رجیستری می تواند عمومی یا خصوصی باشد. دو رجیستر اصلی عمومی Docker Hub و Docker Cloud هستند.
ویژگی های داکر (Docker)
تکنولوژی Docker منحصر به فرد است زیرا بر نیازهای توسعه دهندگان و اپراتورهای سیستم تاکید می کند تا وابستگی های برنامه را از زیرساخت جدا کند. Docker یک ماشین مجازی(VM) نیست. کانتینر Docker، بر خلاف ماشین مجازی، نیازی به سیستم عامل خاصی ندارد، در عوض به عملکرد هسته متکی است و از انزوای منابع برای CPU و حافظه استفاده می کند و فضای نام جداگانه را برای جدا کردن دیدگاه برنامه از سیستم عامل اعمال می کند. بر اساس توضیحات کوتاه بالا، تصویر زیر یک مقایسه بین ماشین های مجازی و کانتینر Docker را نشان می دهد.
از دیگر مزایای استفاده از داکر می توان به موارد زیر اشاره کرد:
- ساخت و حذف سریع Container ها
- تسریع در ریستارت و خاموش کردن
- انتقال پذیری آسان
- مدیریت منابع و ریسورس ها
چرا از Docker استفاده کنیم؟
Docker امروزه آنقدر محبوب است که "Docker" و "کانتینر" به جای یکدیگر استفاده می شوند. اما اولین فناوری های مربوط به کانتینر برای سالهای متوالی وجود داشت؛ حتی می توان گفت که قبل از اینکه Docker در سال 2013 در دسترس عموم قرار گیرد، دهه ها از در دسترس بودن آن می گذشت.
مهمتر از همه ، در سال 2008، LinuXContainers (LXC) در هسته لینوکس اجرا شد و مجازی سازی را برای یک نمونه از لینوکس کاملاً فعال کرد. در حالی که LXC هنوز هم امروزه مورد استفاده قرار می گیرد، فناوری های جدیدتری با استفاده از هسته لینوکس در دسترس است. اوبونتو، یک سیستم عامل لینوکس مدرن و منبع باز نیز این قابلیت را ارائه می دهد.
Docker قابلیت های کانتینرسازی نیتیو لینوکس را با تکنولوژی هایی بهبود می بخشد که قادر است:
قابلیت حمل بهتر و یکپارچه: در حالی که کانتینر LXC اغلب به پیکربندی های مخصوص دستگاه اشاره می کنند، کانتینر Docker بدون تغییر در هر میز کار، مرکز داده و محیط ابری اجرا می شوند.
وزن سبک تر و به روز رسانی دقیق تر: با LXC، چندین فرآیند را می توان در یک کانتینر واحد ترکیب کرد. با کانتینر Docker، تنها یک فرآیند می تواند در هر کانتینر اجرا شود. این امر باعث می شود برنامه ای ساخته شود که بتواند به کار خود ادامه دهد در حالی که یکی از قسمت های آن برای به روزرسانی یا تعمیر حذف شده است.
ایجاد خودکار کانتینر: Docker می تواند به طور خودکار یک کانتینر را بر اساس کد منبع برنامه بسازد.
نسخه کانتینر: Docker می تواند نسخه های یک تصویر کانتینر را ردیابی کند، به نسخه های قبلی برگردد و مشخص کند که چه کسی و چگونه نسخه ای ساخته است. حتی می تواند فقط دلتا را بین نسخه موجود و نسخه جدید بارگذاری کند.
استفاده مجدد از کانتینر: کانتینر موجود را می توان به عنوان تصاویر اصلی در اصل مانند الگوهای ساخت کانتینر جدید استفاده کرد.
کتابخانه های کانتینر مشترک: توسعه دهندگان می توانند به یک رجیستری منبع باز که شامل هزاران کانتینری دارای کاربر دسترسی پیدا کنند.
امروزه کانتینرسازی داکر با سرور Microsoft Windows نیز کار می کند. اکثر ارائه دهندگان خدمات ابری خدمات خاصی را برای کمک به توسعه دهندگان در ساخت، ارسال و اجرای اپلیکیشن ها با Docker ارائه می دهند.
به همین دلیل است که داکر به سرعت در حال رشد است و محبوبیت زیادی پیدا کرده است.
ابزار و اصطلاحات داکر
برخی از ابزارها و اصطلاحاتی که هنگام استفاده از Docker با آنها روبرو می شوید عبارتند از:
DockerFile
هر کانتینر Docker با یک فایل متنی ساده شامل دستورالعمل هایی برای نحوه ساختن تصویر کانتینر Docker شروع می شود. DockerFile فرآیند ایجاد تصویر Docker را خودکار می کند. این در اصل لیستی از دستورالعمل های خط فرمان (CLI) است که Docker Engine برای جمع آوری تصویر اجرا می کند.
تصاویر داکر
تصاویر Docker شامل منبع برنامه های اجرایی و همچنین همه ابزارها، کتابخانه ها و وابستگی هایی است که کد برنامه برای اجرای آنها به عنوان یک کانتینر نیاز دارد. وقتی تصویر Docker را اجرا می کنید، به یک نمونه (یا چند نمونه) از کانتینر تبدیل می شود.
ساختن تصویر Docker از ابتدا امکان پذیر است، اما اکثر توسعه دهندگان آنها را از مخازن معمولی حذف می کنند. چندین تصویر Docker را می توان از یک تصویر پایه ایجاد کرد و مشترکات پشته خود را به اشتراک می گذارند.
تصاویر داکر از لایه ها تشکیل شده است و هر لایه مربوط به نسخه ای از تصویر است. هر زمان که توسعه دهنده تغییری در تصویر ایجاد کند، یک لایه بالایی جدید ایجاد می شود و این لایه بالا جایگزین لایه بالایی قبلی به عنوان نسخه فعلی تصویر می شود. لایه های قبلی برای بازگرداندن یا استفاده مجدد در پروژه های دیگر ذخیره می شوند.
هر بار که یک کانتینر از یک تصویر Docker ایجاد می شود ، یک لایه جدید دیگر به نام لایه ظرف ایجاد می شود. تغییرات ایجاد شده در محفظه - مانند افزودن یا حذف پرونده ها - فقط در لایه محفظه ذخیره می شوند و فقط در حین کار کانتینر وجود دارند. این فرایند ایجاد تصویر تکراری باعث افزایش کارآیی کلی می شود ، زیرا چندین نمونه ظرف زنده می تواند فقط از یک تصویر پایه اجرا شود ، و هنگامی که این کار را انجام می دهند ، از یک پشته مشترک استفاده می کنند.
کانتینرهای داکر
کانتینرهای داکر نمونه های لایو و در حال اجرا تصاویر Docker هستند. در حالی که تصاویر Docker فقط فایل های خواندنی هستند، کانتینرها دارای محتوای لایو، زودگذر و قابل اجرا هستند. کاربران می توانند با آنها ارتباط برقرار کنند و مدیران می توانند تنظیمات و شرایط خود را با استفاده از دستورات docker تنظیم کنند.
Docker Hub
Docker Hub مخزن عمومی تصاویر Docker است که خود را "بزرگترین کتابخانه و جامعه جهان برای تصاویر کانتینر" می نامد. این برنامه بیش از 100000 تصویر کانتینر را که از فروشندگان نرم افزار تجاری، پروژه های منبع باز و توسعه دهندگان جداگانه تهیه شده است، در خود جای داده است. این شامل تصاویری است که توسط Docker ، Inc ، تصاویر تأیید شده متعلق به رجیستری معتبر Docker ، و هزاران تصویر دیگر می شود.
همه کاربران Docker Hub می توانند تصاویر خود را به دلخواه به اشتراک بگذارند. آنها همچنین می توانند تصاویر پایه از پیش تعریف شده را از سیستم فایل Docker بارگیری کنند تا به عنوان نقطه شروع برای هر پروژه کانتینر سازی استفاده شوند.
Docker daemon
Docker daemon سرویسی است که بر روی سیستم عامل شما اجرا می شود، مانند Microsoft Windows یا Apple MacOS یا iOS. این سرویس با استفاده از دستورات سرویس گیرنده، تصاویر Docker شما را برای شما ایجاد و مدیریت می کند و به عنوان مرکز کنترل پیاده سازی Docker شما عمل می کند.
داکر رجیستری
داکر رجیستری یک سیستم ذخیره سازی و توزیع منبع باز مقیاس پذیر برای تصاویر docker است. رجیستری به شما امکان می دهد نسخه های تصویر را در مخازن، با استفاده از برچسب گذاری برای شناسایی، ردیابی کنید. این کار با استفاده از git، یک ابزار کنترل نسخه، انجام می شود.
مقایسه داکر (Docker) با ماشین مجازی (VM)
کانتینرها و ماشین های مجازی از مزایای جداسازی و تخصیص منابع مشابهی برخوردار هستند، اما عملکرد آنها متفاوت است زیرا کانتینرها سیستم عامل را به جای سخت افزار مجازی می کنند. کانتینرها قابل حمل تر و کارآمدتر هستند.
- کانتینر
کانتینرها انتزاعی در لایه برنامه هستند که کد و وابستگی ها را با هم بسته بندی می کنند. چندین کانتینر می توانند روی یک ماشین اجرا شوند و هسته سیستم عامل را با ظروف دیگر به اشتراک بگذارند، هر کدام به صورت فرآیندهای جداگانه در فضای کاربر اجرا می شوند. ظروف نسبت به ماشین های مجازی فضای کمتری را اشغال می کنند (اندازه کانتینرها معمولاً ده ها مگابایت است)، می توانند از پس برنامه های بیشتری برآیند و به ماشین های مجازی و سیستم عامل کمتری نیاز دارند.
- ماشین های مجازی
ماشین های مجازی (VM) انتزاعی از سخت افزار فیزیکی است که یک سرور را به بسیاری از سرورها تبدیل می کند. hypervisor به چندین ماشین مجازی اجازه می دهد تا روی یک ماشین کار کنند. هر ماشین مجازی شامل یک کپی کامل از یک سیستم عامل، برنامه، باینری های لازم و کتابخانه ها است - ده ها گیگابایت را اشغال می کند. همچنین بوت شدن ماشین های مجازی ممکن است کند باشد.