در مورد Docker:
داکر یک پلتفرم متن باز برای توسعه و اجرای برنامهها است. داکر به شما این امکان را میدهد که برنامههای خود را از زیرساخت شبکه و سامانه ها جدا کنید تا بتوانید نرمافزار را به سرعت تحویل دهید. با بهرهمندی از روشهای داکر shipping, testing و deploying کد، میتوانید تأخیر بین نوشتن کد و اجرای آن در محیط تولید را به طرز قابل توجهی کاهش دهید. این مورد می تواند با استفاده از CI/CD سرعت بیشتری بگیرد که در مورد آن صحبت خواهیم کرد.
پلتفرم داکر:
داکر امکان بستهبندی و اجرای یک برنامه را در یک محیط به نام “کانتینر” فراهم میکند. و شما به سادگی می توانید ارتباط بین کانتینرها را کنترل کنید این امنیت به شما اجازه میدهد تا بسیاری از کانتینرها را به صورت همزمان بر روی یک میزبان اجرا کنید. کانتینرها بیسار سبک هستند و همه چیزی که برای اجرای برنامه لازم است را شامل میشوند، بنابراین نیازی به اتکا به آنچه در میزبان نصب شده است ندارید. میتوانید کانتینرها را در حین کار به اشتراک بگذارید و اطمینان حاصل کنید که هر کسی که با آنها به اشتراک میگذارید، همان کانتینری را که به همان شیوه کار میکند، دریافت میکند.
داکر ابزارها و یک پلتفرم را برای مدیریت چرخه زندگی کانتینرهای شما فراهم میکند:
کانتینر به عنوان محیطی برای توسعه و آزمون برنامه شما محسوب می شود. هنگامی که آماده باشید، برنامه خود را به محیط تولید خود، به عنوان یک کانتینر یا خدمت تنظیمشده، استقرار دهید. این کار بر روی یک مرکز داده محلی، ارائهدهنده ابر، یا ترکیبی از هر دو، به یک شکل یکسان انجام میشود. که خود آن ابر نیز بر روی یک محیط داکر بیس مستقر است
استفاده از داکر:
تحویل سریع و مداوم برنامهها: داکر چرخه توسعه را با اجازه به توسعهدهندگان برای کار در محیطهای استاندارد با استفاده از کانتینرهای محلی ساده و سریع میکند. این موضوع به دلیل عدم نیاز به زیرساخت های شبکه و ارتباطی است. این موضوع همان CI/CD یا ontinuous integration and continuous delivery/deployment است.
استقرار و جابه جایی بالا: پلتفرم مبتنی بر کانتینر داکر امکان نگهداری و انتقال و جابه جایی بسیار بالای دارد. کانتینرهای داکر میتوانند بر روی لپتاپ توسعهدهنده، بر روی ماشینهای فیزیکی یا مجازی در یک مرکز داده، بر روی ارائهدهندگان ابر، یا در ترکیب محیطها اجرا شوند. قابلیت حملونقلپذیری و ویژگیهای سبک داکر نیز امکان مدیریت دینامیک را فراهم می کند. همچنین با استفاده از داکر به راحتی می توانید منابع داخل کانتینر را افزایش یا کاهش دهید
امکان اجرای تعداد برنامه بیشتر در یک سختافزار مانند سرور HP: داکر سبک و سریع است. این گزینه جایگزین مقرونبهصرفه برای ماشینهای مجازی مبتنی بر هایپرووایزر است، بنابراین میتوانید از ظرفیت سرور خود برای دستیابی به اهداف تجاری خود استفاده کنید. اگر بخواهیم توضیح ساده تری بدهیم و ساختار داکر را با هایپروایزهایی همچون ESXI مقایسه کنیم باید بگوییم ساده ترین موضوع در داکر این است که بر خلاف ESXI در داکر برای کانتینر های مختلف نیازی به سیستم عامل مجزا نیست و کانتینرها از سیستم عامل هاست استفاده می کنند . اما در ESXI هر ماشین مجازی ابتدا باید بر مبنای یک OS نصب شود . ممکن است در یک سرور HP صدها ماشین مجازی با سیستم عامل ویندوز یا لینوکس وجود داشته باشد که بر روی هر ماشین مجازی فقط یک وب سرور و دیتابیس نصب شده باشد و به سایر امکانات سیستم عامل نیازی نباشد . با توجه به این موضوع چرا باید برای هر ماشین مجازی یک سیستم عامل مجزا در نظر بگیریم؟
معماری داکر:
داکر از یک معماری کلاینت-سرور استفاده میکند. کلاینت داکر با دیمون سرویس (Daemon) داکر صحبت میکند که وظایف سنگین ساخت، اجرا و توزیع کانتینرهای داکر را انجام میدهد. کلاینت و دیمون داکر میتوانند در یک سیستم واحد اجرا شوند، یا میتوانید یک کلاینت داکر را به یک دیمون داکر از راه دور متصل کنید. کلاینت و دیمون داکر از طریق یک رابط REST API ارتباط برقرار میکنند، از طریق سوکتهای یونیکس یا یک رابط شبکه. مثالی دیگر از کلاینت داکر، Docker Compose است که به شما امکان کار با برنامههایی که از مجموعهای از کانتینرها تشکیل شدهاند، را میدهد.
دیمون داکر:
دیمون داکر یا (dockerd) به درخواستهای API داکر گوش میدهد و هر چیزی در داکر مانند ایمیج ها ، کانتینرها، شبکهها و فایل ها را مدیریت میکند. یک دیمون میتواند با دیمونهای دیگر ارتباط برقرار کند تا خدمات داکر را مدیریت کند.
مشتری داکر:
مشتری داکر یا همان خط فرمان داکر (docker) اصلیترین راه ارتباط بسیاری از کاربران داکر با سرویس داکر است. هنگام استفاده از دستورات مانند docker run، مشتری این دستورات را به سرویس داکر ارسال کرده و سرویس داکر آنها را اجرا میکند. دستور docker از API داکر استفاده میکند و مشتری داکر میتواند با بیش از یک دیمون ارتباط برقرار کند.
داکر دسکتاپ:
داکر دسکتاپ یک برنامه آسان برای نصب در محیط Mac، Windows یا Linux شما است که به شما این امکان را میدهد که برنامهها و خدمات کانتینریشده را ایجاد و به اشتراک بگذارید. داکر دسکتاپ شامل دیمون داکر (dockerd)، مشتری داکر (docker)، Docker Compose، Docker Content Trust، Kubernetes و Credential Helper است. داکر دسکتاپ به نوعی یک اپلیکیشن است که می تواند تحت وب باشد. به عنوان مثال اپلیکیشن Portainer که به راحتی با یک خط دستور در داکر نصب می شود و پس از آن یک محیط وب بیس برای مدیریت کانتینر ها در اختیار شما قرار می دهد. برای تست می توانید از دستور
docker run -d -p 8000:8000 -p 9443:9443 –name portainer –restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
استفاده کنید. در این حالت ایمیج portainer/portainer-ce:latest نصب خواهد شد و پس از آن با آدرس https://localhost:9443 در اختیار شما قرار خواهد گرفت . (به جای localhost از آدرس ip سرور خود استفاده کنید)
در جلسات بعدی توضیحات مفصلی در مورد دستورات داکر ارائه خواهیم کرد
رجیسترهای داکر:
رجیستری داکر Image های داکر را ذخیره میکند. Docker Hub یک رجیستری عمومی است که هرکس میتواند از آن استفاده کند و داکر به طور پیشفرض برای ذخیره و نگهداری و دانلود Image ها آن را جستجو میکند. شما حتی میتوانید رجیستری خصوصی خود را اجرا کنید. یک توضیح ساده در مورد داکر رجیستری این است که منظور همان ریپوزیتوری است . در واقع داکر یک repository برای نگهداری ایمیج های خود دارد و از آن استفاده می کند ما می توانیم repo خود را راه اندازی کنیم
وقتی از دستورات docker pull یا docker run استفاده میکنید، سرویس داکر Image مورد نیاز را از رجیستری یا همان ریپوزیتوری دریافت میکند. وقتی از دستور docker push استفاده میکنید، داکر ایمیجی که شما تولید کرده اید را به رجیستری یا repo ارسال میکند.
اجزا یا همان object های داکر:
زمانی که از داکر استفاده میکنید، همه چیز شبیه به یک ماژول یا شیء دیده می شود که با استفاده از یک API به یکدیگر متصل می شوند به عنوان مثالی از Object ها می توان به ایمیج ها، کانتینرها، شبکهها، فایل ها، افزونهها و سایر موارد اشاره کرد. پس اگر بخواهیم یک وب سایت در داکر درست کنیم و آن را به مخاطبین ارائه کنیم باید از اشیا مختلفی برای این کار استفاده شود . مثلا برای ارتباط با شبکه باید برای کانتینر خود کارت شبکه بسازیم
Image ها:
ایمیج ها مهم ترین قسمت داکر هستند و اگر این قسمت را متوجه شوید به سادگی داکر را درک می کنید . زمانیکه ما قصد نصب یک ویندوز سرور را داریم از ایمیج آن استفاده می کنیم و سرور نصب می شود حال اگر بخواهیم یک کانتینر در داکر راه اندازی کنیم هم نیاز به ایمیج آن کانتینر داریم . به عنوان نمونه اگر نیاز به نصب وب سرویس nginx داشته باشیم باید ایمیج nginx را از رجیستری داکر یا همان ریپوزیتوری دانلود و اجرا کنیم . ایمیج های داکر به نسبت ایمیج یک ویندوز سرور بسیار سبک تر هستند . و به همین دلیل به سرعت راه اندازی می شوند . حالت دیگری که برای ایمیج های داکر وجود دارد , ساخت یک ایمیج داکر است برای این کار می توانیم یک ایمیج از Alpine که سبک ترین لینوکس است (حدود 7 مگ است ) را دانلود کنیم و پس از راه اندازی کانتینر Alpine بر روی آن nginx را نصب کرده و مجموع آن ها را تحت عنوان یک ایمیج جدید ذخیره کنیم
برای ساختن یک Image جدید می توانیم از یک Dockerfile استفاده کنیم. هر دستور در یک Dockerfile یک لایه در Image ایجاد میکند. هنگامی که Dockerfile را تغییر دهید و ایمیج را دوباره بسازید، تنها لایههایی که تغییر کردهاند دوباره ساخته میشوند. این بخشی از خصوصیات ایمیج ها است که آنها را نسبت به فناوریهای مجازیسازی دیگر سبک، کوچک و سریع تر میسازد. توضیحات مفصلی در مورد این لایه ها و نحوه کار با داکر فایل در ویدئو ارائه خواهد شد
کانتینرها:
کانتینر در واقع یک ایمیج است که اجرا شده است. شما میتوانید یک کانتینر ایجاد، متوقف یا حذف کنید با استفاده ازدستوراتی همچون Docker run یا Docker start یا Docker stop یا Docker rm . شما میتوانید کنترل کنید که یک کانتینر چقدر از منابع را استفاده کند. دقیقا شبیه به کاری که در Esxi یا Vmware Worksatation انجام می دهید
دستور مثال docker run برای راه اندازی یک کانتینر :
docker run -d –name my_container -p 8080:80 my_image
docker run -d –name web1 -p 8080:80 nginx
دستور Docker run برای اجرای یک کانتینر است . البته اگر ایمیج راه اندازی کانتینر مورد نظر را قبلا دانلود نکرده باشیم . این دستور ابتدا ایمیج را دانلود می کند و پس از آن اقدام به راه اندازی کانتینر می نماید .
اگر بخواهیم ابتدا ایمیج را دانلود کنیم از دستور Docker pull استفاده می کنیم
-d: اجرای کانتینر در حالت دیتاچ (دیتاچ – detached mode) : این امکان را می دهد که بعدا به کانتینر وارد شویم
–name my_container: اختصاص نام به کانتینر (در اینجا نام “my_container”)
-p 8080:80: پورت فورواردینگ، به این معنی که پورت 80 درون کانتینر به پورت 8080 در هاست Map یا همان فوروارد می شود.
my_image: نام Image که بر اساس آن کانتینر اجرا میشود.
نکته : داکر یک فایلسیستم با قابلیت R/W (خواندن و نوشتن) به عنوان لایه نهایی به کانتینر اختصاص میدهد. و بدین صورت این امکان را به کانتینر میدهد که فایلها و دایرکتوریها را در فایلسیستم محلی خود ایجاد یا تغییر دهد.
نکته : داکر یک کارت شبکه یا اینترفیس ایجاد میکند تا کانتینر را به کارت شبکه سروری که بر روی آن راه اندازی شده است متصل کند
تکنولوژی زیرساخت:
داکر با زبان برنامهنویسی Go نوشته شده است و از چند ویژگی از هسته لینوکس برای ارائه قابلیتهای خود استفاده میکند. داکر از تکنولوژی به نام فضاهای نام (namespaces) برای فراهم کردن فضای کاری کانتینر استفاده میکند. هنگامی که یک کانتینر اجرا میشود، داکر یک مجموعه از فضاهای نام برای آن کانتینر ایجاد میکند.