اتاق برنامه نویسی </>
Photo
CGroup (Control Group)
یکی از ویژگیهای مهم در سیستمعامل لینوکس است که به شما امکان مدیریت منابع سیستمی مانند CPU، حافظه، دیسک و شبکه را برای گروهی از فرآیندها میدهد. این ابزار برای کنترل و محدود کردن استفاده از منابع توسط برنامهها و سرویسها بسیار مفید است.
1️⃣ گروهبندی فرآیندها: CGroup به شما این امکان را میدهد که فرآیندهای مرتبط را در یک گروه قرار دهید. به عنوان مثال، میتوانید همه فرآیندهای یک برنامه خاص را در یک گروه بگذارید.
2️⃣ مدیریت منابع: بعد از گروهبندی فرآیندها، میتوانید منابع سیستمی را به آن گروه اختصاص دهید یا محدود کنید. مثلاً میتوانید تعیین کنید که این گروه از فرآیندها فقط از 20 درصد از CPU استفاده کنند یا بیش از 1 گیگابایت حافظه مصرف نکنند.
3️⃣ نظارت و کنترل: با استفاده از CGroup، میتوانید مصرف منابع توسط گروههای مختلف را نظارت کنید و در صورت نیاز تنظیمات را تغییر دهید تا از استفاده بیش از حد منابع جلوگیری کنید.
- محدود کردن منابع: برای جلوگیری از اینکه یک برنامه تمام منابع سیستم را مصرف کند و باعث کاهش کارایی دیگر برنامهها شود.
- بهبود امنیت: با محدود کردن دسترسی به منابع، میتوانید از رفتارهای مخرب جلوگیری کنید.
- مدیریت سرویسها: در سرورهای بزرگ و پیچیده، میتوانید سرویسهای مختلف را با استفاده از CGroup مدیریت و کنترل کنید تا هر کدام منابع مشخصی داشته باشند.
فرض کنید یک سرور دارید که چندین سرویس مختلف روی آن اجرا میشود. میخواهید اطمینان حاصل کنید که سرویس وب شما همیشه عملکرد خوبی دارد و تحت تاثیر سرویسهای دیگر قرار نمیگیرد. با استفاده از CGroup، میتوانید:
- گروهی برای فرآیندهای سرویس وب ایجاد کنید.
- محدودیتهایی برای استفاده از CPU و حافظه این گروه تعیین کنید.
- مطمئن شوید که حتی اگر سرویسهای دیگر منابع زیادی مصرف کنند، سرویس وب شما همچنان منابع کافی برای کار کردن دارد.
🐳 چگونه Docker از CGroup استفاده میکند؟
1️⃣ مدیریت منابع: Docker از CGroup برای مدیریت منابع استفاده میکند. به این معنا که میتواند منابع CPU، حافظه، دیسک و شبکه را برای هر کانتینر به طور جداگانه محدود کند.
2️⃣ ایزولهسازی: CGroup به Docker کمک میکند تا هر کانتینر را از کانتینرهای دیگر ایزوله کند. این ایزولهسازی به اطمینان از اینکه فرآیندهای یک کانتینر نمیتوانند منابع کانتینرهای دیگر را تحت تأثیر قرار دهند، کمک میکند.
3️⃣ نظارت و کنترل: Docker با استفاده از CGroup میتواند مصرف منابع هر کانتینر را نظارت کند و در صورت نیاز تنظیمات منابع را تغییر دهد تا از کارایی و پایداری سیستم اطمینان حاصل کند.
پس CGroup ابزاری قدرتمند در لینوکس است که به شما امکان مدیریت بهتر منابع سیستمی را میدهد. با استفاده از CGroup میتوانید فرآیندها را گروهبندی کنید، منابع را به صورت دقیق تخصیص دهید و از کارایی و پایداری سیستم خود مطمئن شوید.
📁 #Linux #Docker
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1
اتاق برنامه نویسی </>
Photo
yum نصب کنید، ممکن است با خطای زیر مواجه شوید:Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
این مشکل به دلیل پایان عمر (EOL) CentOS 8 و عدم دسترسی به مخازن پیشفرض CentOS به وجود میآید. زمانی که CentOS 8 به پایان عمر خود رسید، مخازن پیشفرض آن دیگر بهروزرسانی نمیشوند و دسترسی به آنها ممکن است محدود یا قطع شود. بنابراین نیاز است که از مخازن جایگزین مانند مخازن Vault استفاده کنیم.
1️⃣ ایجاد یا ویرایش فایل مخزن
ابتدا باید مخازن Vault را در یک فایل مخزن جدید تنظیم کنیم تا بتوانیم به بستههای مورد نیاز دسترسی پیدا کنیم.
- ایجاد یا ویرایش یک فایل مخزن جدید:
vi /etc/yum.repos.d/CentOS-Vault.repo
- اضافه کردن مخازن Vault:
محتوای زیر را در فایل قرار دهید:
[AppStream]
name=CentOS-$releasever - AppStream
baseurl=http://vault.centos.org/8.3.2011/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[BaseOS]
name=CentOS-$releasever - Base
baseurl=http://vault.centos.org/8.3.2011/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[extras]
name=CentOS-$releasever - Extras
baseurl=http://vault.centos.org/8.3.2011/extras/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
2️⃣ غیرفعال کردن مخازن پیشفرض
باید مطمئن شویم که مخازن پیشفرض CentOS غیرفعال شدهاند تا تداخل ایجاد نشود.
- ویرایش فایلهای مخازن پیشفرض:
فایلهای مخازن پیشفرض در مسیر
/etc/yum.repos.d/ قرار دارند. به عنوان مثال، فایلهای زیر را ویرایش کنید:vi /etc/yum.repos.d/CentOS-Linux-AppStream.repo
vi /etc/yum.repos.d/CentOS-Linux-BaseOS.repo
vi /etc/yum.repos.d/CentOS-Linux-Extras.repo
- غیرفعال کردن مخازن پیشفرض:
در هر کدام از این فایلها، خط
enabled را به 0 تغییر دهید. به عنوان مثال:[AppStream]
name=CentOS-$releasever - AppStream
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
همین تغییر را برای
BaseOS و Extras انجام دهید.3️⃣ پاک کردن کش YUM و بهروزرسانی
- پاک کردن کش YUM:
yum clean all
- بهروزرسانی لیست بستهها:
yum makecache
4️⃣ نصب بسته
tree- نصب بسته
tree:حالا باید بتوانید بسته
tree را بدون مشکل نصب کنید.yum install tree
متادیتا شامل اطلاعاتی در مورد بستهها، نسخهها، وابستگیها و سایر جزئیات مرتبط با مخازن نرمافزاری است.
yum از متادیتا برای جستجو و مدیریت بستهها استفاده میکند.متادیتا اطلاعاتی است که
yum از آن برای مدیریت بستهها استفاده میکند. این اطلاعات شامل:- لیست بستههای موجود
- نسخههای مختلف هر بسته
- وابستگیهای هر بسته
- اطلاعات مربوط به امنیت و بروزرسانیها
بدون دسترسی به متادیتا،
yum نمیتواند بستههای مورد نظر شما را پیدا و نصب کند.مخازن Vault شامل نسخههای قدیمیتر از بستههای نرمافزاری است که برای نسخههایی از سیستم عامل که به پایان عمر خود رسیدهاند (EOL) استفاده میشود. این مخازن به شما امکان دسترسی به بستههای نرمافزاری و بروزرسانیها را حتی پس از پایان عمر رسمی نسخه سیستم عامل میدهند.
مخازن Vault به شما اجازه میدهند تا به نسخههای قدیمیتر بستهها دسترسی داشته باشید که دیگر در مخازن اصلی موجود نیستند. این مخازن به ویژه برای سیستمهای قدیمی که به پایان عمر خود رسیدهاند (EOL) مفید هستند.
📁 #Linux #Docker
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1🔥1
✨ مفهوم Mount کردن در لینوکس به زبان ساده
تصور کنید که شما یک کمد لباس دارید که پر از لباسهای مختلفه. حالا فرض کنید این کمد توی اتاق دیگهای هست و شما نمیتونید به راحتی به لباسهاتون دسترسی پیدا کنید. اما اگه شخصی اون کمد رو به اتاق شما بیاره و توی گوشهای از اتاقت بذارن، شما میتونید خیلی راحت به همه لباسها دسترسی داشته باشید.
در دنیای کامپیوتر هم، وقتی میخواهیم به فایلها و پوشههایی که روی یک دیسک یا پارتیشن (مثل همون کمد لباسها) هستند دسترسی پیدا کنیم، باید اون دیسک یا پارتیشن رو به یک دایرکتوری (مثل همون اتاق شما) Mount کنیم. این کار باعث میشه که کامپیوتر بدونه این دیسک یا پارتیشن رو کجا پیدا کنه و بتونه فایلها رو بخونه و بنویسه.
🧐 چرا باید Mount کنیم؟
1️⃣ دسترسی راحتتر به فایلها: مثل وقتی که کمد لباسهاتون توی اتاقتون هست، وقتی یک دیسک یا پارتیشن رو Mount میکنیم، میتونیم راحتتر به فایلها دسترسی داشته باشیم.
2️⃣ مرتب و سازماندهی شده: فرض کنید همه لباسهاتون توی یک کمد بزرگ و درهم باشند. پیدا کردن یک لباس خاص خیلی سخت میشه. اما اگر کمدهای جداگانه برای هر نوع لباس داشته باشید، پیدا کردنشون خیلی راحتتر میشه. در کامپیوتر هم، هر دیسک یا پارتیشن میتونه به یک دایرکتوری خاص Mount بشه تا فایلها بهتر سازماندهی بشن.
3️⃣ مدیریت بهتر: وقتی که یک دیسک یا پارتیشن Mount میشه، میتونید راحتتر بفهمید چقدر فضا استفاده شده و چقدر فضا خالی دارید. این کار مثل این میمونه که بدونید چقدر از کمد لباسهاتون پر شده و چقدر جا برای لباسهای جدید دارید.
📁 #Linux
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
تصور کنید که شما یک کمد لباس دارید که پر از لباسهای مختلفه. حالا فرض کنید این کمد توی اتاق دیگهای هست و شما نمیتونید به راحتی به لباسهاتون دسترسی پیدا کنید. اما اگه شخصی اون کمد رو به اتاق شما بیاره و توی گوشهای از اتاقت بذارن، شما میتونید خیلی راحت به همه لباسها دسترسی داشته باشید.
در دنیای کامپیوتر هم، وقتی میخواهیم به فایلها و پوشههایی که روی یک دیسک یا پارتیشن (مثل همون کمد لباسها) هستند دسترسی پیدا کنیم، باید اون دیسک یا پارتیشن رو به یک دایرکتوری (مثل همون اتاق شما) Mount کنیم. این کار باعث میشه که کامپیوتر بدونه این دیسک یا پارتیشن رو کجا پیدا کنه و بتونه فایلها رو بخونه و بنویسه.
🧐 چرا باید Mount کنیم؟
1️⃣ دسترسی راحتتر به فایلها: مثل وقتی که کمد لباسهاتون توی اتاقتون هست، وقتی یک دیسک یا پارتیشن رو Mount میکنیم، میتونیم راحتتر به فایلها دسترسی داشته باشیم.
2️⃣ مرتب و سازماندهی شده: فرض کنید همه لباسهاتون توی یک کمد بزرگ و درهم باشند. پیدا کردن یک لباس خاص خیلی سخت میشه. اما اگر کمدهای جداگانه برای هر نوع لباس داشته باشید، پیدا کردنشون خیلی راحتتر میشه. در کامپیوتر هم، هر دیسک یا پارتیشن میتونه به یک دایرکتوری خاص Mount بشه تا فایلها بهتر سازماندهی بشن.
3️⃣ مدیریت بهتر: وقتی که یک دیسک یا پارتیشن Mount میشه، میتونید راحتتر بفهمید چقدر فضا استفاده شده و چقدر فضا خالی دارید. این کار مثل این میمونه که بدونید چقدر از کمد لباسهاتون پر شده و چقدر جا برای لباسهای جدید دارید.
📁 #Linux
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
👏2🔥1
اتاق برنامه نویسی </>
Photo
یادگیری چیزهایی که تغییر نمیکنند.
در این پست، تلاش میکنیم بفهمیم چرا باید اصول پایه را به جای فریمورکها یاد بگیریم و این موضوع چه تاثیری دارد.
اینجا است که اثر Lindy وارد میشود. این اثر میگوید تکنولوژیها و نوآوریهایی که به مدت طولانی مورد استفاده قرار گرفتهاند، احتمال بیشتری دارند که در آینده نیز مورد استفاده قرار گیرند. به عبارت دیگر، هرچه یک آیتم بیشتر مورد استفاده قرار گرفته باشد، احتمال بیشتری دارد که همچنان استفاده شود.
ما توسعهدهندگان دوست داریم هرچه زودتر چیزهای جدید را یاد بگیریم. این چیزها عمدتا شامل فریمورکها و ابزارهای جدید است (مانند React، Angular، Spring، Web Forms و غیره). با این حال، این فریمورکها معمولاً عمر کوتاهی دارند، در بهترین حالت ۲ تا ۵ سال. به جای یادگیری فریمورکها، که تا حدی لازم است، باید بیشتر روی یادگیری اصول پایه تمرکز کنیم.
یادگیری اصول پایه توسعه نرمافزار به توسعهدهندگان کمک میکند اصول و مفاهیم زیرین که در فریمورکها و زبانهای برنامهنویسی مختلف مشترک هستند را بفهمند. این درک به انعطافپذیری و سازگاری بیشتر هنگام کار با تکنولوژیهای جدید یا مواجهه با مشکلاتی که یک فریمورک خاص ممکن است زمان ببرد تا حل شود، منجر میشود.
علاوه بر این، داشتن درکی قوی از اصول پایه میتواند به استفاده موثرتر و کارآمدتر از فریمورکها منجر شود، زیرا توسعهدهنده بهتر میتواند فریمورکها را برای برآورده کردن نیازهای خاص سفارشی و گسترش دهد.
مثالی از یک اپلیکیشن وب که به کاربران امکان آپلود و اشتراکگذاری تصاویر را میدهد در نظر بگیرید که مثلاً در Ruby on Rails و قابلیتهای آن برای پردازش تصاویر انجام شده است. اگر تعداد کاربران افزایش یابد، فقط میتوانیم با مسائل عملکردی کار کنیم اگر فریمورک را خوب بشناسیم. با این حال، اگر اصول پایه توسعه وب را بفهمیم، میتوانیم نقاط ضعف را شناسایی کرده و راهحلهای مختلفی مانند استفاده از CDN، بهینهسازی اندازه تصاویر، استفاده از راهحلهای مختلف ذخیرهسازی و غیره را امتحان کنیم.
🔸Algorithms
🔹Data
🔸Clean Code
🔹SOLID Principles
🔸OO Programming
🔹Design Patterns
🔸Distributed Computing
🔹 System Design
...
نوشته دیوید توماس و اندرو هانت.
دیوید فارلی
استیو مککانل
تیتوس وینترز، تام منشرک و هیروم رایت
عمو باب مارتین
اریک فریمن
مارتین فاولر
آدیتیا بارگاوا
📁 #Skills
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥1
اتاق برنامه نویسی </>
David Thomas and Andrew Hunt
این کتاب توصیههای عملی و حرفهای برای توسعهدهندگان ارائه میدهد. موضوعاتی مانند مسئولیتپذیری شخصی و توسعه حرفهای تا تکنیکهای معماری را پوشش میدهد. با وجود اینکه در سال ۱۹۹۹ نوشته شده است، هنوز در بسیاری از جنبهها معتبر است. ویژگی منحصر به فرد این کتاب این است که به صورت عملی با مجموعهای از نکات برای بهبود فرآیند توسعه به شما آموزش میدهد.
David Farley
این کتاب بر ساخت نرمافزار عالی تمرکز دارد و نویسنده یک چارچوب محکم برای اتصال بهترین شیوهها مانند Continuous Delivery (CD)، معماری شش ضلعی و Test-Driven Development به ایدههای اصلی در مهندسی نرمافزار ارائه میدهد. او همچنین در مورد تاریخچه توسعه نرمافزار و ایدههایی که صنعت را تغییر دادهاند، مینویسد.
Steve McConnell
یکی از کتابهایی که بیش از ۱۵ سال پیش نوشته شده و هنوز معتبر است. این کتاب به طراحی، کدنویسی، اشکالزدایی و تست میپردازد. در بیش از ۹۰۰ صفحه، نویسندگان نحوه نوشتن برنامهها برای مردم اول و سپس برای کامپیوترها، چگونگی تقسیم کد به دامنهها و چگونگی تسلط بر ویژگیهای انسانی بهترین برنامهنویسان (تواضع، کنجکاوی و مهمتر از همه، کنترل اگو) را توضیح میدهند.
Titus Winters, Tom Manshreck, and Hyrum Wright
این کتاب درباره برنامهنویسی نیست، بلکه در مورد شیوههای مهندسی در گوگل برای حفظ و سلامت کدپایه آنها است. در این کتاب، تفاوت بین مهندسی نرمافزار و برنامهنویسی، اهمیت قانون بیانسه، و چگونگی تست صحیح چیزها و انتشار کوچک و مکرر را خواهید آموخت.
Eric Freeman
این کتاب الگوهای طراحی اصلی نرمافزار را برای ایجاد طراحیهای انعطافپذیرتر، شیکتر و قابل استفاده مجدد بدون نیاز به کشف مجدد راهحلهای طراحی توصیف میکند. این کتاب به سبک کتابهای For Dummies نوشته شده است، به طوری که برای مبتدیان قابل فهم باشد.
Aditya Bhargava
این کتاب به زبانی ساده درباره کاربرد الگوریتمهای استاندارد در مسائل روزمره توسعهدهندگان توضیح میدهد. از مرتبسازی و جستجو شروع میکند و سپس به فشردهسازی دادهها و هوش مصنوعی با نمونه کدهایی در پایتون میپردازد. احتمالاً بهترین کتاب برای شروع یادگیری الگوریتمها است.
Martin Kleppman
این کتاب مفاهیم پیشرفته داده مانند پایگاههای داده و مدلهای داده و مفاهیم توزیعشده مانند تراکنشها، تکرار، سازگاری و غیره را توضیح میدهد. این کتاب یکی از تأثیرگذارترین کتابها در این دسته است.
Steve Freeman
نویسندگان رویههای خود، اهداف طراحی و برخی ابزارهایی که برای انجام کار استفاده میکنند را شرح میدهند. در یک مثال گسترده، خواهید فهمید که چگونه TDD در چند سطح عمل میکند، با استفاده از تستها برای هدایت ویژگیهای کد و ساختار شیءگرا و استفاده از اشیاء شبیهسازیشده برای یافتن و سپس تعریف پیوندها بین اشیاء.
John Ousterhout
این کتاب توضیح میدهد که چگونه سیستمهای نرمافزاری پیچیده را به قطعات قابل پیادهسازی مستقل تقسیم کنیم. سپس به مسائل فلسفی در مورد نحوه برخورد با فرآیند طراحی نرمافزار میپردازد و فهرستی از راهنماییهای طراحی برای دنبال کردن ارائه میدهد. این کتاب همچنین فهرستی از علائم هشدار برای طراحی بد ارائه میدهد. این کتاب یک همراه عالی برای Clean Code است زیرا دیدگاه متفاوتی ارائه میدهد.
📁 #Skills
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
اتاق برنامه نویسی </>
Photo
🎓 تفاوت بین تعریف Volume در Dockerfile و استفاده از
سلام دوستان ! 👋
امروز میخواهیم درباره یکی از مفاهیم مهم در داکر صحبت کنیم: Volume. شاید این سوال برای شما پیش آمده باشد که وقتی میتوانیم Volume را هم در Dockerfile و هم هنگام اجرای کانتینر با استفاده از
🔍 تعریف Volume در Dockerfile
وقتی شما یک Volume را در داخل Dockerfile تعریف میکنید، در حقیقت دارید به داکر میگویید که این دایرکتوریها باید به عنوان نقاط ذخیرهسازی پایدار (Persistent Storage) عمل کنند. به عبارت دیگر، وقتی یک کانتینر از روی این ایمیج ساخته میشود، آن دایرکتوریهایی که به عنوان Volume تعریف کردهاید، از کانتینر جدا شده و دادههای آنها حفظ میشود، حتی اگر کانتینر متوقف شود یا از بین برود.
🔧 مثال:
در اینجا، وقتی کانتینر از این ایمیج ساخته میشود، دایرکتوری
✅ مزیت :
این روش وقتی مفید است که بخواهید از ابتدا در طراحی ایمیج خود، مکانهای ذخیرهسازی پایدار را تعیین کنید. این تضمین میکند که هر کسی که این ایمیج را استفاده میکند، از این Volumeها بهرهمند میشود.
🔍 استفاده از
حالا فرض کنید شما یک ایمیج داکر دارید و میخواهید هنگام اجرای کانتینر، یک دایرکتوری خاص از سیستم فایل میزبان (Host) خود را به داخل کانتینر Mount کنید. اینجاست که
🔧 مثال:
در اینجا، /path/on/host
(که روی سیستم میزبان است) به /path/in/container (که داخل کانتینر است) متصل میشود. هر تغییری که در این مسیرها رخ دهد، بین میزبان و کانتینر به اشتراک گذاشته میشود.
✅ مزیت:
این روش به شما انعطافپذیری بیشتری میدهد تا در زمان اجرای کانتینر، مشخص کنید که چه دایرکتوریهایی را میخواهید به اشتراک بگذارید یا ذخیره کنید. این برای مواردی که بخواهید دادههای خاصی را از کانتینر با میزبان یا بالعکس به اشتراک بگذارید، بسیار مفید است.
🎯 نتیجهگیری: تفاوت کلیدی
- تعریف Volume در Dockerfile بیشتر به معنای تعیین مکانهای پیشفرض برای ذخیرهسازی پایدار در هنگام ساخت ایمیج است.
- استفاده از
هر دو روش برای اهداف مختلفی به کار میروند و بسته به نیاز شما، میتوانید از هر یک یا ترکیبی از هر دو استفاده کنید. با فهم درست این تفاوتها، میتوانید به صورت بهینهتری از داکر و Volumeها استفاده کنید.
📌 توجه داشته باشید که تعریف VOLUME در Dockerfile الزاما به معنای این نیست که این مسیرها به طور خودکار به بیرون (میزبان) پاس داده میشوند یا به اشتراک گذاشته میشوند. این تنها به داکر اعلام میکند که این مسیرها باید به صورت پایدار و مستقل از چرخه زندگی کانتینر ذخیره شوند. اینکه این Volumeها به یک دایرکتوری در میزبان متصل شوند یا نه، به زمان اجرای کانتینر و نحوه استفاده از v- بستگی دارد.
📁 #Docker
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
v- هنگام اجرای کانتینرسلام دوستان ! 👋
امروز میخواهیم درباره یکی از مفاهیم مهم در داکر صحبت کنیم: Volume. شاید این سوال برای شما پیش آمده باشد که وقتی میتوانیم Volume را هم در Dockerfile و هم هنگام اجرای کانتینر با استفاده از
v- تعریف کنیم، تفاوت بین این دو روش چیست؟ 🤔🔍 تعریف Volume در Dockerfile
وقتی شما یک Volume را در داخل Dockerfile تعریف میکنید، در حقیقت دارید به داکر میگویید که این دایرکتوریها باید به عنوان نقاط ذخیرهسازی پایدار (Persistent Storage) عمل کنند. به عبارت دیگر، وقتی یک کانتینر از روی این ایمیج ساخته میشود، آن دایرکتوریهایی که به عنوان Volume تعریف کردهاید، از کانتینر جدا شده و دادههای آنها حفظ میشود، حتی اگر کانتینر متوقف شود یا از بین برود.
🔧 مثال:
FROM ubuntu:latest
VOLUME /data
در اینجا، وقتی کانتینر از این ایمیج ساخته میشود، دایرکتوری
/data به طور خودکار به یک Volume تبدیل میشود. اگر فایل یا دادهای در این دایرکتوری قرار دهید، حتی بعد از حذف کانتینر، این دادهها باقی میمانند.✅ مزیت :
این روش وقتی مفید است که بخواهید از ابتدا در طراحی ایمیج خود، مکانهای ذخیرهسازی پایدار را تعیین کنید. این تضمین میکند که هر کسی که این ایمیج را استفاده میکند، از این Volumeها بهرهمند میشود.
🔍 استفاده از
v- هنگام اجرای کانتینرحالا فرض کنید شما یک ایمیج داکر دارید و میخواهید هنگام اجرای کانتینر، یک دایرکتوری خاص از سیستم فایل میزبان (Host) خود را به داخل کانتینر Mount کنید. اینجاست که
v- به کار میآید. این گزینه به شما اجازه میدهد یک Volume را دینامیک (در زمان اجرا) ایجاد کنید و یک دایرکتوری میزبان را به دایرکتوری کانتینر متصل کنید.🔧 مثال:
docker run -v /path/on/host:/path/in/container myimage
در اینجا، /path/on/host
(که روی سیستم میزبان است) به /path/in/container (که داخل کانتینر است) متصل میشود. هر تغییری که در این مسیرها رخ دهد، بین میزبان و کانتینر به اشتراک گذاشته میشود.
✅ مزیت:
این روش به شما انعطافپذیری بیشتری میدهد تا در زمان اجرای کانتینر، مشخص کنید که چه دایرکتوریهایی را میخواهید به اشتراک بگذارید یا ذخیره کنید. این برای مواردی که بخواهید دادههای خاصی را از کانتینر با میزبان یا بالعکس به اشتراک بگذارید، بسیار مفید است.
🎯 نتیجهگیری: تفاوت کلیدی
- تعریف Volume در Dockerfile بیشتر به معنای تعیین مکانهای پیشفرض برای ذخیرهسازی پایدار در هنگام ساخت ایمیج است.
- استفاده از
v- به شما اجازه میدهد در زمان اجرا، به صورت پویا دایرکتوریهای میزبان و کانتینر را به یکدیگر متصل کنید.هر دو روش برای اهداف مختلفی به کار میروند و بسته به نیاز شما، میتوانید از هر یک یا ترکیبی از هر دو استفاده کنید. با فهم درست این تفاوتها، میتوانید به صورت بهینهتری از داکر و Volumeها استفاده کنید.
📌 توجه داشته باشید که تعریف VOLUME در Dockerfile الزاما به معنای این نیست که این مسیرها به طور خودکار به بیرون (میزبان) پاس داده میشوند یا به اشتراک گذاشته میشوند. این تنها به داکر اعلام میکند که این مسیرها باید به صورت پایدار و مستقل از چرخه زندگی کانتینر ذخیره شوند. اینکه این Volumeها به یک دایرکتوری در میزبان متصل شوند یا نه، به زمان اجرای کانتینر و نحوه استفاده از v- بستگی دارد.
📁 #Docker
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
👍1🔥1
اتاق برنامه نویسی </>
Photo
🎓 تفاوت بین CMD و ENTRYPOINT در Dockerfile
امروز میخواهیم به یکی از موضوعات پرکاربرد در دنیای داکر بپردازیم: تفاوت بین دو دستور مهم CMD و ENTRYPOINT. اگر تا به حال با Dockerfile کار کرده باشید، احتمالاً با این دو دستور مواجه شدهاید و شاید برایتان سوال شده باشد که تفاوت آنها در چیست و چه زمانی باید از هرکدام استفاده کرد. بیایید این موضوع را با چند مثال واقعی و ملموس بررسی کنیم.
🔍 CMD: تنظیم فرمان پیشفرض (قابل تغییر)
CMD در Dockerfile برای تعیین یک فرمان پیشفرض به کار میرود که کانتینر شما اجرا خواهد کرد، مگر اینکه در زمان اجرای کانتینر فرمان دیگری را مشخص کنید. به عبارت دیگر،
🔧 مثال
فرض کنید شما یک Dockerfile برای اجرای یک وبسرور ساده با Python مینویسید:
در این مثال، فرمان
✅ ویژگی کلیدی:
🔍 ENTRYPOINT: فرمان اصلی و ثابت (غیرقابل تغییر)
در Dockerfile در واقع ENTRYPOINT به شما این امکان را میدهد که یک فرمان اصلی و غیرقابل تغییر تعیین کنید. هر فرمان دیگری که در زمان اجرای کانتینر مشخص شود، به عنوان آرگومان به این فرمان ااصلی اضافه میشود.
🔧 مثال :
فرض کنید شما یک Dockerfile برای یک ابزار خط فرمان (CLI) مینویسید که همیشه باید از یک دستور خاص برای اجرا استفاده شود:
در اینجا،
این دستور باعث میشود کانتینر
✅ ویژگی کلیدی:
🎯 ترکیب CMD و ENTRYPOINT: ایجاد فرمانهای قابل تنظیم
گاهی اوقات میخواهید یک فرمان اصلی ثابت داشته باشید، اما به کاربران اجازه دهید آرگومانهای پیشفرض را تغییر دهند. در این حالت، میتوانید
🔧 مثال:
فرض کنید یک Dockerfile برای یک اسکریپت پایتون دارید که به طور پیشفرض باید با یک آرگومان خاص اجرا شود، اما کاربر میتواند آن آرگومان را تغییر دهد:
در این حالت، وقتی کانتینر را بدون فرمان اضافی اجرا میکنید، اسکریپت
اما اگر کاربر بخواهد آرگومان را تغییر دهد:
در این حالت، اسکریپت با آرگومان
🎯 نتیجهگیری: تفاوت کلیدی
🔹
برای تنظیم یک فرمان پیشفرض که در صورت عدم تعیین فرمان در زمان اجرا، اجرا میشود. این فرمان قابل تغییر است و میتواند توسط کاربر در زمان اجرا با فرمان دیگری جایگزین شود.
🔸
برای تنظیم یک فرمان اصلی و غیرقابل تغییر که همیشه اجرا میشود. فرمانهای دیگر به عنوان آرگومان به این فرمان اضافه میشوند.
با دانستن این تفاوتها، میتوانید بهتر تصمیم بگیرید که در هر سناریو از کدام دستور استفاده کنید. اگر نیاز دارید فرمان اصلی همیشه اجرا شود، از
📁 #Docker
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
امروز میخواهیم به یکی از موضوعات پرکاربرد در دنیای داکر بپردازیم: تفاوت بین دو دستور مهم CMD و ENTRYPOINT. اگر تا به حال با Dockerfile کار کرده باشید، احتمالاً با این دو دستور مواجه شدهاید و شاید برایتان سوال شده باشد که تفاوت آنها در چیست و چه زمانی باید از هرکدام استفاده کرد. بیایید این موضوع را با چند مثال واقعی و ملموس بررسی کنیم.
🔍 CMD: تنظیم فرمان پیشفرض (قابل تغییر)
CMD در Dockerfile برای تعیین یک فرمان پیشفرض به کار میرود که کانتینر شما اجرا خواهد کرد، مگر اینکه در زمان اجرای کانتینر فرمان دیگری را مشخص کنید. به عبارت دیگر،
CMD به شما اجازه میدهد یک رفتار پیشفرض برای کانتینر تعریف کنید که در صورت نیاز، قابل تغییر است.🔧 مثال
فرض کنید شما یک Dockerfile برای اجرای یک وبسرور ساده با Python مینویسید:
FROM python:3.9-slim
WORKDIR /app
COPY . /app
CMD ["python", "-m", "http.server", "8080"]
در این مثال، فرمان
CMD به طور پیشفرض وبسرور پایتون را روی پورت 8080 اجرا میکند. حالا اگر کسی کانتینر شما را بدون هیچ فرمان اضافهای اجرا کند، این وبسرور راهاندازی خواهد شد. اما اگر کاربر بخواهد یک فرمان متفاوت (مثلاً اجرای یک اسکریپت پایتون دیگر) را اجرا کند، میتواند این فرمان را هنگام اجرای کانتینر مشخص کند و فرمان جدید جایگزین CMD خواهد شد:docker run myimage python my_script.py
✅ ویژگی کلیدی:
CMD به شما امکان میدهد یک فرمان پیشفرض تنظیم کنید که کاربر در صورت نیاز میتواند آن را تغییر دهد.🔍 ENTRYPOINT: فرمان اصلی و ثابت (غیرقابل تغییر)
در Dockerfile در واقع ENTRYPOINT به شما این امکان را میدهد که یک فرمان اصلی و غیرقابل تغییر تعیین کنید. هر فرمان دیگری که در زمان اجرای کانتینر مشخص شود، به عنوان آرگومان به این فرمان ااصلی اضافه میشود.
🔧 مثال :
فرض کنید شما یک Dockerfile برای یک ابزار خط فرمان (CLI) مینویسید که همیشه باید از یک دستور خاص برای اجرا استفاده شود:
FROM ubuntu:20.04
WORKDIR /app
COPY . /app
ENTRYPOINT ["curl"]
در اینجا،
ENTRYPOINT فرمان curl را به عنوان فرمان اصلی تنظیم میکند. هر چیزی که کاربر در زمان اجرای کانتینر وارد کند، به عنوان آرگومان به curl اضافه میشود. مثلاً:docker run mycurlimage https://example.com
این دستور باعث میشود کانتینر
curl https://example.com را اجرا کند.✅ ویژگی کلیدی:
ENTRYPOINT به شما اجازه میدهد یک فرمان اصلی تنظیم کنید که همیشه اجرا میشود و فرمانهای دیگر به عنوان آرگومان به آن اضافه میشوند.🎯 ترکیب CMD و ENTRYPOINT: ایجاد فرمانهای قابل تنظیم
گاهی اوقات میخواهید یک فرمان اصلی ثابت داشته باشید، اما به کاربران اجازه دهید آرگومانهای پیشفرض را تغییر دهند. در این حالت، میتوانید
ENTRYPOINT و CMD را با هم ترکیب کنید.🔧 مثال:
فرض کنید یک Dockerfile برای یک اسکریپت پایتون دارید که به طور پیشفرض باید با یک آرگومان خاص اجرا شود، اما کاربر میتواند آن آرگومان را تغییر دهد:
FROM python:3.9-slim
WORKDIR /app
COPY . /app
ENTRYPOINT ["python", "my_script.py"]
CMD ["--default-arg"]
در این حالت، وقتی کانتینر را بدون فرمان اضافی اجرا میکنید، اسکریپت
my_script.py با آرگومان --default-arg اجرا میشود:docker run myimage
اما اگر کاربر بخواهد آرگومان را تغییر دهد:
docker run myimage --custom-arg
در این حالت، اسکریپت با آرگومان
--custom-arg اجرا میشود.🎯 نتیجهگیری: تفاوت کلیدی
🔹
CMD:برای تنظیم یک فرمان پیشفرض که در صورت عدم تعیین فرمان در زمان اجرا، اجرا میشود. این فرمان قابل تغییر است و میتواند توسط کاربر در زمان اجرا با فرمان دیگری جایگزین شود.
🔸
ENTRYPOINT:برای تنظیم یک فرمان اصلی و غیرقابل تغییر که همیشه اجرا میشود. فرمانهای دیگر به عنوان آرگومان به این فرمان اضافه میشوند.
با دانستن این تفاوتها، میتوانید بهتر تصمیم بگیرید که در هر سناریو از کدام دستور استفاده کنید. اگر نیاز دارید فرمان اصلی همیشه اجرا شود، از
ENTRYPOINT استفاده کنید؛ و اگر میخواهید یک فرمان پیشفرض داشته باشید که در صورت نیاز قابل تغییر باشد، CMD را انتخاب کنید. 📁 #Docker
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
👍2🔥1🙏1
اتاق برنامه نویسی </>
Photo
🎓 SaaS / Software as a Service
امروز میخواهیم مفهوم SaaS یا Software as a Service را بررسی کنیم. این یک مدل ارائه نرمافزار است که در آن نرمافزارها به صورت آنلاین و از طریق اینترنت به کاربران ارائه میشوند. در این مدل، شما به جای خرید و نصب نرمافزار روی کامپیوتر خود، به آن از طریق یک مرورگر وب دسترسی پیدا میکنید.
🔍 منظور از SaaS یعنی چه؟
به معنای نرمافزار به عنوان سرویس است. در این مدل، نرمافزارها روی سرورهای شرکت ارائهدهنده میزبانی میشوند و کاربران میتوانند از طریق اینترنت به آنها دسترسی پیدا کنند. شما نیازی به نصب، مدیریت یا بهروزرسانی نرمافزار ندارید؛ همه چیز توسط شرکت ارائهدهنده مدیریت میشود.
🔧 مثال:
تصور کنید شما از یک نرمافزار حسابداری مانند QuickBooks Online یا یک ابزار مدیریت پروژه مثل Trello استفاده میکنید. اینها نمونههایی از SaaS هستند که شما میتوانید از طریق مرورگر وب به آنها دسترسی پیدا کنید، بدون نیاز به نصب یا مدیریت نرمافزار روی کامپیوتر خود.
🎯 مزایای SaaS
🔸بدون نیاز به نصب و بهروزرسانی: شما نیازی به نصب نرمافزار روی کامپیوتر خود ندارید. همه چیز از طریق مرورگر وب انجام میشود و بهروزرسانیها بهطور خودکار توسط ارائهدهنده مدیریت میشوند.
🔹دسترسی از هر کجا: شما میتوانید از هر جایی که اینترنت دارید به نرمافزار دسترسی پیدا کنید. این یعنی میتوانید از لپتاپ، تبلت، یا حتی موبایل خود استفاده کنید.
🔸هزینههای کمتر: به جای خرید نرمافزار و پرداخت یک هزینه بزرگ اولیه، معمولاً با مدل اشتراک پرداخت میکنید. این باعث میشود هزینههای شما قابل پیشبینیتر باشد و نیاز به سرمایهگذاری اولیه کمتر باشد.
🔹مقیاسپذیری آسان: اگر نیاز به افزایش یا کاهش تعداد کاربران یا امکانات دارید، میتوانید به راحتی اشتراک خود را تغییر دهید. این انعطافپذیری بالا در کسبوکارها بسیار مهم است.
🔍 چه زمانی SaaS مناسب است؟
برای کسبوکارها و افرادی مناسب است که میخواهند بدون دردسرهای مدیریت نرمافزار، به سرعت به یک ابزار یا سرویس دسترسی پیدا کنند. این مدل بهویژه برای شرکتهای کوچک و متوسط که نمیخواهند با مشکلات نصب و پشتیبانی نرمافزار دست و پنجه نرم کنند، بسیار مفید است.
🎯 نتیجهگیری
"نرمافزار به عنوان سرویس" یا SaaS یک روش مدرن و موثر برای دسترسی به نرمافزارهاست که زندگی را برای کاربران آسانتر و برای کسبوکارها مقرون به صرفهتر میکند. شما بدون نیاز به نصب، از هر کجا و با هزینههای پیشبینیشده میتوانید از نرمافزارهای مختلف استفاده کنید.
📁 #cloud_computing
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
امروز میخواهیم مفهوم SaaS یا Software as a Service را بررسی کنیم. این یک مدل ارائه نرمافزار است که در آن نرمافزارها به صورت آنلاین و از طریق اینترنت به کاربران ارائه میشوند. در این مدل، شما به جای خرید و نصب نرمافزار روی کامپیوتر خود، به آن از طریق یک مرورگر وب دسترسی پیدا میکنید.
🔍 منظور از SaaS یعنی چه؟
به معنای نرمافزار به عنوان سرویس است. در این مدل، نرمافزارها روی سرورهای شرکت ارائهدهنده میزبانی میشوند و کاربران میتوانند از طریق اینترنت به آنها دسترسی پیدا کنند. شما نیازی به نصب، مدیریت یا بهروزرسانی نرمافزار ندارید؛ همه چیز توسط شرکت ارائهدهنده مدیریت میشود.
🔧 مثال:
تصور کنید شما از یک نرمافزار حسابداری مانند QuickBooks Online یا یک ابزار مدیریت پروژه مثل Trello استفاده میکنید. اینها نمونههایی از SaaS هستند که شما میتوانید از طریق مرورگر وب به آنها دسترسی پیدا کنید، بدون نیاز به نصب یا مدیریت نرمافزار روی کامپیوتر خود.
🎯 مزایای SaaS
🔸بدون نیاز به نصب و بهروزرسانی: شما نیازی به نصب نرمافزار روی کامپیوتر خود ندارید. همه چیز از طریق مرورگر وب انجام میشود و بهروزرسانیها بهطور خودکار توسط ارائهدهنده مدیریت میشوند.
🔹دسترسی از هر کجا: شما میتوانید از هر جایی که اینترنت دارید به نرمافزار دسترسی پیدا کنید. این یعنی میتوانید از لپتاپ، تبلت، یا حتی موبایل خود استفاده کنید.
🔸هزینههای کمتر: به جای خرید نرمافزار و پرداخت یک هزینه بزرگ اولیه، معمولاً با مدل اشتراک پرداخت میکنید. این باعث میشود هزینههای شما قابل پیشبینیتر باشد و نیاز به سرمایهگذاری اولیه کمتر باشد.
🔹مقیاسپذیری آسان: اگر نیاز به افزایش یا کاهش تعداد کاربران یا امکانات دارید، میتوانید به راحتی اشتراک خود را تغییر دهید. این انعطافپذیری بالا در کسبوکارها بسیار مهم است.
🔍 چه زمانی SaaS مناسب است؟
برای کسبوکارها و افرادی مناسب است که میخواهند بدون دردسرهای مدیریت نرمافزار، به سرعت به یک ابزار یا سرویس دسترسی پیدا کنند. این مدل بهویژه برای شرکتهای کوچک و متوسط که نمیخواهند با مشکلات نصب و پشتیبانی نرمافزار دست و پنجه نرم کنند، بسیار مفید است.
🎯 نتیجهگیری
"نرمافزار به عنوان سرویس" یا SaaS یک روش مدرن و موثر برای دسترسی به نرمافزارهاست که زندگی را برای کاربران آسانتر و برای کسبوکارها مقرون به صرفهتر میکند. شما بدون نیاز به نصب، از هر کجا و با هزینههای پیشبینیشده میتوانید از نرمافزارهای مختلف استفاده کنید.
📁 #cloud_computing
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
❤2👍1🔥1
اتاق برنامه نویسی </>
Photo
✨ بررسی Docker: containerd، runc و shim
🐳 داکر دیمون (Docker Daemon) :
- داکر دیمون فرآیند اصلیای است که وظیفه مدیریت کانتینرها را برعهده دارد. این دیمون درخواستهایی را که از طریق رابط خط فرمان (CLI) یا API دریافت میکند، اجرا میکند.
🛠 وظایف:
🔸 مدیریت چرخه زندگی کانتینرها شامل ایجاد، توقف، راهاندازی مجدد و حذف کانتینرها.
🔹 مدیریت image کانتینر (کپی کردن، کش کردن و بارگذاری).
🔸کنترل منابع شبکه و ذخیرهسازی مرتبط با هر کانتینر.
🔹 مدیریت وضعیت (State) هر کانتینر و ارتباط آن با سیستم.
📦 سیستم مدیریت کانتینر containerd :
- ابزار containerd برای مدیریت چرخه زندگی کانتینرها طراحی شده است. این سیستم بهطور مستقیم با Docker کار میکند و درخواستها را از Docker Daemon دریافت و پردازش میکند.
🛠 وظایف:
- مدیریت چرخه زندگی کانتینرها شامل عملیاتهایی مانند اجرا، توقف، راهاندازی مجدد و مکث کانتینرها.
- مدیریت و کش کردن تصاویر کانتینرها برای بهبود عملکرد سیستم.
- کنترل منابع شبکه و ذخیرهسازی مرتبط با کانتینرها برای عملکرد بهینهتر.
ارتباط با داکر:
- این ابزار بهعنوان لایه مدیریتی زیر داکر دیمون عمل میکند تا وظایف مدیریتی کانتینرها را بهصورت مستقیم انجام دهد.
⚙️ اجرای کانتینر با runc :
- ابزاری برای اجرای مستقیم کانتینرها است که با استفاده از ویژگیهای هسته لینوکس مانند cgroups و namespaces، کانتینرها را ایزوله کرده و اجرا میکند.
🛠 وظایف:
- ایزولهسازی کانتینرها از طریق مدیریت منابع (با استفاده از cgroups) و جداسازی فرآیندها (با استفاده از namespaces) .
- اجرای کانتینرها بر اساس تنظیمات داده شده توسط سیستم مدیریت کانتینرها.
ارتباط با containerd:
- سیستم containerd درخواستهای اجرایی کانتینرها را به runc ارسال میکند تا این ابزار کانتینرها را بهصورت واقعی اجرا کند.
🔗 واسط مدیریتی containerd-shim:
- بهعنوان یک واسطه بین containerd و runc عمل میکند. این واسطه بعد از اجرای کانتینر توسط runc، مدیریت کانتینر را بهعهده میگیرد تا منابع سیستم بهینهتر مصرف شود.
🛠وظایف:
- مدیریت ورودی و خروجی کانتینرها (I/O) شامل استانداردهای ورودی و خروجی (stdin، stdout و stderr).
- مدیریت فرآیندهای کانتینر بهصورت مستقل پس از اجرا و بدون نیاز به نظارت مستقیم containerd.
✨ مزایا:
- کاهش مصرف منابع به دلیل انتقال مدیریت کانتینرها به shim پس از اجرا.
- حفظ استقلال کانتینرها حتی در صورت توقف containerd، کانتینرها همچنان بهکار خود ادامه میدهند.
🚀 فرآیند کامل اجرای کانتینر :
1️⃣ Docker Daemon
دستور اجرای یک کانتینر را از طریق CLI یا API دریافت میکند.
2️⃣ containerd
درخواست را پردازش میکند و وضعیت چرخه زندگی کانتینر را مدیریت میکند (ایجاد، اجرا، توقف و غیره).
3️⃣ runc
کانتینر را با استفاده از cgroups و namespaces اجرا میکند.
4️⃣ پس از اجرای کانتینر، shim مدیریت ورودی و خروجی و فرآیندهای کانتینر را برعهده میگیرد و کانتینر بهصورت مستقل از containerd عمل میکند.
نتیجهگیری 📌:
این معماری با استفاده از ابزارهای containerd، runc و shim، به بهینهسازی مصرف منابع سیستم و فراهم کردن اجرای مستقل کانتینرها کمک میکند. shim باعث میشود که کانتینرها پس از اجرا بهصورت مستقل به کار خود ادامه دهند، و runc با ایزولهسازی کانتینرها، مدیریت اجرایی آنها را برعهده دارد.
📁 #Docker
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
🐳 داکر دیمون (Docker Daemon) :
- داکر دیمون فرآیند اصلیای است که وظیفه مدیریت کانتینرها را برعهده دارد. این دیمون درخواستهایی را که از طریق رابط خط فرمان (CLI) یا API دریافت میکند، اجرا میکند.
🛠 وظایف:
🔸 مدیریت چرخه زندگی کانتینرها شامل ایجاد، توقف، راهاندازی مجدد و حذف کانتینرها.
🔹 مدیریت image کانتینر (کپی کردن، کش کردن و بارگذاری).
🔸کنترل منابع شبکه و ذخیرهسازی مرتبط با هر کانتینر.
🔹 مدیریت وضعیت (State) هر کانتینر و ارتباط آن با سیستم.
📦 سیستم مدیریت کانتینر containerd :
- ابزار containerd برای مدیریت چرخه زندگی کانتینرها طراحی شده است. این سیستم بهطور مستقیم با Docker کار میکند و درخواستها را از Docker Daemon دریافت و پردازش میکند.
🛠 وظایف:
- مدیریت چرخه زندگی کانتینرها شامل عملیاتهایی مانند اجرا، توقف، راهاندازی مجدد و مکث کانتینرها.
- مدیریت و کش کردن تصاویر کانتینرها برای بهبود عملکرد سیستم.
- کنترل منابع شبکه و ذخیرهسازی مرتبط با کانتینرها برای عملکرد بهینهتر.
ارتباط با داکر:
- این ابزار بهعنوان لایه مدیریتی زیر داکر دیمون عمل میکند تا وظایف مدیریتی کانتینرها را بهصورت مستقیم انجام دهد.
⚙️ اجرای کانتینر با runc :
- ابزاری برای اجرای مستقیم کانتینرها است که با استفاده از ویژگیهای هسته لینوکس مانند cgroups و namespaces، کانتینرها را ایزوله کرده و اجرا میکند.
🛠 وظایف:
- ایزولهسازی کانتینرها از طریق مدیریت منابع (با استفاده از cgroups) و جداسازی فرآیندها (با استفاده از namespaces) .
- اجرای کانتینرها بر اساس تنظیمات داده شده توسط سیستم مدیریت کانتینرها.
ارتباط با containerd:
- سیستم containerd درخواستهای اجرایی کانتینرها را به runc ارسال میکند تا این ابزار کانتینرها را بهصورت واقعی اجرا کند.
🔗 واسط مدیریتی containerd-shim:
- بهعنوان یک واسطه بین containerd و runc عمل میکند. این واسطه بعد از اجرای کانتینر توسط runc، مدیریت کانتینر را بهعهده میگیرد تا منابع سیستم بهینهتر مصرف شود.
🛠وظایف:
- مدیریت ورودی و خروجی کانتینرها (I/O) شامل استانداردهای ورودی و خروجی (stdin، stdout و stderr).
- مدیریت فرآیندهای کانتینر بهصورت مستقل پس از اجرا و بدون نیاز به نظارت مستقیم containerd.
✨ مزایا:
- کاهش مصرف منابع به دلیل انتقال مدیریت کانتینرها به shim پس از اجرا.
- حفظ استقلال کانتینرها حتی در صورت توقف containerd، کانتینرها همچنان بهکار خود ادامه میدهند.
🚀 فرآیند کامل اجرای کانتینر :
1️⃣ Docker Daemon
دستور اجرای یک کانتینر را از طریق CLI یا API دریافت میکند.
2️⃣ containerd
درخواست را پردازش میکند و وضعیت چرخه زندگی کانتینر را مدیریت میکند (ایجاد، اجرا، توقف و غیره).
3️⃣ runc
کانتینر را با استفاده از cgroups و namespaces اجرا میکند.
4️⃣ پس از اجرای کانتینر، shim مدیریت ورودی و خروجی و فرآیندهای کانتینر را برعهده میگیرد و کانتینر بهصورت مستقل از containerd عمل میکند.
نتیجهگیری 📌:
این معماری با استفاده از ابزارهای containerd، runc و shim، به بهینهسازی مصرف منابع سیستم و فراهم کردن اجرای مستقل کانتینرها کمک میکند. shim باعث میشود که کانتینرها پس از اجرا بهصورت مستقل به کار خود ادامه دهند، و runc با ایزولهسازی کانتینرها، مدیریت اجرایی آنها را برعهده دارد.
📁 #Docker
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
❤1👍1🔥1
اتاق برنامه نویسی </>
Photo
🔥 درسگفتار کامل درباره Spread Syntax و Rest Operator در جاوااسکریپت
جاوااسکریپت دو قابلیت بسیار مهم و کاربردی داره که شاید در نگاه اول شبیه به هم به نظر بیان، ولی در واقع کاربردهای کاملاً متفاوتی دارن:
🔸 Spread Syntax
🔹 Rest Operator
هر دو از سه نقطه (
- Spread Syntax برای باز کردن (پخش کردن) دادهها استفاده میشه.
- Rest Operator برای جمع کردن (گروهبندی کردن) دادهها استفاده میشه.
حالا بریم سراغ توضیح دقیق و ساده برای هرکدوم.
🟢 Spread Syntax → باز کردن محتوا
کاربرد اصلی:
استفاده برای کپی کردن، ترکیب کردن، یا ارسال مقدارهای جدا از هم به یک تابع.
در واقع، Spread Syntax محتوا رو از داخل آرایه یا آبجکت "پخش" میکنه و اون رو جدا از هم استفاده میکنه.
✅ مثال ۱: کپی کردن آرایه
✅ این روش به جای تغییر آرایه اصلی، یک نسخه جدید میسازه که باعث جلوگیری از تغییرات ناخواسته میشه.
مثال ۲: ترکیب دو آرایه
✅ این روش یک روش تمیز و سریع برای ترکیب آرایههاست، بدون نیاز به
مثال ۳: ارسال آرایه به عنوان آرگومانهای یک تابع
✅ این روش به جای فرستادن آرایه، مقدارهای درونش رو جدا جدا به تابع ارسال میکنه.
مثال ۴: کپی کردن و ترکیب آبجکتها
✅ این روش برای کپی کردن یا اضافه کردن مقدار به آبجکتها خیلی کاربردیست.
🔴 Rest Operator → جمع کردن مقادیر
کاربرد اصلی:
برای جمعآوری مقادیر باقیمانده در آرایهها یا توابع استفاده میشه.
برخلاف Spread Syntax که "باز" میکنه، Rest Operator مقدارها رو "جمع" میکنه و داخل یک آرایه میذاره.
✅ مثال ۱: گرفتن چند آرگومان در تابع
✅ این روش همهی ورودیها رو جمع میکنه و داخل یک آرایه
مثال ۲: جداسازی اولین مقدار و جمعآوری بقیه
✅ و `first` مقدار اول رو دریافت کرده، و `rest` بقیهی مقدارها رو درون آرایه ذخیره کرده.
مثال ۳: دریافت مقادیر باقیمانده در آبجکت
✅ و
✨ جمعبندی نهایی
🔹 اگر میخواهی دادهها را از داخل یک آرایه یا آبجکت بیرون بکشی و در جاهای مختلف استفاده کنی → `Spread Syntax`
🔹 اگر میخواهی چندین مقدار را به عنوان یک مجموعه بگیری و در قالب یک آرایه نگه داری → `Rest Operator`
📁 #javascript
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
جاوااسکریپت دو قابلیت بسیار مهم و کاربردی داره که شاید در نگاه اول شبیه به هم به نظر بیان، ولی در واقع کاربردهای کاملاً متفاوتی دارن:
🔸 Spread Syntax
🔹 Rest Operator
هر دو از سه نقطه (
...) استفاده میکنن، اما تفاوت اصلی اینه که: - Spread Syntax برای باز کردن (پخش کردن) دادهها استفاده میشه.
- Rest Operator برای جمع کردن (گروهبندی کردن) دادهها استفاده میشه.
حالا بریم سراغ توضیح دقیق و ساده برای هرکدوم.
🟢 Spread Syntax → باز کردن محتوا
کاربرد اصلی:
استفاده برای کپی کردن، ترکیب کردن، یا ارسال مقدارهای جدا از هم به یک تابع.
در واقع، Spread Syntax محتوا رو از داخل آرایه یا آبجکت "پخش" میکنه و اون رو جدا از هم استفاده میکنه.
✅ مثال ۱: کپی کردن آرایه
const numbers = [1, 2, 3];
const newNumbers = [...numbers]; // کپی آرایه اصلی
console.log(newNumbers); // [1, 2, 3]
✅ این روش به جای تغییر آرایه اصلی، یک نسخه جدید میسازه که باعث جلوگیری از تغییرات ناخواسته میشه.
مثال ۲: ترکیب دو آرایه
const numbers1 = [1, 2, 3];
const numbers2 = [4, 5, 6];
const combined = [...numbers1, ...numbers2];
console.log(combined); // [1, 2, 3, 4, 5, 6]
✅ این روش یک روش تمیز و سریع برای ترکیب آرایههاست، بدون نیاز به
()concat.مثال ۳: ارسال آرایه به عنوان آرگومانهای یک تابع
const numbers = [1, 2, 3];
function sum(a, b, c) {
return a + b + c;
}
console.log(sum(...numbers)); // 6
✅ این روش به جای فرستادن آرایه، مقدارهای درونش رو جدا جدا به تابع ارسال میکنه.
مثال ۴: کپی کردن و ترکیب آبجکتها
const person = { name: "Ali", age: 30 };
const newPerson = { ...person, city: "Tehran" };
console.log(newPerson);
// { name: "Ali", age: 30, city: "Tehran" }✅ این روش برای کپی کردن یا اضافه کردن مقدار به آبجکتها خیلی کاربردیست.
🔴 Rest Operator → جمع کردن مقادیر
کاربرد اصلی:
برای جمعآوری مقادیر باقیمانده در آرایهها یا توابع استفاده میشه.
برخلاف Spread Syntax که "باز" میکنه، Rest Operator مقدارها رو "جمع" میکنه و داخل یک آرایه میذاره.
✅ مثال ۱: گرفتن چند آرگومان در تابع
function sum(...numbers) {
return numbers.reduce((total, num) => total + num, 0);
}
console.log(sum(1, 2, 3, 4, 5)); // 15✅ این روش همهی ورودیها رو جمع میکنه و داخل یک آرایه
numbers ذخیره میکنه.مثال ۲: جداسازی اولین مقدار و جمعآوری بقیه
const [first, ...rest] = [10, 20, 30, 40];
console.log(first); // 10
console.log(rest); // [20, 30, 40]
✅ و `first` مقدار اول رو دریافت کرده، و `rest` بقیهی مقدارها رو درون آرایه ذخیره کرده.
مثال ۳: دریافت مقادیر باقیمانده در آبجکت
const person = { name: "Ali", age: 30, city: "Tehran" };
const { name, ...rest } = person;
console.log(name); // "Ali"
console.log(rest); // { age: 30, city: "Tehran" }✅ و
name مقدار Ali رو دریافت کرده، و rest بقیهی ویژگیها رو جمعآوری کرده.✨ جمعبندی نهایی
🔹 اگر میخواهی دادهها را از داخل یک آرایه یا آبجکت بیرون بکشی و در جاهای مختلف استفاده کنی → `Spread Syntax`
🔹 اگر میخواهی چندین مقدار را به عنوان یک مجموعه بگیری و در قالب یک آرایه نگه داری → `Rest Operator`
📁 #javascript
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
👍5❤2🔥1
اتاق برنامه نویسی </>
Photo
⚜️ مدلهای نوین در هوش مصنوعی: LLM، VLM و Diffusion و مدلهای چندوجهی Multimodal Models
در این توضیح، سه نوع مدل هوش مصنوعی پیشرفته یعنی مدلهای زبانی بزرگ (LLM)، مدلهای بینایی-زبانی (VLM) و مدلهای انتشار (Diffusion Models) را بررسی میکنیم. همچنین به مدلهای چندوجهی (Multimodal Models) میپردازیم.
🔸 ۱. مدلهای زبانی بزرگ (LLM - Large Language Models)
مدلهای زبانی بزرگ (LLM) مانند GPT-4، BERT و LLaMA، نوعی از مدلهای یادگیری عمیق هستند که توانایی پردازش و تولید زبان طبیعی را دارند.
✅ چگونه کار میکنند؟
- این مدلها بر اساس شبکههای عصبی ترانسفورمر (Transformer) ساخته شدهاند.
- با حجم عظیمی از متن آموزش داده میشوند و میتوانند متون جدید تولید کنند.
- کاربرد اصلی آنها در ترجمه، خلاصهسازی، چتباتها، پاسخگویی به سوالات و تولید محتوا است.
مثال:
🔹 وقتی از یک LLM مثل GPT بپرسید: "آیا میتوانی یک متن کوتاه درباره گربهها بنویسی؟"
🔹 مدل بر اساس دادههایی که قبلاً یاد گرفته، متنی درباره گربهها تولید میکند.
🔸 ۲. مدلهای بینایی-زبانی (VLM - Vision-Language Models)
مدلهای VLM ترکیبی از بینایی (تصویر) و زبان (متن) هستند و میتوانند ورودیهایی مانند تصویر و متن را همزمان پردازش کنند. مدلهایی مانند CLIP، BLIP و GPT-4V نمونههای معروفی از این دسته هستند.
✅ چگونه کار میکنند؟
- این مدلها با استفاده از ترکیب شبکههای عصبی بینایی (مانند CNN یا ViT) و مدلهای زبانی (LLM) ساخته میشوند.
- میتوانند یک تصویر را توصیف کنند، متن را در تصویر پیدا کنند، یا به سوالاتی درباره تصویر پاسخ دهند.
مثال:
🔹 اگر یک عکس از یک سگ را به مدل بدهید و بپرسید "این چه نژادی است؟"، مدل با تطبیق تصویر و متن پاسخ مناسب میدهد.
🔹 در ChatGPT با قابلیت بینایی (GPT-4V) میتوان عکسی ارسال کرد و از مدل درباره آن سوال پرسید.
🔸 ۳. مدلهای انتشار (Diffusion Models)
مدلهای انتشار، نوعی از مدلهای مولد هستند که در تولید تصاویر، ویدیو و حتی صدا استفاده میشوند. مدلهایی مانند Stable Diffusion، DALL·E و Midjourney نمونههای مشهور هستند.
✅ چگونه کار میکنند؟
- این مدلها ابتدا با اضافه کردن نویز به تصاویر و سپس یادگیری چگونگی بازگردانی آنها آموزش داده میشوند.
- این فرآیند باعث میشود که مدل بتواند تصاویر واقعی از متن تولید کند.
مثال:
🔹 اگر به مدل Stable Diffusion دستور دهید "یک گربه در حال خواندن کتاب در کنار شومینه" را تولید کن، مدلی که از انتشار استفاده میکند تصویری جدید بر اساس این توضیح ایجاد میکند.
🔸 ۴. مدلهای چندوجهی (Multimodal Models)
مدلهای چندوجهی قادر به پردازش چندین نوع ورودی مانند تصویر، ویدیو، صدا و متن به طور همزمان هستند. این مدلها ترکیبی از LLM، VLM و سایر فناوریها هستند.
✅ چگونه کار میکنند؟
- این مدلها دادههای چندوجهی (Multi-Modal) را با هم ترکیب میکنند.
- میتوانند سوالات متنی را با ترکیب تصویر و صدا پاسخ دهند.
مثال:
🔹مدلهای هوش مصنوعی در خودروهای خودران که همزمان اطلاعات دوربین (تصویر)، رادار (داده سنسور) و متن (فرمانها) را پردازش میکنند.
🔹 مدلهای هوش مصنوعی در پزشکی که میتوانندعکس رادیولوژی و توضیحات پزشک را همزمان تحلیل کنند.
✨ اگر فقط با متن کار داریم؟ LLM بهترین گزینه است.
✨ اگر تصویر و متن را میخواهیم؟ VLM را انتخاب میکنیم.
✨ اگر نیاز به تولید تصاویر جدید از متن داریم؟ Diffusion مناسب است.
✨ اگر چندین نوع ورودی (صوت، تصویر، متن) را ترکیب میکنیم؟ از Multimodal استفاده میکنیم.
📁 #AI
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
در این توضیح، سه نوع مدل هوش مصنوعی پیشرفته یعنی مدلهای زبانی بزرگ (LLM)، مدلهای بینایی-زبانی (VLM) و مدلهای انتشار (Diffusion Models) را بررسی میکنیم. همچنین به مدلهای چندوجهی (Multimodal Models) میپردازیم.
🔸 ۱. مدلهای زبانی بزرگ (LLM - Large Language Models)
مدلهای زبانی بزرگ (LLM) مانند GPT-4، BERT و LLaMA، نوعی از مدلهای یادگیری عمیق هستند که توانایی پردازش و تولید زبان طبیعی را دارند.
✅ چگونه کار میکنند؟
- این مدلها بر اساس شبکههای عصبی ترانسفورمر (Transformer) ساخته شدهاند.
- با حجم عظیمی از متن آموزش داده میشوند و میتوانند متون جدید تولید کنند.
- کاربرد اصلی آنها در ترجمه، خلاصهسازی، چتباتها، پاسخگویی به سوالات و تولید محتوا است.
مثال:
🔹 وقتی از یک LLM مثل GPT بپرسید: "آیا میتوانی یک متن کوتاه درباره گربهها بنویسی؟"
🔹 مدل بر اساس دادههایی که قبلاً یاد گرفته، متنی درباره گربهها تولید میکند.
🔸 ۲. مدلهای بینایی-زبانی (VLM - Vision-Language Models)
مدلهای VLM ترکیبی از بینایی (تصویر) و زبان (متن) هستند و میتوانند ورودیهایی مانند تصویر و متن را همزمان پردازش کنند. مدلهایی مانند CLIP، BLIP و GPT-4V نمونههای معروفی از این دسته هستند.
✅ چگونه کار میکنند؟
- این مدلها با استفاده از ترکیب شبکههای عصبی بینایی (مانند CNN یا ViT) و مدلهای زبانی (LLM) ساخته میشوند.
- میتوانند یک تصویر را توصیف کنند، متن را در تصویر پیدا کنند، یا به سوالاتی درباره تصویر پاسخ دهند.
مثال:
🔹 اگر یک عکس از یک سگ را به مدل بدهید و بپرسید "این چه نژادی است؟"، مدل با تطبیق تصویر و متن پاسخ مناسب میدهد.
🔹 در ChatGPT با قابلیت بینایی (GPT-4V) میتوان عکسی ارسال کرد و از مدل درباره آن سوال پرسید.
🔸 ۳. مدلهای انتشار (Diffusion Models)
مدلهای انتشار، نوعی از مدلهای مولد هستند که در تولید تصاویر، ویدیو و حتی صدا استفاده میشوند. مدلهایی مانند Stable Diffusion، DALL·E و Midjourney نمونههای مشهور هستند.
✅ چگونه کار میکنند؟
- این مدلها ابتدا با اضافه کردن نویز به تصاویر و سپس یادگیری چگونگی بازگردانی آنها آموزش داده میشوند.
- این فرآیند باعث میشود که مدل بتواند تصاویر واقعی از متن تولید کند.
مثال:
🔹 اگر به مدل Stable Diffusion دستور دهید "یک گربه در حال خواندن کتاب در کنار شومینه" را تولید کن، مدلی که از انتشار استفاده میکند تصویری جدید بر اساس این توضیح ایجاد میکند.
🔸 ۴. مدلهای چندوجهی (Multimodal Models)
مدلهای چندوجهی قادر به پردازش چندین نوع ورودی مانند تصویر، ویدیو، صدا و متن به طور همزمان هستند. این مدلها ترکیبی از LLM، VLM و سایر فناوریها هستند.
✅ چگونه کار میکنند؟
- این مدلها دادههای چندوجهی (Multi-Modal) را با هم ترکیب میکنند.
- میتوانند سوالات متنی را با ترکیب تصویر و صدا پاسخ دهند.
مثال:
🔹مدلهای هوش مصنوعی در خودروهای خودران که همزمان اطلاعات دوربین (تصویر)، رادار (داده سنسور) و متن (فرمانها) را پردازش میکنند.
🔹 مدلهای هوش مصنوعی در پزشکی که میتوانندعکس رادیولوژی و توضیحات پزشک را همزمان تحلیل کنند.
✨ اگر فقط با متن کار داریم؟ LLM بهترین گزینه است.
✨ اگر تصویر و متن را میخواهیم؟ VLM را انتخاب میکنیم.
✨ اگر نیاز به تولید تصاویر جدید از متن داریم؟ Diffusion مناسب است.
✨ اگر چندین نوع ورودی (صوت، تصویر، متن) را ترکیب میکنیم؟ از Multimodal استفاده میکنیم.
📁 #AI
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
👍6🔥1