منبع : وب سایت داکر https://docs.docker.com/get-started/overview
مفهوم داکر
داکر(Docker) یک پلت فرم باز برای توسعه، انتقال و اجرای برنامه ها است. Docker شما را قادر میسازد تا برنامه های کاربردی خود را از زیرساخت سخت افزاری و نرم افزاری(سرور) خود جدا کنید تا بتوانید نرم افزار را به سرعت تحویل دهید. با Docker، می توانید زیرساخت های خود را به همان روشی که برنامه های خود را مدیریت می کنید، مدیریت کنید. با استفاده از روشهای Docker برای ارسال، آزمایش و استقرار سریع کد، میتوانید تأخیر بین نوشتن کد(برنامه نویسی) و اجرای آن را به میزان قابل توجهی کاهش دهید.
پلتفرم داکر Docker Platform
Docker توانایی بسته بندی و اجرای یک برنامه را در یک محیط کاملاً ایزوله به نام کانتینر container فراهم می کند. ایزوله و امنیت به شما اجازه می دهد تا چندین کانتینر را به طور همزمان روی یک میزبان (host) مشخص اجرا کنید. کانتینرها سبک وزن هستند و شامل همه چیز مورد نیاز برای اجرای برنامه هستند، بنابراین نیازی نیست به آنچه در حال حاضر روی هاست نصب شده است اعتماد کنید. در حین کار میتوانید به راحتی کانتینرها را به اشتراک بگذارید، و مطمئن باشید که همه کسانی که با آنها اشتراکگذاری میکنید، همان کانتینری را دریافت میکنند که به یک روش کار میکند. Docker ابزار و بستری برای مدیریت چرخه حیات کانتینرهای شما فراهم می کند:
- برنامه خود و اجزای پشتیبانی کننده آن را با استفاده از کانتینرها توسعه دهید.
- کانتینر واحدی برای توزیع و آزمایش برنامه شما می شود.
- وقتی آماده شدید، برنامه خود را به عنوان یک کانتینر یا یک سرویس هماهنگ در محیط تولید خود مستقر کنید. چه محیط تولید شما یک مرکز داده محلی باشد، یک ارائه دهنده ابر یا ترکیبی از این دو، این کار یکسان است.
برای چه کاری می توان از Docker استفاده ؟
تحویل سریع و مداوم برنامه های شما
Docker چرخه عمر توسعه را با اجازه دادن به توسعه دهندگان برای کار در محیط های استاندارد شده با استفاده از کانتینرهای محلی که برنامه ها و خدمات شما را ارائه می دهند، ساده می کند. کانتینرها برای یکپارچه سازی مداوم و گردش کار تحویل مداوم (CI/CD) عالی هستند.
سناریوی مثال زیر را در نظر بگیرید:
- توسعه دهندگان شما کد را به صورت local مینویسند و کار خود را با استفاده از کانتینرهای Docker با همکاران خود به اشتراک می گذارند.
- آنها از Docker استفاده میکنند تا برنامههای خود را به محیط آزمایشی هدایت کنند و آزمایشهای خودکار و دستی را اجرا کنند.
- زمانی که توسعهدهندگان باگها را پیدا میکنند، میتوانند آنها را در محیط توسعه برطرف کرده و آنها را برای آزمایش و اعتبارسنجی مجدداً در محیط آزمایش قرار دهند.
- وقتی آزمایش کامل شد، رساندن مشکل به مشتری به سادگی فشار دادن تصویر به روز شده به محیط تولید است.
استقرار و مقیاس بندی پاسخگو
پلت فرم مبتنی بر کانتینر Docker امکان بارهای کاری بسیار قابل حمل را فراهم می کند. کانتینرهای Docker میتوانند روی لپتاپ محلی یک توسعهدهنده، روی ماشینهای فیزیکی یا مجازی در مرکز داده، بر روی ارائهدهندگان ابری یا در ترکیبی از محیطها اجرا شوند.
حملپذیری و ماهیت سبک Docker همچنین مدیریت پویا بارهای کاری را آسان میکند، برنامهها و سرویسها را بر اساس نیازهای کسبوکار، در زمان واقعی کاهش میدهد یا از بین میبرد.
اجرای بارهای کاری بیشتر روی همان سخت افزار
داکر سبک و سریع است. این یک جایگزین مناسب و مقرون به صرفه برای ماشین های مجازی مبتنی بر Hypervisor ارائه می دهد، بنابراین می توانید از ظرفیت سرور خود برای دستیابی به اهداف تجاری خود استفاده کنید. Docker برای محیطهای با چگالی بالا و برای استقرارهای کوچک و متوسط که در آن باید کارهای بیشتری با منابع کمتر انجام دهید، عالی است.
ساختار داکر
داکر از معماری کلاینت-سرور استفاده می کند. مشتری داکر با دیمون داکر صحبت میکند، که کارهای سنگین ساخت، اجرا و توزیع کانتینرهای داکر شما را انجام میدهد. کلاینت داکر و دیمون می توانند بر روی یک سیستم اجرا شوند، یا می توانید یک کلاینت داکر را به یک شبح داکر از راه دور متصل کنید. مشتری داکر و دیمون با استفاده از یک REST API، از طریق سوکت های یونیکس یا یک رابط شبکه با هم ارتباط برقرار می کنند. یکی دیگر از سرویس گیرندگان Docker Docker Compose است که به شما امکان می دهد با برنامه هایی که از مجموعه ای از کانتینرها تشکیل شده اند کار کنید.
The Docker daemon دیمون داکر
Docker Daemon (dockerd) به درخواستهای Docker API گوش میدهد و اشیاء Docker مانند تصاویر، کانتینرها، شبکهها و حجمها را مدیریت میکند. یک دیمون همچنین می تواند برای مدیریت سرویس های Docker با دیگر دیمون ها ارتباط برقرار کند.
The Docker client
کلاینت داکر (داکر) راه اصلی تعامل بسیاری از کاربران داکر با داکر است. وقتی از دستوراتی مانند docker run استفاده میکنید، کلاینت این دستورات را به dockerd می فرستد که آنها را اجرا می کند. دستور docker از Docker API استفاده می کند. کلاینت داکر می تواند با بیش از یک دیمون ارتباط برقرار کند.
Docker Desktop
Docker Desktop یک برنامه کاربردی با قابلیت نصب آسان برای محیط مک، ویندوز یا لینوکس است که به شما امکان میدهد برنامهها و میکروسرویسهای کانتینری را بسازید و به اشتراک بگذارید. Docker Desktop شامل Daemon Docker (dockerd)، مشتری Docker (docker)، Docker Compose، Docker Content Trust، Kubernetes و Credential Helper است. برای اطلاعات بیشتر، Docker Desktop را ببینید.
Docker registries
Translation is too long to be saved
یک رجیستری داکر تصاویر داکر را ذخیره می کند. داکر هاب یک رجیستری عمومی است که همه می توانند از آن استفاده کنند و داکر به طور پیش فرض برای جستجوی تصاویر در داکر هاب پیکربندی شده است. حتی می توانید رجیستری خصوصی خود را اجرا کنید.
هنگامی که از دستورات docker pull یا docker run استفاده می کنید، تصاویر مورد نیاز از رجیستری پیکربندی شده شما خارج می شوند. هنگامی که از دستور فشار docker استفاده می کنید، تصویر شما به رجیستری پیکربندی شده شما منتقل می شود.
Docker objects
هنگامی که از Docker استفاده می کنید، در حال ایجاد و استفاده از تصاویر، کانتینرها، شبکه ها، حجم ها، پلاگین ها و سایر اشیاء هستید. در این بخش مروری کوتاه بر برخی از آن اشیا است.
Images(تصاویر)
یک تصویر(ایمیج) یک الگوی فقط خواندنی با دستورالعملهایی برای ایجاد یک ظرف Docker است. اغلب، یک تصویر بر اساس یک تصویر دیگر، با برخی سفارشیسازیهای اضافی است. به عنوان مثال، ممکن است تصویری بسازید که بر اساس تصویر اوبونتو باشد، اما وب سرور آپاچی و برنامه شما و همچنین جزئیات پیکربندی مورد نیاز برای اجرای برنامه شما را نصب کند.
شما ممکن است ایمیجهای خود را ایجاد کنید یا فقط از ایمیجهای استفاده کنید که توسط دیگران ایجاد شده و در یک رجیستری منتشر شده اند. برای ساختن ایمیج خود، یک Docker file با یک نحو ساده برای تعریف مراحل مورد نیاز برای ایجاد ایمیج و اجرای آن ایجاد میکنید. هر دستورالعمل در Docker file یک لایه در image ایجاد می کند. وقتی Docker file را تغییر میدهید و ایمیج را بازسازی میکنید، تنها لایههایی که تغییر کردهاند بازسازی میشوند. این بخشی از چیزی است که ایمیجها را در مقایسه با سایر فناوری های مجازی سازی بسیار سبک، کوچک و سریع می کند.
Containers
کانتینر یک نمونه قابل اجرا از یک تصویر(ایمیج) است. میتوانید با استفاده از Docker API یا CLI یک محفظه ایجاد، شروع، توقف، حرکت یا حذف کنید. میتوانید یک ظرف را به یک یا چند شبکه متصل کنید، فضای ذخیرهسازی را به آن متصل کنید یا حتی یک تصویر جدید بر اساس وضعیت فعلی آن ایجاد کنید.
به طور پیش فرض، یک کانتینر به خوبی از سایر کانتینرها و ماشین میزبان آن جدا شده است. میتوانید کنترل کنید که شبکه، ذخیرهسازی، یا سایر زیرسیستمهای زیرین یک کانتینر چقدر از کانتینرهای دیگر یا از ماشین میزبان جدا هستند.
یک ظرف با تصویر آن و همچنین هر گزینه پیکربندی که هنگام ایجاد یا شروع به آن ارائه می دهید، تعریف می شود. هنگامی که یک ظرف برداشته می شود، هر گونه تغییر در وضعیت آن که در ذخیره سازی دائمی ذخیره نمی شود ناپدید می شود.
مثال دستور اجرای docker
دستور زیر یک ظرف اوبونتو را اجرا می کند، به صورت تعاملی به جلسه خط فرمان محلی شما متصل می شود و /bin/bash را اجرا می کند.
docker run -i -t ubuntu /bin/bash
هنگامی که این دستور را اجرا می کنید، موارد زیر اتفاق می افتد (با فرض اینکه از پیکربندی پیش فرض رجیستری استفاده می کنید):
- اگر تصویر اوبونتو را به صورت محلی ندارید، داکر آن را از رجیستری پیکربندی شده شما خارج میکند، گویی که docker pull ubuntu را به صورت دستی اجرا کردهاید.
- Docker یک کانتینر جدید ایجاد می کند، گویی که شما دستور ایجاد کانتینر docker را به صورت دستی اجرا کرده اید.
- Docker یک فایل سیستم خواندن و نوشتن را به کانتینر به عنوان لایه نهایی آن اختصاص می دهد. این به یک ظرف در حال اجرا اجازه می دهد تا فایل ها و دایرکتوری ها را در سیستم فایل محلی خود ایجاد یا تغییر دهد.
- Docker یک رابط شبکه برای اتصال کانتینر به شبکه پیش فرض ایجاد می کند، زیرا شما هیچ گزینه شبکه ای را مشخص نکرده اید. این شامل اختصاص یک آدرس IP به کانتینر است. به طور پیش فرض، کانتینرها می توانند با استفاده از اتصال شبکه دستگاه میزبان به شبکه های خارجی متصل شوند.
- داکر کانتینر را راه اندازی کرده و /bin/bash را اجرا می کند. از آنجایی که کانتینر به صورت تعاملی در حال اجرا است و به ترمینال شما متصل است (به دلیل پرچم های -i و -t)، می توانید ورودی را با استفاده از صفحه کلید خود در حالی که خروجی در ترمینال شما ثبت شده است، ارائه دهید.
- هنگامی که exit را برای پایان دادن به دستور /bin/bash تایپ می کنید، کانتینر متوقف می شود اما حذف نمی شود. می توانید آن را دوباره شروع کنید یا آن را حذف کنید.
تکنولوژی زیربنایی
Docker به زبان برنامه نویسی Go نوشته شده است و از چندین ویژگی هسته لینوکس برای ارائه عملکرد آن بهره می برد. داکر از فناوری به نام فضاهای نامی برای ارائه فضای کاری مجزا (ایزوله) به نام کانتینر استفاده می کند. هنگامی که یک کانتینر را اجرا میکنید، داکر مجموعهای از فضاهای نامی را برای آن کانتینر ایجاد میکند.
این فضاهای نام لایهای از انزوا(ایزوله) را ارائه می دهند. هر یک از جنبه های یک کانتینر در یک فضای نام جداگانه اجرا میشود و دسترسی آن به آن فضای نام محدود میشود.