معرفی ابزارهای کنار داکر:
توی این پست میخوایم در مورد ابزارهای جانبی که اومدن برای کار کردن با داکر رو معرفی کنیم و ببینیم هرکدومشون توی چه مسالهای بهمون کمک میکنه.
خب یه مروری کنیم پستهای قبلی رو:
دواپس چیه و چرا لازمه؟ اینجا در مورد دواپس و ضرورت استفاده از آن صحبت کردم.
چطور اپلیکیشن مناسب کلاد آماده کنیم؟ و اینجا توضیح دادم که چطور میتونیم یه اپلیکیشن مناسب کلاد توسعه بدیم.
چه عمقی از لینوکس برای دواپس لازمه؟ و اینجا توضیح دادم که کدوم موارد لینوکس برای دواپس الزامی هست که اول سراغ اون موارد بریم.
خودکارش کن,مشکلاتت حل میشه در اینجا در مورد اتومیشن و اینکه انسیبل چیه و چه کمکی به ما میکنه صحبت کردم.
در مسیر دواپس اینبار اجزای اصلی انسیبل تو این پست اجزای انسیبل رو معرفی کردم و آنها را شرح دادم.
در مسیر دواپس به داکر رسیدیم (قسمت اول) تو این پست داکر رو شروع کردیم و اونو معرفی کردیم.
در مسیر دواپس اینبار: پشت داکر چه خبره؟ (قسمت دوم) توی این پست در مورد تکنولوژی هایی که داکر ازشون استفاده میکنه توضیح دادیم.
تست نوشتن و شروع مسیر CI/CD (قسمت اول) توی این پست انواع تست رو بررسی کردیم و با ابزارهای CI/CD آشنا شدیم و یه مقایسه بین گیتلب و جنکینز داشتیم.
در مسیر CI/CD گیت رو بررسی میکنیم (قسمت دوم) توی این پست قبل ورود به گیتلب نیاز بود که گیت و ورژن کنترل سیستم ها رو یه بررسی کنیم.
در مسیر CI/CD شناخت گیتلب (قسمت سوم) توی این پست اجزای گیتلب رو بررسی کردیم و با کامپوننتهای مختلفی که داره بیشتر آشنا شدیم.
در مسیر CI/CD پایپلاین و رانر گیتلب (قسمت چهارم) توی این پست پایپلاین و رانر گیتلب رو بررسی کردیم.
در مسیر CI/CD وریبل، گیتآپس و جمعبندی (قسمت پنجم) توی این پست وریبلهای گیتلب رو بررسی کردیم و یه معرفی کوتاه از گیتآپس و آتودواپس کردیم و در انتها یه مقدار تجربههای خودم رو در گیتلب باهاتون به اشتراک گذاشتم.
در مسیر Observability، الک (قسمت دوم) توی این پست استک قدرتمند ELK رو بررسی کردیم.
در مسیر Observability، جمع بندی استک الک (قسمت سوم) توی این پست بقیه کامپوننتهای استک الک رو بررسی کردیم و fluentd و fluentbit رو مقایسه کردیم و نهایتا یه معرفی هم روی opensearch داشتیم.
در مسیر Observability، استک پرومتئوس (قسمت چهارم) توی این پست یه معرفی اولیه داشتیم روی استک پرومتئوس.
در مسیر Observability، استک پرومتئوس (قسمت پنجم) توی این پست یه مقدار کامپوننت های استک پرومتئوس رو بیشتر بررسی کردیم.
در مسیر Observability، استک ویکتوریا (قسمت ششم) توی این پست استک ویکتوریا رو معرفی کردیم و سعی کردیم با پرومتئوس مقایسهاش کنیم.
در مسیر Observability، میمیر (قسمت هفتم) توی این پست در مورد ابزار میمیر از ابزارهای گرافانا توضیح دادیم و کاربردش رو بررسی کردیم.
در مسیر Observability، لوکی (قسمت هشتم) توی این پست در مورد ابزار گرافانا برای مدیریت لاگ یعنی لوکی توضیح دادیم و آخرشم یه معرفی کوتاه رو graylog داشتیم.
در مسیر Observability، تمپو (قسمت نهم) توی این پست در مورد تریسینگ توضیح دادیم و گرافانا تمپو رو بررسی کردیم و یه معرفی کوتاه روی Jaeger داشتیم
در مسیر Observability، گرافانا (قسمت دهم) توی این پست در مورد گرافانا و HA کردنش و همچنین یه سری از ابزارهاش مثل alloy , incident, on-call توضیح دادیم.
آغاز مسیر کوبر (قسمت اول) تو این قدم به معرفی ابزارهای ارکستریشن پرداختیم و مدارک کوبرنتیز رو بررسی کردیم.
کوبر سینگل ( قسمت دوم ) توی این قدم در مورد kubectl , kubeconfig توضیح دادیم و تعدادی ابزار رو معرفی کردیم که به کمک اونها میتونیم یک کوبرنتیز دمهدستی واسه تستهامون داشته باشیم.
کامپوننتهای کوبر ( قسمت سوم ) توی این پست کامپوننتهای مختلف کوبرنتیز رو بررسی کردیم و اجزای نودهای مستر و ورکر رو دونه دونه بررسی کردیم و توضیح دادیم.
پادها و مدیریت اونها در کوبرنتیز (قسمت چهارم) توی این پست در مورد پاد توی کوبرنتیز توضیح دادیم و موارد مربوط به اون رو بررسی کردیم.
ورکلودهای کوبر و مدیریت منابع کوبر (قسمت پنجم) توی این پست در مورد namespaceها توی کوبر توضیح دادیم و انواع ورکلود کوبر رو بررسی کردیم.
اگه لازم شد کوبر خودش گنده میشه! ( قسمت ششم ) توی این پست در مورد سه نوع ورکلود مرتبط با scaling به صورت خودکار در کوبرنتیز توضیح دادیم.
نتورک کوبر (قسمت هفتم) توی این قسمت انواع سرویس توی کوبرنتیز رو بررسی کردیم و در مورد مفاهیم اینگرس و نتورک پالیسی توضیح دادیم.
استورج کوبرنتیز (قسمت هشتم) توی این قسمت در مورد انواع استورج توی کوبرنتیز توضیح دادیم و مفاهیم PV و PVC و Storage Class رو بررسی کردیم.
پراب، ریکوئست و لیمیت (قسمت نهم) توی این قسمت موارد مربوط به محدود کردن منابع کانتینر توی کوبرنتیز رو بررسی کردیم و در مورد انواع probe ها توی کوبرنتیز توضیح دادیم.
پاد تو نود (قسمت دهم) توی این قسمت درمورد فرآیند انتقال پاد به نود مناسب مفاهیم پیشرفتهتری مثل affinity و anti-affinity و taint و toleration رو بررسی کردیم.
اولویت پاد و امنیت (قسمت یازدهم) توی این قسمت در مورد تعیین اولویت برای پادها و جنبههای مختلف امنیت در کوبرنتیز توضیح دادیم.
کنترل دسترسی به کوبر (قسمت دوازدهم) توی این قسمت در مورد مراحل دسترسی به api کوبرنتیز صحبت کردیم و بعدش مفاهیمی مثل سرویس اکانت رو توضیح دادیم.
دیزاین کلاستر (قسمت سیزدهم) توی این قسمت در مورد طراحی و دیزاین یک کلاستر و روشهای مختلفی که داره توضیح دادیم و همچنین تفاوت روشهای مختلف تقسیم منابع در کلاسترها را بررسی کردیم.
مالتی تننسی در کوبر (قسمت چهاردهم) توی این قسمت چالشهای مربوط به داشتن چند مستاجر بر روی کلاستر کوبرنتیز توضیح دادیم.
هلم (قسمت پانزدهم) توی این قسمت پکیج منیجر معروف کوبرنتیز یعنی Helm رو بررسی کردیم و در موردش ویژگیها و کاربردهاش توضیح دادیم.
سی آر دی و اُپراتور (قسمت شانزدهم) توی این قسمت در مورد اینکه چطوری یه ریسورس کاستوم شده به کلاستر اضافه کنیم توضیح دادیم و مفهوم اُپراتور رو توی کوبر بررسی کردیم.
نصب کلاستر با kubeadm (قسمت هفدهم) توی این قسمت قدم به قدم نحوه نصب یک کلاستر کوبرنتیز رو با استفاده از ابزار kubeadm توضیح دادیم.
نصب کلاستر با kubespray (قسمت هجدهم) توی این قسمت نحوه نصب کلاستر با یه پروژه خیلی خوب به نام کیوب اسپری که یه انسیبل خفن برای ستاپ کلاستر رائه میده رو توضیح دادیم.
نصب کلاستر با rancher (قسمت نوزدهم) توی این قسمت توضیح دادیم که چطور با استفاده از ابزار RKE یک کلاستر کوبرنتیز راهاندازی کنیم.
توصیه میکنم که حتما این پستها رو هم مطالعه کنید. بریم که ادامه بدیم.

