اتاق برنامه نویسی </>
405 subscribers
63 photos
1 video
7 links
📌 کانال آموزش لاراول
@PapiDon_state
Download Telegram
اتاق برنامه نویسی </>
Photo
📘 تعریف Artifact

آرتی‌فکت‌ها در DevOps به فایل‌هایی گفته می‌شوند که به عنوان نتیجه فرایندهای توسعه نرم‌افزار تولید می‌شوند. این می‌تواند شامل باینری‌ها، بسته‌های نرم‌افزاری، تصاویر داکر، و غیره باشد.

🚀 اهمیت آرتی‌فکت‌ها در DevOps

- کارایی: ذخیره‌سازی آرتی‌فکت‌ها در مخزن آرتی‌فکت به تیم‌های توسعه اجازه می‌دهد تا به راحتی و سریعتر به فایل‌های مورد نیاز دسترسی پیدا کنند.
- نظم و انسجام: تمامی فایل‌های مرتبط با یک پروژه نرم‌افزاری در یک مکان منظم و دسترسی‌پذیر نگهداری می‌شوند.
- تکرارپذیری: استفاده از آرتی‌فکت‌های ثابت و مدیریت شده در تمام مراحل توسعه تا تولید، اطمینان حاصل می‌کند که نرم‌افزارها به طور یکسان و بدون تغییر در همه محیط‌ها اجرا می‌شوند.

📦 انواع آرتی‌فکت‌ها

1️⃣ باینری‌ها: فایل‌های اجرایی که مستقیماً می‌توانند بر روی سیستم‌ها اجرا شوند.

2️⃣ بسته‌های نرم‌افزاری: مانند فایل‌های .deb. jar که حاوی نرم‌افزارهای آماده نصب هستند.

3️⃣ تصاویر داکر: نسخه‌های قابل حمل نرم‌افزار که می‌توانند در محیط‌های مختلف به راحتی اجرا شوند.

4️⃣ پایگاه‌های داده موقتی و تنظیمات: داده‌ها و تنظیمات مورد نیاز برای اجرای نرم‌افزار در محیط‌های مختلف.

🏗 مخزن آرتی‌فکت‌ها

محلی برای ذخیره و مدیریت آرتی‌فکت‌ها که اغلب از سیستم‌هایی مانند JFrog Artifactory یا Nexus Repository استفاده می‌شود. این سیستم‌ها امکاناتی مانند:

- نسخه‌بندی: مدیریت نسخه‌های مختلف آرتی‌فکت‌ها.
- امنیت: تأمین امنیت دسترسی به فایل‌های آرتی‌فکت.
- یکپارچگی: اطمینان از یکپارچگی فایل‌های آرتی‌فکت در طول زمان.

🔁 نقش آرتی‌فکت‌ها در CI/CD

در فرایند ادغام مداوم (CI) و تحویل مداوم (CD)، آرتی‌فکت‌ها کلیدی هستند:

- ادغام مداوم (CI): تولید و ذخیره‌سازی آرتی‌فکت‌ها پس از هر تغییر کد برای اطمینان از سازگاری و عملکرد نرم‌افزار.
- تحویل مداوم (CD): استفاده از آرتی‌فکت‌های ثبت‌شده برای استقرار سریع و مکرر نرم‌افزار به محیط‌های مختلف تست و تولید.

🔄 بهترین شیوه‌ها

- استانداردسازی: استفاده از فرمت‌ها و استانداردهای یکسان برای تمام آرتی‌فکت‌ها.
- خودکارسازی: خودکارسازی تولید و استقرار آرتی‌فکت‌ها به منظور کاهش خطاهای انسانی و افزایش کارایی.
- مستندسازی: ثبت تمام فعالیت‌های مرتبط با آرتی‌فکت‌ها برای تسهیل در ردیابی و حل مشکلات.

📚 خلاصه
آرتی‌فکت‌ها بخش مهمی از فرآیند DevOps هستند که به بهبود سرعت، کارایی و امنیت در توسعه نرم‌افزار کمک می‌کنند. استفاده صحیح و مؤثر از آن‌ها می‌تواند تأثیر بسزایی در موفقیت پروژه‌های نرم‌افزاری داشته باشد.




📁 #DevOps

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
1👍1
📚 آشنایی با مفهوم کرنل و سیستم عامل

در دنیای فناوری اطلاعات، تفاوت‌های بین «کرنل» و «سیستم عامل» ممکن است کمی گیج‌کننده به نظر برسد.

🌐 کرنل (Kernel) چیست؟

کرنل را می‌توان به عنوان هسته‌ی مرکزی یا مغز سیستم عامل دانست. کرنل مسئولیت‌های بسیار مهمی دارد:

1️⃣ مدیریت منابع: کرنل کنترل می‌کند که برنامه‌ها چگونه و چه مقدار از منابع سخت‌افزاری مانند CPU و حافظه را استفاده کنند.

