معرفی Docker
توسط sajjad
Docker مجموعه ای از محصولات پلتفرم به عنوان سرویس (PaaS) است که از مجازی سازی در سطح سیستم عامل برای ارائه نرم افزار در بسته هایی به نام کانتینر استفاده می کند. این سرویس دارای دو سطح رایگان و پریمیوم است. نرم افزاری که میزبان کانتینرها است Docker Engine نام دارد. این اولین بار در سال ۲۰۱۳ آغاز شد و توسط Docker, Inc توسعه یافت.
داکر، زیرمجموعه ای از پروژه موبی، یک چارچوب نرم افزاری برای ساخت، اجرا و مدیریت کانتینرها بر روی سرورها و ابر است. اصطلاح "docker" ممکن است به ابزارها (فرمانها و دیمون) یا فرمت فایل Dockerfile اشاره داشته باشد.
قبلاً زمانی که میخواستید یک برنامه وب را اجرا کنید، یک سرور خریداری میکردید، لینوکس را نصب میکردید، یک پشته LAMP راهاندازی میکردید و برنامه را اجرا میکردید. اگر برنامه شما محبوب شد، با راهاندازی سرور دوم، تعادل بار را به خوبی انجام دادید تا اطمینان حاصل کنید که برنامه در اثر ترافیک زیاد خراب نمیشود.
با این حال، زمان تغییر کرده است، و به جای تمرکز بر روی سرورهای منفرد، اینترنت بر روی آرایههایی از سرورهای وابسته و اضافی در سیستمی ساخته شده است که معمولاً «ابر» نامیده میشود. به لطف نوآوری هایی مانند فضاهای نام هسته لینوکس و cgroup ها، مفهوم سرور می تواند از محدودیت های سخت افزاری حذف شود و در عوض اساساً به یک نرم افزار تبدیل شود. این سرورهای مبتنی بر نرمافزار کانتینر نامیده میشوند و ترکیبی ترکیبی از سیستمعامل لینوکس هستند که روی آن اجرا میشوند، بهعلاوه یک محیط زمان اجرا بیش از حد محلی (محتوای نگهدارنده).
تاریخچهی Docker
Docker Inc. توسط Kamel Founadi، Solomon Hykes و Sebastien Pahl در طول گروه انکوباتور استارتآپ Y Combinator Summer 2010 تأسیس شد و در سال ۲۰۱۱ راهاندازی شد. این استارتآپ همچنین یکی از ۱۲ استارتآپ در گروه اول Founder's Den بود. هایکس پروژه Docker را در فرانسه به عنوان یک پروژه داخلی در داخل dotCloud، یک شرکت پلت فرم به عنوان یک سرویس، آغاز کرد.
Docker در سال ۲۰۱۳ در سانتا کلارا در PyCon برای عموم عرضه شد. در مارس ۲۰۱۳ به عنوان منبع باز منتشر شد. در آن زمان از LXC به عنوان محیط اجرای پیش فرض خود استفاده می کرد. یک سال بعد، با انتشار نسخه ۰.۹، Docker جایگزین LXC با کامپوننت مخصوص به خود، libcontainer که به زبان برنامه نویسی Go نوشته شده بود، شد.
در سال ۲۰۱۷، داکر پروژه موبی را برای تحقیق و توسعه باز ایجاد کرد.
پیشینه
کانتینرها از یکدیگر جدا می شوند و نرم افزار، کتابخانه ها و فایل های پیکربندی خود را بسته بندی می کنند. آنها می توانند از طریق کانال های کاملاً مشخص با یکدیگر ارتباط برقرار کنند. از آنجایی که همه کانتینرها خدمات یک هسته سیستم عامل را به اشتراک می گذارند، از منابع کمتری نسبت به ماشین های مجازی استفاده می کنند.
فناوری کانتینر را می توان در سه دسته مختلف در نظر گرفت:
Builder: ابزار یا مجموعه ای از ابزارهای مورد استفاده برای ساخت کانتینر، مانند distrobuilder برای LXC یا Dockerfile برای Docker.
Engine: برنامه ای است که برای اجرای یک کانتینر استفاده می شود. برای Docker، این به دستور docker و daemon dockerd اشاره دارد. برای دیگران، این می تواند به دیمون کانتینر و دستورات مربوطه (مانند podman) اشاره کند.
ارکستراسیون: فناوری مورد استفاده برای مدیریت بسیاری از کانتینرها، از جمله Kubernetes و OKD.
کانتینرها اغلب هم یک برنامه کاربردی و هم پیکربندی را ارائه می دهند، به این معنی که یک sysadmin در مقایسه با زمانی که یک برنامه از یک منبع سنتی نصب می شود، نیازی به صرف زمان زیادی برای اجرای یک برنامه در یک کانتینر ندارد. Dockerhub و Quay.io مخازنی هستند که تصاویر را برای استفاده توسط موتورهای کانتینر ارائه می دهند.
با این حال، بزرگترین جذابیت کانتینرها، توانایی آنها برای «مردن» برازنده و باززایی در زمانی است که تعادل بار به آن نیاز دارد. خواه از بین رفتن کانتینر به دلیل خرابی باشد یا به دلیل اینکه دیگر نیازی به آن نیست زیرا ترافیک سرور کم است، کانتینرها برای شروع "ارزان" هستند و به گونه ای طراحی شده اند که یکپارچه ظاهر و ناپدید شوند. از آنجایی که کانتینرها باید زودگذر باشند و هر چند وقت یکبار که لازم است نمونه های جدید تولید کنند، انتظار می رود که نظارت و مدیریت آنها توسط انسان در زمان واقعی انجام نشود، بلکه به صورت خودکار انجام شود.
طریقه کار
Docker می تواند یک برنامه کاربردی و وابستگی های آن را در یک محفظه مجازی بسته بندی کند که می تواند روی هر رایانه لینوکس، ویندوز یا macOS اجرا شود. این برنامه را قادر میسازد تا در مکانهای مختلف، مانند درون محل، به صورت عمومی (به محاسبات غیرمتمرکز، محاسبات توزیعشده، و محاسبات ابری مراجعه کنید) یا ابر خصوصی اجرا شود. هنگامی که در لینوکس اجرا می شود، داکر از ویژگی های جداسازی منابع هسته لینوکس (مانند cgroup ها و فضاهای نام هسته) و یک سیستم فایل با قابلیت اتحاد (مانند OverlayFS) استفاده می کند تا به کانتینرها اجازه دهد تا در یک نمونه لینوکس اجرا شوند و از سربار آن جلوگیری شود. راه اندازی و نگهداری ماشین های مجازی Docker در macOS از یک ماشین مجازی لینوکس برای اجرای کانتینرها استفاده می کند.
از آنجایی که کانتینرهای Docker سبک وزن هستند، یک سرور یا ماشین مجازی می تواند چندین کانتینر را به طور همزمان اجرا کند. یک تجزیه و تحلیل در سال ۲۰۱۸ نشان داد که یک مورد استفاده معمولی از Docker شامل اجرای هشت کانتینر در هر میزبان است و یک چهارم سازمان های تجزیه و تحلیل شده ۱۸ یا بیشتر در هر میزبان را اجرا می کنند.
پشتیبانی هسته لینوکس از فضاهای نام عمدتاً دیدگاه برنامه را از محیط عملیاتی، از جمله درخت های پردازش، شبکه، شناسه های کاربر و سیستم های فایل نصب شده جدا می کند، در حالی که cgroup های هسته محدودیت منابع را برای حافظه و CPU فراهم می کنند. از نسخه ۰.۹، داکر شامل مؤلفه خود (به نام "libcontainer") برای استفاده از امکانات مجازی سازی ارائه شده مستقیماً توسط هسته لینوکس، علاوه بر استفاده از رابط های مجازی سازی انتزاعی از طریق libvirt، LXC و systemd-nspawn است.
Docker یک API سطح بالا را برای ارائه کانتینرهای سبک وزن پیاده سازی می کند که فرآیندها را به صورت مجزا اجرا می کند. محفظههای Docker فرآیندهای استانداردی هستند، بنابراین میتوان از ویژگیهای هسته برای نظارت بر اجرای آنها استفاده کرد - از جمله استفاده از ابزارهایی مانند strace برای مشاهده و واسطهگری فراخوانهای سیستم.
اجزاء Docker
نرم افزار داکر به عنوان یک سرویس ارائه دهنده از سه جزء تشکیل شده است:
نرمافزار: داکر دیمون که داکرد نامیده میشود، یک فرآیند دائمی است که کانتینرهای داکر را مدیریت میکند و اشیاء کانتینر را مدیریت میکند. دیمون به درخواست های ارسال شده از طریق Docker Engine API گوش می دهد. برنامه مشتری داکر که داکر نامیده می شود، یک رابط خط فرمان (CLI) ارائه می دهد که به کاربران اجازه می دهد با شیاطین داکر تعامل داشته باشند.
اشیاء: اشیاء داکر موجودیت های مختلفی هستند که برای جمع آوری یک برنامه کاربردی در داکر استفاده می شوند. کلاس های اصلی اشیاء داکر تصاویر، کانتینرها و سرویس ها هستند.
کانتینر داکر یک محیط استاندارد و محصور شده است که برنامه ها را اجرا می کند. یک کانتینر با استفاده از Docker API یا CLI مدیریت می شود.
یک تصویر داکر یک الگوی فقط خواندنی است که برای ساخت کانتینرها استفاده می شود. از تصاویر برای ذخیره و ارسال برنامه ها استفاده می شود.
یک سرویس Docker به کانتینرها اجازه می دهد تا در چندین شیطان داکر مقیاس شوند. نتیجه به عنوان یک ازدحام شناخته می شود، مجموعه ای از دیمون های همکاری که از طریق Docker API ارتباط برقرار می کنند.
رجیستری ها: رجیستری داکر مخزنی برای تصاویر داکر است. کلاینت های Docker برای دانلود ("کشش") تصاویر برای استفاده یا آپلود ("فشار") تصاویری که ساخته اند به رجیستری ها متصل می شوند. رجیستری ها می توانند عمومی یا خصوصی باشند. ثبت عمومی اصلی Docker Hub است. Docker Hub رجیستری پیشفرض است که Docker به دنبال تصاویر میگردد. ثبت Docker همچنین امکان ایجاد اعلانها را بر اساس رویدادها فراهم میکند.
ابزار
Docker Compose ابزاری برای تعریف و اجرای برنامه های Docker چند کانتینری است. از فایلهای YAML برای پیکربندی سرویسهای برنامه استفاده میکند و فرآیند ایجاد و راهاندازی همه کانتینرها را با یک فرمان انجام میدهد. ابزار docker-compose CLI به کاربران اجازه می دهد تا دستورات را روی چندین کانتینر به طور همزمان اجرا کنند، به عنوان مثال، ساختن تصاویر، مقیاس بندی کانتینرها، اجرای کانتینرهایی که متوقف شده اند و موارد دیگر. دستورات مربوط به دستکاری تصویر، یا گزینههای تعاملی کاربر، در Docker Compose مرتبط نیستند، زیرا آنها یک ظرف را نشان میدهند. فایل docker-compose.yml برای تعریف سرویس های یک برنامه کاربردی استفاده می شود و شامل گزینه های پیکربندی مختلف است. به عنوان مثال، گزینه build گزینه های پیکربندی مانند مسیر Dockerfile را تعریف می کند، گزینه فرمان به فرد اجازه می دهد تا دستورات پیش فرض Docker و موارد دیگر را لغو کند. اولین نسخه بتای عمومی Docker Compose (نسخه ۰.۰.۱) در ۲۱ دسامبر ۲۰۱۳ منتشر شد. اولین نسخه آماده تولید (۱.۰) در ۱۶ اکتبر ۲۰۱۴ در دسترس قرار گرفت.
Docker Swarm عملکرد خوشهبندی بومی را برای کانتینرهای Docker فراهم میکند که گروهی از موتورهای Docker را به یک موتور Docker مجازی تبدیل میکند. در Docker 1.12 و بالاتر، حالت Swarm با Docker Engine یکپارچه شده است. ابزار docker swarm CLI به کاربران این امکان را میدهد تا کانتینرهای Swarm را اجرا کنند، نشانههای کشف ایجاد کنند، گرهها را در خوشه فهرست کنند و موارد دیگر. ابزار docker node CLI به کاربران اجازه می دهد تا دستورات مختلفی را برای مدیریت گره ها در یک ازدحام اجرا کنند، به عنوان مثال، فهرست کردن گره ها در یک ازدحام، به روز رسانی گره ها، و حذف گره ها از ازدحام. داکر با استفاده از الگوریتم اجماع Raft، گروه ها را مدیریت می کند. به گفته Raft، برای انجام به روز رسانی، اکثر گره های Swarm باید در مورد به روز رسانی به توافق برسند.
Docker Volume تداوم مستقل داده ها را تسهیل می کند و به داده ها اجازه می دهد حتی پس از حذف یا ایجاد مجدد کانتینر باقی بمانند.
چرا از Docker استفاده کنیم
یکی از نکات مهم در مورد منبع باز این است که شما حق انتخاب دارید که از چه فناوری برای انجام یک کار استفاده کنید. موتور داکر می تواند برای توسعه دهندگان تنها که به محیطی سبک و تمیز برای آزمایش نیاز دارند، اما بدون نیاز به هماهنگی پیچیده مفید باشد. اگر Docker در سیستم شما موجود است و همه اطرافیان شما با زنجیره ابزار Docker آشنا هستند، Docker Community Edition (docker-ce) یک راه عالی برای شروع کار با کانتینرها است.
Dockerhub و Quay.io مخازنی هستند که تصاویر را برای موتور کانتینر انتخابی شما ارائه می دهند. اگر Docker Community Edition در دسترس نیست یا پشتیبانی نمیشود، Podman گزینه عاقلانهای است. تلاش برای اطمینان از حاکمیت استانداردهای باز ادامه دارد، بنابراین استراتژی بلندمدت مهم برای راه حل کانتینر شما باید این باشد که به پروژه هایی پایبند باشید که به استانداردهای منبع باز و باز احترام گذاشته و آنها را تقویت می کنند. موارد اضافی اختصاصی ممکن است در ابتدا جذاب به نظر برسند، اما همانطور که معمولاً اتفاق میافتد، هنگامی که ابزارهای خود را به محصولی که اجازه مهاجرت را نمیدهد متعهد کنید، انعطافپذیری انتخاب را از دست میدهید. کانتینرها می توانند آزاد کننده باشند، به شرطی که آزاد باشند.
پست های توصیه شده
کلان داده
14 مهر, 1402
تحول دیجیتال
14 مهر, 1402
تجزیه و تحلیل داده ها
14 مهر, 1402