Docker Toolbox:
ابزاری برای نصب راحت داکر به همراه مواردی که لازم میشه بر روی کامپیوتر شما که برای ویندوز و مک در دسترس هست. میتونید ابزارهایی مثل Kitematic , VirtualBox رو هم با اون نصب کنید. البته دیگه استفاده ازش قدیمی شده و با حضور docker desktop به راحتی میتونید با استفاده از آن تمام مواردی که لازم هست رو روی سیستمعامل خودتون داشته باشید.

Docker Desktop:
داکر دسکتاپ ابزار قدرتمندی هست برای بیلد و آماده کردن اپلیکیشن هاتون برای پروداکشن و کوبرنتیز و سوآرم که با هر فریمورک و زبانی برنامه نویسی و پلتفرمی کار میکند. داکر دسکتاپ برای ویندوز و مک و حتی لینوکس در دسترس هست. با استفاده از داکر دسکتاپ شما یه داشبورد هم خواهید داشت که باهاش میتونید کانتینرها و داکر خودتون رو مدیریت کنید.

Kitematic:
یه ابزار که محیط کاربری گرافیکی برای کار با داکر به ما میده و نصب سریع و آسونی داره و با داکر هاب هم به خوبی یکپارچه میشه و تجربه نزدیک و مشابهی به کامند لاین داکر رو بهتون میده. کیتماتیک اینترفیس سادهای داره اما یه اپلیکیشن تحت وب نیست. دقیقا چون دسکتاپ هست ما نیاز داریم که حتما دسکتاپ داشته باشیم تا ازش بتونیم استفاده کنیم و نمیتونیم روی سرور داشته باشیمش. البته راهحلهایی داره ولی خوب دردسر داره.