2️⃣ ارتباط سخت‌افزار و نرم‌افزار: کرنل به عنوان واسطه‌ای بین دستورات نرم‌افزاری و سخت‌افزار عمل می‌کند.

⌛️ کرنل مانند یک رهبر ارکستر عمل می‌کند که تعیین می‌کند چه نوازنده‌ای در چه زمانی باید نواخته شود تا هماهنگی و تعادل در اجرای قطعه موسیقی برقرار باشد.

💻 سیستم عامل (Operating System) چیست؟

سیستم عامل، که شامل کرنل می‌شود، سیستمی است جامع که وظایف زیر را بر عهده دارد:

🔸 رابط کاربری: فراهم کردن یک محیط گرافیکی (GUI) یا متنی (CLI) برای تعامل کاربران با کامپیوتر.
🔹مدیریت برنامه‌ها: اجرا، مدیریت و بستن برنامه‌ها.
🔸امنیت و دسترسی: تعیین دسترسی‌ها و محافظت از داده‌ها.
🔹پشتیبانی از دستگاه‌ها: مدیریت درایورها و ارتباط با سخت‌افزارهای جانبی.

🖥 سیستم عامل می‌تواند به عنوان یک مرکز کنترل تصور شود که همه جنبه‌های استفاده از کامپیوتر را پوشش می‌دهد، از رابط کاربری گرفته تا امنیت و اجرای برنامه‌ها.

👀 تفاوت کرنل و سیستم عامل

در حالی که کرنل هسته‌ی مرکزی و ضروری سیستم عامل است، سیستم عامل خود شامل کرنل به علاوه تمام برنامه‌ها و ابزارهای لازم برای ایجاد یک محیط کاملاً قابل استفاده است. به طور خلاصه، کرنل زیربنای سیستم عامل است، در حالی که سیستم عامل تجربه کامل کاربری را ارائه می‌دهد.

👨‍💻 برای مثال، لینوکس به طور خاص به کرنل اشاره دارد که در سیستم‌های عامل مختلف مانند Ubuntu و Fedora مورد استفاده قرار می‌گیرد. این سیستم‌های عامل از کرنل لینوکس استفاده می‌کنند اما از طریق افزودن برنامه‌ها، رابط‌های کاربری و سایر عناصر، تجربه‌ی کاربری متفاوتی را ارائه می‌دهند.


📁 #DevOps

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
2👍1🔥1
📘 توضیح مفهوم Open Source و Closed Source

در دنیای نرم‌افزار، اصطلاحات "Open Source" (منبع باز) و "Closed Source" (منبع بسته) دو رویکرد متفاوت در توسعه و توزیع نرم‌افزار را نشان می‌دهند. بیایید با زبانی ساده این دو مفهوم را بررسی کنیم و ببینیم آیا "Open Source" همیشه به معنای رایگان است یا خیر.

🌐 Open Source (منبع باز)

نرم‌افزار منبع باز به نرم‌افزاری گفته می‌شود که کد منبع آن برای عموم قابل دسترسی است. این به کاربران اجازه می‌دهد که:

1️⃣ مشاهده کنند: کاربران می‌توانند کد نرم‌افزار را بررسی کنند تا بفهمند دقیقاً چگونه کار می‌کند.

2️⃣ تغییر دهند: افراد می‌توانند تغییرات یا بهبودهایی در کد ایجاد کنند.

3️⃣ به اشتراک بگذارند: کاربران می‌توانند کد تغییر یافته یا اصلی را با دیگران به اشتراک بگذارند.

👨‍💻 برای مثال، سیستم عامل‌هایی مانند Linux و برنامه‌هایی مثل Firefox و LibreOffice از جمله محصولات نرم‌افزاری منبع باز هستند.

🔒 Closed Source (منبع بسته)

نرم‌افزار منبع بسته، که گاهی اوقات به عنوان "proprietary software" نیز شناخته می‌شود، نرم‌افزاری است که کد منبع آن فقط توسط ایجادکنندگانش قابل دسترسی و ویرایش است. این نوع نرم‌افزار:

1️⃣ محدودیت دسترسی: کاربران نمی‌توانند کد منبع را مشاهده یا تغییر دهند.

2️⃣ خرید لایسنس: معمولاً برای استفاده از نرم‌افزار باید هزینه‌ای پرداخت شود.

3️⃣ پشتیبانی و بروزرسانی‌ها: توسعه دهندگان نرم‌افزار برای پشتیبانی و به‌روزرسانی‌های آن مسئول هستند.

نمونه‌هایی از نرم‌افزار منبع بسته شامل Microsoft Windows و Adobe Photoshop می‌باشند.

آیا Open Source به معنای رایگان است؟

اینکه نرم‌افزاری منبع باز است به این معنا نیست که حتماً رایگان باشد. "رایگان" به قیمت نرم‌افزار اشاره دارد، در حالی که "منبع باز" به دسترسی به کد منبع اشاره دارد. بسیاری از نرم‌افزارهای منبع باز بدون هزینه قابل دانلود و استفاده هستند، اما برخی دیگر ممکن است برای ویژگی‌های پیشرفته یا پشتیبانی تخصصی هزینه‌ای دریافت کنند.

🔑 به طور خلاصه، منبع باز یک مدل توسعه نرم‌افزار است که تأکید بر شفافیت، همکاری و دسترسی آزاد به کد منبع دارد، در حالی که منبع بسته کنترل بیشتری بر نرم‌افزار و کاربرد آن دارد.


📁 #SoftwareTransparency

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
اتاق برنامه نویسی </>
Photo
Namespace in Linux

در لینوکس یک ویژگی از هسته لینوکس است که به فرآیندها (Processes) امکان می‌دهد تا فقط بخشی از سیستم‌عامل و منابع موجود را ببینند. این به‌طور موثری اجازه می‌دهد که هر فرآیند فکر کند که بر روی یک سیستم مستقل و اختصاصی در حال اجرا است.

در لینوکس Namespace، مکانیزمی برای فراهم کردن ایزولاسیون و مدیریت منابع برای فرآیندهای در حال اجرا است. این ویژگی به فرآیندها این امکان را می‌دهد که فقط بخش‌هایی از سیستم عامل را که به آن‌ها اختصاص داده شده مشاهده و استفاده کنند.

⁉️ چرا Namespace ها مهم هستند؟

برای ایجاد ایزولاسیون بین فرآیندهای در حال اجرا در یک سیستم عامل واحد استفاده می‌شوند. این ایزولاسیون به مدیریت بهتر منابع و امنیت سیستم کمک می‌کند.

انواع Namespace در لینوکس:

1️⃣ PID Namespace:
ایزوله کردن فرآیندهای سیستم. هر PID namespace دارای مجموعه‌ای منحصر به فرد از شناسه‌های فرآیند است.

2️⃣ Network Namespace:
ایزوله کردن منابع شبکه. فرآیندهای داخل یک Network Namespace فقط می‌توانند اجزای شبکه‌ای را که به آن‌ها اختصاص داده شده ببینند، مانند اینترفیس‌ها، جداول مسیریابی، و آدرس‌های IP.

3️⃣ Mount Namespace:
ایزوله کردن نقاط اتصال فایل سیستم. این امر به فرآیندها اجازه می‌دهد که نمایی منحصر به فرد از ساختار فایل سیستم داشته باشند.

4️⃣ UTS Namespace:
ایزوله کردن نام سیستم و نام دامنه. تغییرات در یک UTS Namespace تأثیری بر سایر Namespace‌ها ندارد.

5️⃣ User Namespace:
ایزوله کردن شناسه‌های کاربر و گروه. یک فرآیند می‌تواند دارای دسترسی‌های ریشه (root) در یک User Namespace باشد، بدون آنکه بر دیگر Namespace‌ها تأثیر بگذارد.

6️⃣ IPC Namespace:
ایزوله کردن سازوکارهای بین فرآیندی (Inter-process communication) مانند صف‌های پیام و حافظه مشترک.

⚙️ چگونه Namespace ها به داکر کمک می‌کنند؟

در داکر، Namespace ها بخش کلیدی برای فراهم کردن ایزولاسیون بین کانتینرها هستند. هر کانتینر می‌تواند دارای Namespace‌های مختلفی باشد که اجازه می‌دهد آنها به طور مجزا از دیگر کانتینرها اجرا شوند. این به ایمن‌سازی کانتینرها کمک می‌کند و مطمئن می‌شود که فعالیت‌های یک کانتینر تأثیری بر دیگر کانتینرها نداشته باشد.

🎲 نتیجه‌گیری:

در لینوکس Namespace‌ها ابزارهای قدرتمندی هستند که مدیریت منابع و ایزولاسیون را در سطح سیستم‌عامل بهبود می‌بخشند. این تکنولوژی به مدیران سیستم اجازه می‌دهد تا محیط‌های مجزا و امن را برای فرآیندهای مختلف فراهم کنند، که این امر به کاربردهای امنیتی، توسعه نرم‌افزار و مدیریت منابع به طور وسیع کمک می‌کند. Namespace‌ها با فراهم کردن این قابلیت‌ها، لینوکس را به یک پلتفرم بسیار قابل تطبیق و انعطاف‌پذیر برای محیط‌های چندکاربره و چندبرنامه‌ای تبدیل می‌کنند.



📁 #Linux

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1👏1
🛡 مفهوم DAC
( Discretionary Access Control )

تصور کنید شما صاحب یک خانه هستید و تصمیم می‌گیرید که چه کسانی می‌توانند وارد خانه‌تان شوند یا از وسایل داخل آن استفاده کنند. در سیستم‌های کامپیوتری، DAC (کنترل دسترسی اختیاری) به همین معناست؛ یعنی صاحب فایل‌ها و منابع سیستم می‌تواند تصمیم بگیرد که چه کسانی می‌توانند به آن‌ها دسترسی داشته باشند.

کاربرد DAC چیست؟