Portainer:
یک ابزار تحت وب اوپن سورس که بهمون محیط کاربری گرافیکی میده و میتونه به نود های ریموت هم وصل بشه و از سوآرم هم پشتیبانی میکنه. پورتینر رو میتونیم به عنوان یه کانتینر بالا بیاریم و نصب آسونی داره. تمام نیازهای ما برای یک رابط کاربری گرافیکی رو کامل داره و بهترین گزینه برای استفاده در زمان Swarm هست. از نکات دیگهی استفادهی این ابزار اینه که چون دسترسی کامل به سرورها و سرویسهای ما داره باید خیلی مراقبت کنیم که اطلاعات کاربری آن لیک نشه و در اختیار دیگران قرار نگیره.

Docker Machine:
داکر ماشین ابزاریه که بهمون این امکان رو میده که انجین داکر رو روی ماشین مجازی داشته باشیم و با استفاده از کامندهای داکر ماشین بتونیم اون ماشین مجازی و داکر رو کنترل کنیم. به صورت کلی زمانی که نیاز داریم یه لینوکس خیلی مینیمال داشته باشیم که داکر روش باشه خیلی میتونه کمک کنه. قبلا برای داشتن داکر تو ویندوز و مک استفاده میشد و الان دیگه زیاد کاربرد نداره ولی اگر بخوایم یه سناریوی مثلا swarm رو تست کنیم میتونه خیلی بهمون کمک کنه و به راحتی برامون ماشینها رو ستاپ کنه.