- کنترل دسترسی توسط مالک: مالک فایل‌ها و منابع سیستم می‌تواند تصمیم بگیرد که چه کسانی به آن‌ها دسترسی داشته باشند.

- انعطاف‌پذیری: امکان تغییر دسترسی‌ها به سادگی توسط مالک وجود دارد.

- مدیریت کاربران: تعیین و مدیریت دسترسی‌های کاربران به منابع مختلف سیستم.

⚙️ چگونه DAC کار می‌کند؟

در سیستم‌عامل‌های مبتنی بر لینوکس، هر فایل یا پوشه‌ای دارای مالک (کاربر) و گروه است. مالک می‌تواند سطوح دسترسی مختلفی را برای خود، گروه و سایر کاربران تعیین کند. این سطوح دسترسی به سه دسته اصلی تقسیم می‌شوند:

1️⃣ خواندن (Read - r): امکان مشاهده محتویات فایل یا پوشه.

2️⃣ نوشتن (Write - w): امکان تغییر محتویات فایل یا ایجاد و حذف فایل‌ها در پوشه.

3️⃣ اجرا (Execute - x): امکان اجرای فایل به عنوان برنامه یا دسترسی به محتویات پوشه.

📝 مزایای DAC

🔸 سادگی: پیاده‌سازی و مدیریت آسان.
🔸 انعطاف‌پذیری: مالک می‌تواند به راحتی دسترسی‌ها را تغییر دهد.
🔸کنترل مستقیم: مالک فایل یا پوشه کنترل کاملی بر روی دسترسی‌ها دارد.

🛠 محدودیت‌های DAC

امنیت کمتر: در مقایسه با سیستم‌های کنترل دسترسی اجباری (MAC)، امنیت کمتری دارد زیرا کاربران می‌توانند به طور دلخواه دسترسی‌ها را تغییر دهند.

پیچیدگی در مدیریت زیاد کاربران: در سیستم‌هایی با تعداد کاربران زیاد، مدیریت دسترسی‌ها ممکن است پیچیده شود.

جمع‌بندی

یک روش ساده و موثر برای کنترل دسترسی‌ها در سیستم‌های لینوکسی است که به مالک فایل‌ها اجازه می‌دهد تا به راحتی تعیین کند که چه کسانی می‌توانند به فایل‌ها و پوشه‌هایش دسترسی داشته باشند.



📁 #Linux #DAC

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
اتاق برنامه نویسی </>
🛡 مفهوم DAC ( Discretionary Access Control ) تصور کنید شما صاحب یک خانه هستید و تصمیم می‌گیرید که چه کسانی می‌توانند وارد خانه‌تان شوند یا از وسایل داخل آن استفاده کنند. در سیستم‌های کامپیوتری، DAC (کنترل دسترسی اختیاری) به همین معناست؛ یعنی صاحب فایل‌ها…
☄️ مفهوم MAC

( Mandatory Access Control )

تصور کنید شما مدیر یک شرکت بزرگ هستید و می‌خواهید مطمئن شوید که فقط افراد مشخصی به بخش‌های مختلف شرکت دسترسی دارند. مثلاً تنها کارمندان بخش مالی به اطلاعات مالی دسترسی داشته باشند و بقیه نتوانند به این اطلاعات دسترسی پیدا کنند. در سیستم‌های کامپیوتری، MAC (کنترل دسترسی اجباری) به همین معناست؛ یعنی یک سیاست امنیتی مرکزی که دسترسی به منابع سیستم را کنترل می‌کند و کاربران نمی‌توانند این سیاست‌ها را تغییر دهند.

👀 کاربرد MAC چیست؟

- امنیت بالا: جلوگیری از دسترسی غیرمجاز به اطلاعات حساس.
- کنترل مرکزی: مدیران سیستم می‌توانند سیاست‌های امنیتی را به صورت مرکزی و دقیق تنظیم کنند.
- عدم تغییر توسط کاربران: کاربران نمی‌توانند سیاست‌های دسترسی را تغییر دهند و فقط می‌توانند در چارچوب‌های تعیین شده عمل کنند.

⚙️ چگونه MAC کار می‌کند؟

در سیستم‌های مبتنی بر لینوکس، MAC با استفاده از ماژول‌های امنیتی خاصی پیاده‌سازی می‌شود که سیاست‌های امنیتی را اعمال می‌کنند. این سیاست‌ها می‌توانند بسیار دقیق و پیچیده باشند و به مدیران سیستم اجازه دهند که دسترسی به فایل‌ها، پوشه‌ها، پورت‌ها و سایر منابع را به طور کامل کنترل کنند.

🛡 ماژول‌های معروف MAC در لینوکس

1️⃣ SELinux (Security-Enhanced Linux):

- توسط NSA توسعه داده شده است و از سیاست‌های امنیتی بسیار دقیق پشتیبانی می‌کند.
- اجازه می‌دهد تا سیاست‌های امنیتی پیچیده‌ای را تعریف کنید که کنترل دقیقی بر دسترسی‌ها دارند.

2️⃣ AppArmor:

- توسط Novell/SUSE توسعه داده شده و سیاست‌های امنیتی را با استفاده از پروفایل‌ها اعمال می‌کند.
- هر پروفایل می‌تواند دسترسی‌های مجاز یک برنامه را مشخص کند.

3️⃣ SMACK (Simplified Mandatory Access Control Kernel):

- توسط Intel توسعه داده شده و سیاست‌های امنیتی را به صورت ساده‌تری پیاده‌سازی می‌کند.
- برچسب‌های امنیتی ساده‌ای برای کنترل دسترسی‌ها استفاده می‌شود.

🗂 مثالی از MAC در لینوکس

فرض کنید شما یک سیستم با SELinux دارید. SELinux سیاست‌های امنیتی خود را به فایل‌ها و برنامه‌ها اعمال می‌کند. مثلاً یک برنامه ممکن است اجازه نداشته باشد به فایل‌های خاصی دسترسی پیدا کند، حتی اگر مالک آن فایل اجازه دسترسی را داده باشد.

مثال:
فرض کنید یک فایل به نام secure_file.txt دارید. در حالت عادی (بدون MAC)، مالک فایل می‌تواند دسترسی‌ها را تعیین کند:

-rw-r--r-- 1 user group 0 May 17 12:00 secure_file.txt


اما با فعال بودن SELinux، سیاست‌های امنیتی بیشتری اعمال می‌شود. مثلاً سیاست SELinux ممکن است بگوید که تنها برنامه‌های خاصی می‌توانند به این فایل دسترسی داشته باشند، حتی اگر دسترسی فایل به صورت عمومی تنظیم شده باشد.

🔼 مزایای MAC

- امنیت بالا: با اعمال سیاست‌های دقیق، امنیت سیستم بهبود می‌یابد.
- کنترل مرکزی: مدیران سیستم می‌توانند به صورت مرکزی سیاست‌های امنیتی را کنترل کنند.
- پیشگیری از دسترسی غیرمجاز: جلوگیری از دسترسی غیرمجاز به منابع حساس.

❗️ محدودیت‌های MAC

- پیچیدگی در تنظیمات: پیاده‌سازی و تنظیم سیاست‌های MAC می‌تواند پیچیده و زمان‌بر باشد.
- سختی در تطابق با نیازهای خاص: سیاست‌های عمومی ممکن است نیازهای خاص همه کاربران را پوشش ندهند و نیاز به سفارشی‌سازی داشته باشند.
- نیاز به آموزش و آگاهی بیشتر: کاربران و مدیران سیستم نیاز به آموزش و آگاهی بیشتری برای کار با MAC دارند.

جمع‌بندی

یک روش پیشرفته برای کنترل دسترسی‌ها در سیستم‌های لینوکسی است که با اعمال سیاست‌های امنیتی مرکزی و دقیق، امنیت سیستم را بهبود می‌بخشد. با استفاده از ماژول‌های امنیتی مانند SELinux و AppArmor، مدیران سیستم می‌توانند دسترسی به منابع را به دقت کنترل کنند و از دسترسی غیرمجاز جلوگیری کنند. با این حال، پیچیدگی پیاده‌سازی و نیاز به آموزش‌های بیشتر از جمله چالش‌های استفاده از MAC است.



📁 #Linux #MAC

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1👏1
اتاق برنامه نویسی </>
Photo
⭐️ مفهوم CGroup در لینوکس به زبان ساده

CGroup (Control Group)

یکی از ویژگی‌های مهم در سیستم‌عامل لینوکس است که به شما امکان مدیریت منابع سیستمی مانند CPU، حافظه، دیسک و شبکه را برای گروهی از فرآیندها می‌دهد. این ابزار برای کنترل و محدود کردن استفاده از منابع توسط برنامه‌ها و سرویس‌ها بسیار مفید است.

🖥 مفهوم CGroup :

1️⃣ گروه‌بندی فرآیندها: CGroup به شما این امکان را می‌دهد که فرآیندهای مرتبط را در یک گروه قرار دهید. به عنوان مثال، می‌توانید همه فرآیندهای یک برنامه خاص را در یک گروه بگذارید.

2️⃣ مدیریت منابع: بعد از گروه‌بندی فرآیندها، می‌توانید منابع سیستمی را به آن گروه اختصاص دهید یا محدود کنید. مثلاً می‌توانید تعیین کنید که این گروه از فرآیندها فقط از 20 درصد از CPU استفاده کنند یا بیش از 1 گیگابایت حافظه مصرف نکنند.

3️⃣ نظارت و کنترل: با استفاده از CGroup، می‌توانید مصرف منابع توسط گروه‌های مختلف را نظارت کنید و در صورت نیاز تنظیمات را تغییر دهید تا از استفاده بیش از حد منابع جلوگیری کنید.

کاربردهای 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
🔥21
اتاق برنامه نویسی </>
Photo
🖥 حل مشکل دانلود متادیتا برای مخازن CentOS در کانتینر داکر با استفاده از مخازن Vault

🧐هنگامی که تلاش می‌کنید بسته‌ای را در داخل کانتینر CentOS-8 با استفاده از 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


⁉️ پرسش‌های متداول (FAQ)

🤔متادیتا چیست؟

متادیتا شامل اطلاعاتی در مورد بسته‌ها، نسخه‌ها، وابستگی‌ها و سایر جزئیات مرتبط با مخازن نرم‌افزاری است. yum از متادیتا برای جستجو و مدیریت بسته‌ها استفاده می‌کند.

متادیتا اطلاعاتی است که yum از آن برای مدیریت بسته‌ها استفاده می‌کند. این اطلاعات شامل:
- لیست بسته‌های موجود
- نسخه‌های مختلف هر بسته
- وابستگی‌های هر بسته
- اطلاعات مربوط به امنیت و بروزرسانی‌ها

بدون دسترسی به متادیتا، yum نمی‌تواند بسته‌های مورد نظر شما را پیدا و نصب کند.

🤓مخازن Vault چیست؟

مخازن Vault شامل نسخه‌های قدیمی‌تر از بسته‌های نرم‌افزاری است که برای نسخه‌هایی از سیستم عامل که به پایان عمر خود رسیده‌اند (EOL) استفاده می‌شود. این مخازن به شما امکان دسترسی به بسته‌های نرم‌افزاری و بروزرسانی‌ها را حتی پس از پایان عمر رسمی نسخه سیستم عامل می‌دهند.

مخازن Vault به شما اجازه می‌دهند تا به نسخه‌های قدیمی‌تر بسته‌ها دسترسی داشته باشید که دیگر در مخازن اصلی موجود نیستند. این مخازن به ویژه برای سیستم‌های قدیمی که به پایان عمر خود رسیده‌اند (EOL) مفید هستند.


📁 #Linux #Docker

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥1
مفهوم Mount کردن در لینوکس به زبان ساده

تصور کنید که شما یک کمد لباس دارید که پر از لباس‌های مختلفه. حالا فرض کنید این کمد توی اتاق دیگه‌ای هست و شما نمی‌تونید به راحتی به لباس‌هاتون دسترسی پیدا کنید. اما اگه شخصی اون کمد رو به اتاق شما بیاره و توی گوشه‌ای از اتاقت بذارن، شما می‌تونید خیلی راحت به همه لباس‌ها دسترسی داشته باشید.

در دنیای کامپیوتر هم، وقتی می‌خواهیم به فایل‌ها و پوشه‌هایی که روی یک دیسک یا پارتیشن (مثل همون کمد لباس‌ها) هستند دسترسی پیدا کنیم، باید اون دیسک یا پارتیشن رو به یک دایرکتوری (مثل همون اتاق شما) Mount کنیم. این کار باعث میشه که کامپیوتر بدونه این دیسک یا پارتیشن رو کجا پیدا کنه و بتونه فایل‌ها رو بخونه و بنویسه.

🧐 چرا باید Mount کنیم؟

1️⃣ دسترسی راحت‌تر به فایل‌ها: مثل وقتی که کمد لباس‌هاتون توی اتاقتون هست، وقتی یک دیسک یا پارتیشن رو Mount می‌کنیم، می‌تونیم راحت‌تر به فایل‌ها دسترسی داشته باشیم.

2️⃣ مرتب و سازمان‌دهی شده: فرض کنید همه لباس‌هاتون توی یک کمد بزرگ و درهم باشند. پیدا کردن یک لباس خاص خیلی سخت میشه. اما اگر کمدهای جداگانه برای هر نوع لباس داشته باشید، پیدا کردنشون خیلی راحت‌تر میشه. در کامپیوتر هم، هر دیسک یا پارتیشن می‌تونه به یک دایرکتوری خاص Mount بشه تا فایل‌ها بهتر سازمان‌دهی بشن.

3️⃣ مدیریت بهتر: وقتی که یک دیسک یا پارتیشن Mount میشه، می‌تونید راحت‌تر بفهمید چقدر فضا استفاده شده و چقدر فضا خالی دارید. این کار مثل این می‌مونه که بدونید چقدر از کمد لباس‌هاتون پر شده و چقدر جا برای لباس‌های جدید دارید.



📁 #Linux

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
👏2🔥1
اتاق برنامه نویسی </>
Photo
Learn things that don't change

یادگیری چیزهایی که تغییر نمی‌کنند.

در این پست، تلاش می‌کنیم بفهمیم چرا باید اصول پایه را به جای فریم‌ورک‌ها یاد بگیریم و این موضوع چه تاثیری دارد.

🤔 آیا تاکنون به این فکر کرده‌اید که چرا برخی تکنولوژی‌ها هنوز با ما هستند و برخی دیگر از بین رفته‌اند؟

اینجا است که اثر Lindy وارد می‌شود. این اثر می‌گوید تکنولوژی‌ها و نوآوری‌هایی که به مدت طولانی مورد استفاده قرار گرفته‌اند، احتمال بیشتری دارند که در آینده نیز مورد استفاده قرار گیرند. به عبارت دیگر، هرچه یک آیتم بیشتر مورد استفاده قرار گرفته باشد، احتمال بیشتری دارد که همچنان استفاده شود.