WSL:
مخفف Windows Subsystem for Linux هست، یه فیچر آپشنال ویندوز که بهمون این امکان رو میده تا برنامه های لینوکسی رو روی ویندوز اجرا کنیم. Wsl رو مایکروسافت با همکاری کنونیکال ساخته و یه جورایی یه لایه انطباق پذیر هست که امکان ران شدن برنامه های لینوکسی رو با Bash shell ورژن ویندوز ۱۰ میده. باهاش نمیشه برنامه های لینوکسی که gui دارن رو بالا آورد و همچینین امکان استفاده از تمام برنامه های لینوکسی مخصوصا برنامه هایی که در سطح پایین تری با کرنل کار میکنن رو نمیده اما به نسبت دسترسی خوبی به برنامه های پایه ای لینوکس شامل ابزارهای (GNU (GNU's Not Unix مثل find ,awk ,sed , grep و … رو میده. پکیج منیجرش هم apt هست و کلا اینکه میتونه با فایل سیستم ویندوز کار کنه جالبه و واسه اونایی که اول کار کردنشون هست و میخوان روی ویندوز بمونن ولی از لینوکس هم استفاده کنن، میتونه یه شروع نسبی خوبی باشه که روی همون ویندوز داشته باشنش. نسخه دو هم داره wsl2 که به نظر میرسه سعی کرده از هسته واقعی کرنل لینوکس روی یک ماشین مجازی استفاده کنه و امکانات بیشتری رو فراهم کنه، اگه سمت استفاده ازش میرید ترجیحا wsl2 رو نصب کنید که احتمالا مشکل کمتری رو داشته باشید مخصوصا اگه در کنارش روی ویندوزتون vm هم بالا میارید.

داکر رو میتونیم با ابزارهایی که معرفی کردیم مثل Docker Toolbox و Docker Desktop و … نصب کنیم اما پیشنهاد من اینه که اگه روی توزیع های بر پایه دبیان هستید از پکیج منیجر apt استفاده کنید و اسکریپت get-docker هم میتونه بهتون کمک کنه. پیشنهاد میکنم حتما داکر رو نصب کنید و سعی کنید باهاش کار کنید، با یه سرچ ساده میتونید به راحتی داکر رو برای خودتون نصب کنید. یه نکتهی مهم اینکه روی ویندوز شما از طریق داکر دسکتاپ به دو روش میتونید داکر داشته باشید یکی استفاده از WSL که بهتون یه لینوکس تو ویندوز میده یا با استفاده از Hyperv که براتون یه ماشین مجازی لینوکس میده که روش داکر هست.

داکر یه کمپانی آمریکایی هست و باید از قوانین این کشور پیروی کند بنابراین داکر تمام آدرس های IP مرتبط با کشورهای کوبا، ایران، کره شمالی، جمهوری کریمه، سودان و سوریه را بلاک کرده! اینکه آیا باید نام کشور ایران توی همچین لیستی باشه و عمر آدما واسه کارهای فنی به خاطر یه سری تحریم و فیلتر احمقانه و ظالمانه تلف بشه رو نمیدونم و فقط میتونم بگم که دارن خیلی ما رو اذیت میکنند. به خاطر همین تحریم تقریبا همیشه برای گرفتن ایمیج های داکر و معمولا برای نصب داکر هم به مشکل میخوریم که در ادامه یه سری راه مرسوم برای دور زدن این تحریم رو بهتون معرفی میکنم:
استفاده از شبکه مجازی خصوصی یا VPN:
اگه تو ایران زندگی میکنید براتون آشنا هست 🙂 VPN یه مفهوم کاربردی نتورکی هست که استفادههای مخصوص خودش رو داره اما متاسفانه ما اکثر مواقع برای دسترسی به اینترنت آزاد ازش استفاده میکنیم! به صورت کلی میتونیم با VPN بریم تو یه شبکهی دیگه که ما ازش استفاده میکنیم برای این که بریم تو شبکهی خارج از کشور تا دیگه تحریم و فیلتر نداشته باشیم.
استفاده از پروکسی:
که این راه هم یه جورایی شبیه روش قبل هست حالا در لایه بالاتری از شبکه که یه جورایی وقتی میبینیم کامپیوتر خودمون نمیتونه به جواب درخواستش برسه یک کامپیوتر واسط دیگه رو این وسط میذاریم و به کمک پروکسی به کامپیوترمون میگیم که سوالش رو از طریق اون واسط بپرسه و جواب رو ازش بگیره! یه جورایی شبیه همون VPN هست با این تفاوت که تو پروکسی اون نرمافزار یا درخواست رو میفرستید اما تو VPN شما دیگه کامل تو اون شبکه قرار دارید و دیگه تو شبکه خودتون نیستید.
استفاده از DNS Proxy:
شرکتهای مثل شکن یا بگذر هستن در ایران که اگر شما DNS server اونها رو استفاده کنید، میتونید به نوعی به سرویسهای تحریم شده دسترسی داشته باشید. بذارید اینطوری بهتون بگم ما از DNS server میپرسیم hub.docker.com رو به من بگو آدرس IP ش چیه و اون آدرسی که برمیگردونه IP مارو تحریم کرده حالا اگه از شکن یا سرویس های مشابه استفاده کنیم وقتی ازشون میپرسیم hub.docker.com آدرسش چیه؟ بهمون دروغ میگه! و آدرس سرور دیگه رو بهمون میده که پروکسی خودشه و بعدش از طریق اون پروکسی داره درخواست میده به داکر هاب و این طوری دیگه تحریم نمیشه. عملا درخواست ما رو به جای دیگهای میفرسته که از طریق اون به سمت سرویس اصلی ارسال میشه. جالبه بدونید که حمله ای در شبکه داریم با نام DNS hijack که کاری مشابه همین رو انجام میده. تو این حمله فرد به جای آدرس درست ما رو هدایت میکنه به سرورهای خودش و اطلاعاتی که لازم رو داره میتونه دریافت کنه. البته خودتون هم میتونید برای سرویسها و سرورهای خودتون یه DNS Proxy ایجاد کنید و به صورت هوشمندانه ازش استفاده کنید.
استفاده از رجیستری میرور:
راهی که من توصیه میکنم ازش استفاده کنیم Mirror Registry هست، ابزارهایی مثل Nexus و JFrog و Harbor هستن که به ما این امکان رو میدن که یک آینه از مخزن داکر رو با اونها روی سرور خودمون ایجاد کنیم و ایمیج هامون رو از سرور خودمون که بهتره توی شبکه محلی ما هم باشه، بگیریم. به این صورت تنها ما لازمه که پروکسی رو روی اون سرورها ایجاد کنیم و مسیر راحت دریافت ایمیجها رو از طریق آنها انجام بدیم. مکانیزم کاری آنها به این صورت است که شما درخواست دریافت ایمیج رو به سمتش میفرستید و اگر داشت بهتون میده و اگر نداشت میره سراغ منبع اصلی و از اون میگیره. حالا این ابزارها هوشمند هستند و اگر نداشتن نمیگن که نداریم بلکه دانلود میکنند و در اختیار شما قرار میدن. البته از میرور رجیستری برای نصب داکر و سرچ آن نمیتونید استفاده کنید و فقط برای دانلود ایمیج کاربرد دارد.
پلتفرم داکر خودش به عنوان به container runtime نقش ایفا نمیکنه. به این معنی که داکر مواردی مثل زیرساخت و شبکه و بیلد و ارکستریشن و امنیت و یه عالمه سرویس دیگه که به لایف سایکل یه اپلیکیشن توزیع شده کمک میکنن رو ارائه میده اما برای ران تایم از containerd استفاده میکنه. برخی از ابزارهای container runtime رو براتون میذارم:
Containerd
Cri-o
LXD
Katacontainers
کانتینر ران تایم کارش اینه که با namespace و cgroup ارتباط برقرار کنه و برامون کانتینر رو ایجاد کنه.

ایمیج کانتینرها از لایهها و پکیجهای نرمافزاری تشکیل شده که میتونن در معرض آسیبپذیریهای امنیتی باشند. داکر اسکوت راه حلی هست که توسط داکر توسعه داده شده تا به شکل فعال، به ارتقا زنجیره امنیتی نرم افزار ها کمک کنه. داکر اسکوت با آنالیز کردن ایمیج های داکر یک فهرست از کامپوننت ها با نام Software Bill Of Material یا SBOM رو که به شکل مستمر دیتابیسهای اون از آسیب پذیری های امنیتی و نقاط ضعف امنیتی آپدیت میشن، رو بر روی ایمیج تست میکنه تا برای امنیت کانتینر هاتون بهتون کمک کنه. از داکر اسکوت میتونید با داکر دسکتاپ و داکر هاب و یا کامند لاین استفاده کنید و داشبورد گرافیکی خودش رو هم داره که کمک کننده هست.
سرویس داکر همانند سرویسهای دیگه داخل لینوکس قابل سفارشیسازی و کانفیگ است. توی داکر میتونیم مواردی از قبیل گزینه های زیر رو کانفیگ کنیم.
Change Root Directory
Set Mirror Registry
Change Docker Subnet Range
Change Docker Port Bind
Change Docker Default Driver
برای کانفیگ کردن داکر سه تا راه وجود داره. راه اول از طریق اضافه کردن فایل کانفیگ به مسیر زیر هست.
/etc/systemd/system/docker.service.d/override.conf
که مثلا فایلی رو با نام override.conf توی این مسیر میذاریم که داخلش با فرمتی شبیه سرویس فایل هایی که برای سرویس های لینوکسی که با systemd اجراشون میکنیم، کانفیگ هامون رو مینویسیم و بعد از آن باید daemon رو ریلود کنیم و داکر رو ریاستارت کنیم. این روش دقیقا روش کانفیگ با استفاده از systemd فایل هست که برای همهی سرویسهای لینوکس کاربرد دارد.
راه دوم برای کانفیگ کردن داکر هم از طریق تغییر کانفیگ daemon که در قالب json توی فایل etc/docker/daemon.json/ است قرار میدهیم. معمولا این فایل وجود نداره و باید ایجادش کنیم. برای اعمال کانفیگهامون فقط لازمه تو این روش سرویس داکر رو ریستارت کنیم.
راه سوم هم استفاده از وریبلهای محلی است که با استفاده از آنها میتونیم سرویس داکر رو کانفیگ کنیم.
مراقب خودتون باشید. 🌹🐳🌹
خوبه که داکرمی رو تو جاهای مختلف فالو کنید. پذیرای نظرات شما هستیم.
🫀 Follow DockerMe 🫀
🔔 Follow YouTube 🔔
📣 Follow Instagram 📣
🖇 Follow LinkedIn DockerMe🖇
🔎 Follow Linkedin Ahmad Rafiee 🔎
🕊 Follow Twitter 🕊