👀 اثر Lindy

ما توسعه‌دهندگان دوست داریم هرچه زودتر چیزهای جدید را یاد بگیریم. این چیزها عمدتا شامل فریم‌ورک‌ها و ابزارهای جدید است (مانند React، Angular، Spring، Web Forms و غیره). با این حال، این فریم‌ورک‌ها معمولاً عمر کوتاهی دارند، در بهترین حالت ۲ تا ۵ سال. به جای یادگیری فریم‌ورک‌ها، که تا حدی لازم است، باید بیشتر روی یادگیری اصول پایه تمرکز کنیم.

یادگیری اصول پایه توسعه نرم‌افزار به توسعه‌دهندگان کمک می‌کند اصول و مفاهیم زیرین که در فریم‌ورک‌ها و زبان‌های برنامه‌نویسی مختلف مشترک هستند را بفهمند. این درک به انعطاف‌پذیری و سازگاری بیشتر هنگام کار با تکنولوژی‌های جدید یا مواجهه با مشکلاتی که یک فریم‌ورک خاص ممکن است زمان ببرد تا حل شود، منجر می‌شود.

علاوه بر این، داشتن درکی قوی از اصول پایه می‌تواند به استفاده موثرتر و کارآمدتر از فریم‌ورک‌ها منجر شود، زیرا توسعه‌دهنده بهتر می‌تواند فریم‌ورک‌ها را برای برآورده کردن نیازهای خاص سفارشی و گسترش دهد.

مثالی از یک اپلیکیشن وب که به کاربران امکان آپلود و اشتراک‌گذاری تصاویر را می‌دهد در نظر بگیرید که مثلاً در Ruby on Rails و قابلیت‌های آن برای پردازش تصاویر انجام شده است. اگر تعداد کاربران افزایش یابد، فقط می‌توانیم با مسائل عملکردی کار کنیم اگر فریم‌ورک را خوب بشناسیم. با این حال، اگر اصول پایه توسعه وب را بفهمیم، می‌توانیم نقاط ضعف را شناسایی کرده و راه‌حل‌های مختلفی مانند استفاده از CDN، بهینه‌سازی اندازه تصاویر، استفاده از راه‌حل‌های مختلف ذخیره‌سازی و غیره را امتحان کنیم.


⁉️پس کدام اصول پایه را یاد بگیریم؟ اینجا برخی از آنها آمده است :

🔸Algorithms
🔹Data
🔸Clean Code
🔹SOLID Principles
🔸OO Programming
🔹Design Patterns
🔸Distributed Computing
🔹 System Design
...


⚠️سعی کنید چیزهایی که تغییر نمی‌کنند را یاد بگیرید (نقل قول از جف بزوس). روی پایه‌ها تمرکز کنید، نه فریم‌ورک‌ها.

🔝 کتاب‌هایی که هر مهندس نرم‌افزاری باید در سال ۲۰۲۴ بخواند ...

📌 The Pragmatic Programmer
نوشته دیوید توماس و اندرو هانت.

📌 Modern Software Engineering
دیوید فارلی

📌 Code Complete: A Practical Handbook of Software Construction
استیو مک‌کانل

📌 Software Engineering at Google
تیتوس وینترز، تام منشرک و هیروم رایت


💥 Good Practices


📌 Clean Code
عمو باب مارتین

📌 Head First Design Patterns
اریک فریمن

📌 Refactoring
مارتین فاولر

📌 Grokking Algorithms
آدیتیا بارگاوا




📁 #Skills

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥1
اتاق برنامه نویسی </>
Learn things that don't change یادگیری چیزهایی که تغییر نمی‌کنند. در این پست، تلاش می‌کنیم بفهمیم چرا باید اصول پایه را به جای فریم‌ورک‌ها یاد بگیریم و این موضوع چه تاثیری دارد. 🤔 آیا تاکنون به این فکر کرده‌اید که چرا برخی تکنولوژی‌ها هنوز با ما هستند…
🤓 کتاب‌هایی که هر مهندس نرم‌افزاری باید در سال ۲۰۲۴ بخواند ...

🔖The Pragmatic Programmer The Pragmatic Programmer
David Thomas and Andrew Hunt

این کتاب توصیه‌های عملی و حرفه‌ای برای توسعه‌دهندگان ارائه می‌دهد. موضوعاتی مانند مسئولیت‌پذیری شخصی و توسعه حرفه‌ای تا تکنیک‌های معماری را پوشش می‌دهد. با وجود اینکه در سال ۱۹۹۹ نوشته شده است، هنوز در بسیاری از جنبه‌ها معتبر است. ویژگی منحصر به فرد این کتاب این است که به صورت عملی با مجموعه‌ای از نکات برای بهبود فرآیند توسعه به شما آموزش می‌دهد.

🔖The Pragmatic Programmer Modern Software Engineering
David Farley

این کتاب بر ساخت نرم‌افزار عالی تمرکز دارد و نویسنده یک چارچوب محکم برای اتصال بهترین شیوه‌ها مانند Continuous Delivery (CD)، معماری شش ضلعی و Test-Driven Development به ایده‌های اصلی در مهندسی نرم‌افزار ارائه می‌دهد. او همچنین در مورد تاریخچه توسعه نرم‌افزار و ایده‌هایی که صنعت را تغییر داده‌اند، می‌نویسد.

🔖The Pragmatic Programmer Code Complete: A Practical Handbook of Software Construction
Steve McConnell

یکی از کتاب‌هایی که بیش از ۱۵ سال پیش نوشته شده و هنوز معتبر است. این کتاب به طراحی، کدنویسی، اشکال‌زدایی و تست می‌پردازد. در بیش از ۹۰۰ صفحه، نویسندگان نحوه نوشتن برنامه‌ها برای مردم اول و سپس برای کامپیوترها، چگونگی تقسیم کد به دامنه‌ها و چگونگی تسلط بر ویژگی‌های انسانی بهترین برنامه‌نویسان (تواضع، کنجکاوی و مهم‌تر از همه، کنترل اگو) را توضیح می‌دهند.

🔖The Pragmatic Programmer Software Engineering at Google
Titus Winters, Tom Manshreck, and Hyrum Wright

این کتاب درباره برنامه‌نویسی نیست، بلکه در مورد شیوه‌های مهندسی در گوگل برای حفظ و سلامت کدپایه آنها است. در این کتاب، تفاوت بین مهندسی نرم‌افزار و برنامه‌نویسی، اهمیت قانون بیانسه، و چگونگی تست صحیح چیزها و انتشار کوچک و مکرر را خواهید آموخت.

🔖The Pragmatic Programmer Head First Design Patterns
Eric Freeman

این کتاب الگوهای طراحی اصلی نرم‌افزار را برای ایجاد طراحی‌های انعطاف‌پذیرتر، شیک‌تر و قابل استفاده مجدد بدون نیاز به کشف مجدد راه‌حل‌های طراحی توصیف می‌کند. این کتاب به سبک کتاب‌های For Dummies نوشته شده است، به طوری که برای مبتدیان قابل فهم باشد.

🔖The Pragmatic Programmer Grokking Algorithms
Aditya Bhargava

این کتاب به زبانی ساده درباره کاربرد الگوریتم‌های استاندارد در مسائل روزمره توسعه‌دهندگان توضیح می‌دهد. از مرتب‌سازی و جستجو شروع می‌کند و سپس به فشرده‌سازی داده‌ها و هوش مصنوعی با نمونه کدهایی در پایتون می‌پردازد. احتمالاً بهترین کتاب برای شروع یادگیری الگوریتم‌ها است.

🔖The Pragmatic Programmer Designing Data-Intensive Applications
Martin Kleppman

این کتاب مفاهیم پیشرفته داده مانند پایگاه‌های داده و مدل‌های داده و مفاهیم توزیع‌شده مانند تراکنش‌ها، تکرار، سازگاری و غیره را توضیح می‌دهد. این کتاب یکی از تأثیرگذارترین کتاب‌ها در این دسته است.

🔖The Pragmatic Programmer Growing Object-Oriented Software by Tests
Steve Freeman

نویسندگان رویه‌های خود، اهداف طراحی و برخی ابزارهایی که برای انجام کار استفاده می‌کنند را شرح می‌دهند. در یک مثال گسترده، خواهید فهمید که چگونه TDD در چند سطح عمل می‌کند، با استفاده از تست‌ها برای هدایت ویژگی‌های کد و ساختار شیءگرا و استفاده از اشیاء شبیه‌سازی‌شده برای یافتن و سپس تعریف پیوندها بین اشیاء.

🔖The Pragmatic Programmer A Philosophy of Software Design
John Ousterhout

این کتاب توضیح می‌دهد که چگونه سیستم‌های نرم‌افزاری پیچیده را به قطعات قابل پیاده‌سازی مستقل تقسیم کنیم. سپس به مسائل فلسفی در مورد نحوه برخورد با فرآیند طراحی نرم‌افزار می‌پردازد و فهرستی از راهنمایی‌های طراحی برای دنبال کردن ارائه می‌دهد. این کتاب همچنین فهرستی از علائم هشدار برای طراحی بد ارائه می‌دهد. این کتاب یک همراه عالی برای Clean Code است زیرا دیدگاه متفاوتی ارائه می‌دهد.


📁 #Skills

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
اتاق برنامه نویسی </>
Photo
🎓 تفاوت بین تعریف Volume در Dockerfile و استفاده از 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 برای تعیین یک فرمان پیش‌فرض به کار می‌رود که کانتینر شما اجرا خواهد کرد، مگر اینکه در زمان اجرای کانتینر فرمان دیگری را مشخص کنید. به عبارت دیگر، 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