IT Guys👾 – Telegram
427 subscribers
120 photos
183 videos
27 files
284 links
نکاتی که تو مسیر یادگیری بدست آوردیم رو باهاتون به اشتراک میزاریم. اين كانال رو به عنوان سرگرمی نگاه كنيد.
شما هم اگر نکته ای داشتید ، چه بصورت متن ، عکس و یا صدا به نشانی ربات زیر با ما به اشتراک بگذارید ، با تشکر.

Bot ID : https://news.1rj.ru/str/bootrampbot🤖
Download Telegram
چگونه پوت های باز روی سرور لینوکسی خود را ببینیم؟

ابزار های زیادی برای این کار وجود دارد ، اما یکی از آن ها:
استفاده از ابزار netstat:
ابتدا باید مطمئن باشیم که پکیج مروبطه بر روی سرور ما نصب باشد :
apt install net-tools

و بعد از نصب کامند زیر را اجرا میکنیم :
sudo netstat -tuln

که هر آپشن در اینجا مشخص کننده ی یک ویژگی میباشد :
آپشن t : برای پروتکل‌های TCP
آپشن u : برای پروتکل های UDP
آپشن l : برای نمایش پورت‌هایی که در حالت "LISTEN" هستند (در حال گوش دادن)
آپشن n : برای نمایش آدرس‌ها به صورت عددی که دلبخواه است و میتوانید نزنید .
❤‍🔥4👍2
مفهوم HeartBeat در کلاستر ها !

در مباحث کلاسترینگ (خوشه‌بندی)، «heartbeat» به سیگنال‌هایی گفته می‌شود که بین گره‌ها (nodes) در کلاستر ارسال می‌شود تا وضعیت آنلاین یا آفلاین بودن هر گره را مشخص کند. این سیگنال‌ها به‌طور منظم و با فاصله‌های زمانی کوتاه بین گره‌ها رد و بدل می‌شوند. اگر یکی از گره‌ها به هر دلیلی پاسخ ندهد یا heartbeat خود را ارسال نکند، سیستم متوجه می‌شود که آن گره دچار مشکل شده و ممکن است عملیات failover یا جابه‌جایی وظایف آن گره به گره‌های دیگر را انجام دهد.

این مکانیزم در سیستم‌های حساس و با دسترس‌پذیری بالا (high availability) بسیار مهم است تا مطمئن شویم که در صورت خرابی یکی از گره‌ها، سیستم بدون وقفه به کار خود ادامه می‌دهد.

اگه بخوایم مثالی بزنیم :

فرض کنید در یک بانک بزرگ از سیستم کلاسترینگ استفاده می‌شود تا خدمات مالی بدون وقفه به مشتریان ارائه شود. این بانک دو سرور دارد که به‌طور موازی کار می‌کنند و اگر یکی از آنها دچار مشکل شود، دیگری بتواند بدون قطع خدمات به کار ادامه دهد. این دو سرور (که به آن‌ها گره یا node گفته می‌شود) برای این منظور به یکدیگر heartbeat می‌فرستند.

1. ارسال و دریافت heartbeat:
هر چند ثانیه یک بار، هر یک از گره‌ها سیگنالی به نام heartbeat برای دیگری ارسال می‌کند. این سیگنال شامل اطلاعاتی مانند زمان ارسال، وضعیت عملکرد و بار فعلی سیستم است. هدف از ارسال این سیگنال این است که هر گره متوجه شود دیگری فعال است و به درستی کار می‌کند.

2. شناسایی خرابی گره‌ها:
فرض کنید گره ۱ به‌دلیل بروز یک مشکل سخت‌افزاری یا نرم‌افزاری از کار می‌افتد و دیگر قادر به ارسال heartbeat نیست. در این حالت، گره ۲ که سیگنال heartbeat را دریافت نکرده است، متوجه می‌شود که گره ۱ از دسترس خارج شده است. این شناسایی خرابی معمولاً بر اساس مدت زمانی که سیگنال heartbeat قطع شده است انجام می‌شود. اگر چند سیگنال پشت سر هم دریافت نشود (برای مثال، پس از ۳ ثانیه)، گره ۲ نتیجه می‌گیرد که گره ۱ دچار مشکل شده است.

3. اجرای failover یا جابه‌جایی وظایف:
با تشخیص خرابی گره ۱، گره ۲ فوراً وارد عمل می‌شود و وظایف گره از کار افتاده را به عهده می‌گیرد. به این فرآیند «failover» گفته می‌شود. در این مرحله، گره ۲ از دستورات و اطلاعاتی که برای حالت پشتیبان آماده کرده بود، استفاده می‌کند تا بدون هیچ قطعی، سرویس‌ها و اطلاعات مورد نیاز کاربران را ارائه دهد.

4. بازگرداندن سیستم به حالت اصلی:
پس از تعمیر گره ۱ و بازگشت آن به حالت عادی، دو گره دوباره به تبادل heartbeat ادامه می‌دهند. بسته به نوع تنظیمات سیستم، ممکن است گره ۲ وظایف را به گره ۱ بازگرداند یا به‌عنوان پشتیبان باقی بماند تا در صورت خرابی مجدد، باز هم بتواند وظایف را به عهده بگیرد.
❤‍🔥4👍2
کارت گرافیک A10 برای سرورهای G11 مخصوص یادگیری و کار با ai
😍6❤‍🔥1👍1
چگونه تشخیص بدیم معماری سرور لینوکسی ما چی هست؟

برای تشخیص معماری سیستم‌عامل لینوکسی خود ، می‌تونیم از دستور زیر استفاده کنیم:
uname -m

حالا با توجه به خروجی که میده میتونه در یکی از دسته های زیر قرار بگیرد:

اگر خروجی x86_64 باشد، معماری سیستم شما 64 بیتی و Intel یا AMD است.
اگر خروجی aarch64 باشد، سیستم شما 64 بیتی ARM است.
اگر خروجی armv7l یا armv6l باشد، سیستم شما 32 بیتی ARM است.

یک روش دیگه برای بررسی این موضوع استفاده از دستور زیر است :

dpkg --print-architecture

خروجی هایی که این دستور میدهد :
اگر amd64 برای سیستم‌های 64 بیتی مبتنی بر Intel یا AMD
اگر arm64 برای سیستم‌های 64 بیتی ARM
اگر armhf برای سیستم‌های 32 بیتی ARM
👍7❤‍🔥2
در این ویدیو به تفاوت‌های بین is و == و همچنین str و repr در پایتون پرداخته می‌شود.

تفاوت is و ==: is به آدرس حافظه و == به مقادیر واقعی آبجکت‌ها توجه دارد.
استفاده از متد copy(): برای ایجاد کپی از لیست‌ها و تفاوت‌های بین آبجکت‌ها کاربرد دارد.
متدهای str و repr: هر دو برای تبدیل آبجکت‌ها به رشته استفاده می‌شوند، اما کاربردهای متفاوتی دارند.
اهمیت متد repr: برای دیباگ و نمایش دقیق‌تر اطلاعات آبجکت‌ها مفید است.
توصیه به پیاده‌سازی هر دو متد: پیاده‌سازی همزمان str و repr برای جلوگیری از رفتار غیرمنتظره مهم است.
بررسی آدرس‌های حافظه: با استفاده از id() می‌توان فهمید که آیا دو آبجکت یکسان هستند یا خیر.
اهمیت یادگیری is و ==: درک دقیق این تفاوت‌ها به بهبود کیفیت کد کمک می‌کند.

تفاوت بنیادی: is بررسی می‌کند که آیا دو متغیر به یک آدرس حافظه اشاره می‌کنند، در حالی که == بررسی می‌کند که آیا مقادیر آن‌ها برابر هستند. این نکته برای جلوگیری از خطاهای منطقی بسیار مهم است.
کاربرد copy(): استفاده از copy() برای ایجاد کپی‌های مستقل از لیست‌ها ضروری است، زیرا اشتباه در این موضوع می‌تواند منجر به تغییرات ناخواسته شود.
دیباگینگ آسان‌تر: استفاده از repr در دیباگینگ کمک می‌کند تا اطلاعات بیشتری درباره نوع و وضعیت آبجکت‌ها به دست آورید، که در شناسایی مشکلات کد بسیار مفید است.
پیاده‌سازی همزمان: همیشه توصیه می‌شود که هر دو متد str و repr را پیاده‌سازی کنید تا از رفتار غیرمنتظره جلوگیری کنید. عدم پیاده‌سازی یکی از آن‌ها می‌تواند به نتایج غیرمنتظره منجر شود.
اهمیت آدرس حافظه: بررسی آدرس حافظه با استفاده از id() می‌تواند به شما بگوید که آیا دو متغیر به یک آبجکت اشاره می‌کنند یا خیر، که در تصمیم‌گیری‌های منطقی بسیار حیاتی است.
تسلط بر مفاهیم: یادگیری و درک تفاوت‌های بین is، == و متدهای رشته‌ای در پایتون به توسعه‌دهندگان کمک می‌کند تا کدهای بهتری بنویسند و از بروز خطاهای احتمالی جلوگیری کنند.
https://youtu.be/FNJ2NZxIhfs?si=fVAlS-fk7JEcvNvq
❤‍🔥3👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Always ask yourself how far you can go rather than how long it will take. 🙌
❤‍🔥4👍2🔥1
Media is too big
VIEW IN TELEGRAM
Linux Night.
Music by Amirhossein
❤‍🔥4👍32
Overlay Network
4👍2❤‍🔥1
شبکه ی Overlay چیست؟

شبکه‌ی Overlay یا شبکه هم‌پوشانی یک نوع شبکه‌ی مجازی است که روی یک شبکه‌ی فیزیکی دیگر (مثل اینترنت یا شبکه‌ی داخلی) ساخته می‌شود. این شبکه کمک می‌کند تا دستگاه‌ها یا سرورهایی که از نظر فیزیکی از هم دور هستند، طوری به هم متصل شوند که انگار در یک شبکه محلی و نزدیک به هم هستند.

چرا Overlay Network؟
گاهی اوقات در محیط‌های بزرگ مثل مراکز داده یا زیرساخت‌های ابری (cloud)، نیاز داریم تا سرورها، کانتینرها، یا ماشین‌های مجازی مختلف، بدون توجه به موقعیت جغرافیایی‌شان، با هم در ارتباط باشند. شبکه‌های فیزیکی محدودیت‌هایی دارند و در تغییرات و توسعه ممکن است زمان‌بر و پرهزینه باشند. اینجا است که Overlay Network وارد کار می‌شود؛ یعنی یک شبکه مجازی که به شما اجازه می‌دهد دستگاه‌ها و سرورها را بدون تغییر در شبکه‌ی فیزیکی، به هم متصل کنید.

شبکه Overlay چگونه کار می‌کند؟
شبکه Overlay از روشی به نام تونل‌زنی (Tunneling) استفاده می‌کند. در این روش، بسته‌های داده (Packetها) طوری بسته‌بندی یا کپسوله (Encapsulate) می‌شوند که انگار از یک شبکه مجازی عبور می‌کنند، در حالی که در واقع از بستر شبکه‌ی فیزیکی منتقل می‌شوند. به عبارت ساده‌تر، داده‌ها در یک بسته‌ی مخصوص پیچیده شده و روی مسیرهای شبکه‌ی فیزیکی منتقل می‌شوند، اما به شبکه‌ی مجازی تعلق دارند.

فرض کنید دو سرور در دو دیتاسنتر مختلف دارید که می‌خواهید به هم متصل شوند. با ایجاد یک Overlay Network، می‌توانید این دو سرور را طوری به هم وصل کنید که انگار در یک شبکه محلی و یکجا هستند، حتی اگر کیلومترها از هم فاصله داشته باشند.

کاربردهای Overlay Network
شبکه Overlay بیشتر در موارد زیر کاربرد دارد:

زیرساخت‌های ابری (Cloud Infrastructure): در محیط‌هایی مثل Amazon Web Services (AWS) یا Google Cloud، Overlay Network امکان ارتباط بین منابع مختلف (مثل ماشین‌های مجازی یا کانتینرها) را فراهم می‌کند.

کانتینرها و Docker: در داکر (Docker) و ارکستراسیون کانتینرها (مانند Kubernetes)، Overlay Network کمک می‌کند تا کانتینرها که ممکن است روی سرورهای مختلف باشند، به‌سادگی با هم ارتباط برقرار کنند. این نوع شبکه در Docker Swarm برای ارتباط امن و سریع کانتینرها به کار می‌رود.

شبکه‌های چند لایه‌ای و ایمن: Overlay Network می‌تواند برای ایجاد شبکه‌های امن و چند لایه استفاده شود. مثلا در شبکه‌های سازمانی برای اتصال بین دفاتر مختلف از این روش استفاده می‌شود.

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

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

این شبکه‌ها در دنیای امروزی، مخصوصا در حوزه‌های ابری و کانتینرها، بسیار پرکاربرد هستند و ابزار مناسبی برای ساده‌سازی و مدیریت شبکه‌های پیچیده به حساب می‌آیند.
👍8❤‍🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Let your action talk - not your mouth!
🔥5❤‍🔥1👍1
این ویدیو درباره اکسپشن‌های سفارسی در پایتون است و نحوه مدیریت خطاها و نوشتن کدهای قابل توسعه را توضیح می‌دهد.

نکات مهم:

📚 معرفی اکسپشن‌های سفارسی
🔧 اهمیت مدیریت خطا در برنامه‌نویسی
✏️ ایجاد کلاس‌های اختصاصی برای خطاها
🚀 بهبود قابلیت توسعه کد
💡 پیشنهاد نوشتن توضیحات برای اکسپشن‌ها
🔍 بررسی کتابخانه‌های مفید
🎥 تماشای مثال‌های عملی

کلیات:

⚙️ مدیریت خطا: نوشتن اکسپشن‌های سفارسی به توسعه‌دهندگان کمک می‌کند تا خطاهای احتمالی را به وضوح شناسایی و مدیریت کنند.
📈 قابلیت توسعه: با استفاده از اکسپشن‌های سفارسی، کدها به مرور زمان قابل توسعه‌تر و نگهداری آسان‌تری خواهند داشت.
🛠️ استفاده از کلاس‌های اختصاصی: ایجاد کلاس‌های اختصاصی برای اکسپشن‌ها، خطاها را واضح‌تر و قابل درک‌تر می‌کند.
📖 توضیحات برای اکسپشن‌ها: نوشتن توضیحات مختصر برای اکسپشن‌ها می‌تواند به درک بهتر دلایل وقوع خطا کمک کند.
🔄 کتابخانه‌های مفید: استفاده از کتابخانه‌های معتبر که اکسپشن‌های مناسب را ارائه می‌دهند، به بهبود کیفیت کد کمک می‌کند.
🧩 مدیریت بهتر خطاها: با مدیریت مناسب خطاها، توسعه‌دهندگان می‌توانند از بروز مشکلات بزرگ در پروژه‌هایشان جلوگیری کنند.
🎓 آموزش پیوسته: یادگیری و به‌کارگیری تکنیک‌های جدید برای مدیریت خطاها، از جمله اکسپشن‌های سفارسی، به توسعه‌دهندگان کمک می‌کند تا مهارت‌های خود را ارتقاء دهند.
https://youtu.be/mTlLPMYjRFk?si=WByHVO8jmlE6_AzX
👍2❤‍🔥1
(پارت دوم)
داکر Swarm چیست؟

داکر Swarm یک ابزار برای مدیریت و هماهنگ‌سازی کانتینرهای Docker است که امکان اجرای برنامه‌ها در مقیاس بزرگ را روی چندین سرور فراهم می‌کند. در واقع، با استفاده از Docker Swarm می‌توانید یک کلاستر از سرورهای مختلف ایجاد کنید و کانتینرها را به‌طور خودکار روی این سرورها توزیع و مدیریت نمایید.

در Docker Swarm، هر سرور می‌تواند به‌عنوان یک گره (Node) در نظر گرفته شود:

گره مدیر (Manager Node): وظیفه مدیریت کل کلاستر و تصمیم‌گیری درباره‌ی توزیع کانتینرها روی گره‌ها را بر عهده دارد. به این گره Master هم میگن.
گره کارگر (Worker Node): وظیفه اصلی این گره‌ها اجرای کانتینرها است و از گره‌های مدیر دستور می‌گیرند.

مراحل و مثال عملی
۱. فعال‌سازی Docker Swarm: فرض کنید یک سرور با آدرس IP 192.168.1.10 دارید. برای شروع Docker Swarm، روی سرور اصلی به عنوان node مدیر یا Manager دستور زیر را اجرا کنید:
docker swarm init --advertise-addr 192.168.1.10

پس از اجرای این دستور، Docker Swarm راه‌اندازی می‌شود و پیامی حاوی دستوری نمایش می‌دهد که باید آن را روی سرورهای دیگر اجرا کنید تا به کلاستر بپیوندند.

۲. افزودن گره‌های کارگر یا همون Worker ها به کلاستر: با اجرای دستوری که گره مدیر ارائه کرده، می‌توانید گره‌های کارگر را به کلاستر متصل کنید. دستور برای گره‌های کارگر معمولاً به شکل زیر است:
docker swarm join --token <token> 192.168.1.10:2377

این دستور را روی سرورهای دیگر اجرا کنید و به کلاستر اضافه شوید.

نکته ی مهم در این بخش که از نکات مهم حوزه ی شبکه هست ، دقت در باز بودن پورت مورد نظر در فایروال است!

۳. ایجاد سرویس در Docker Swarm: حالا می‌توانید یک سرویس روی کلاستر خود اجرا کنید. به‌عنوان مثال، یک سرویس وب ساده از nginx ایجاد می‌کنیم:
docker service create --name my-nginx -p 80:80 --replicas 3 nginx

که در اینجا:

آپشن --name my-nginx نام سرویس را مشخص می‌کند.
آپشن -p 80:80 پورت ۸۰ را برای سرویس در دسترس قرار می‌دهد.
و آپشن --replicas 3 تعداد نسخه‌های (Replica) کانتینر را مشخص می‌کند؛ یعنی ۳ کانتینر nginx روی کلاستر توزیع می‌شود.

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

بنابر این Docker Swarm ابزاری عالی برای اجرای برنامه‌های توزیع‌شده است که به‌ویژه برای سیستم‌هایی با نیاز به دسترسی بالا و مدیریت کانتینرها مناسب است.
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
زیگموند فروید میگه "وسعت شخصیت هر فرد توسط بزرگی مشکلی که می‌تواند او را از حالت منطقی بیرون آورد تعریف می‌شود."

تاب آوری و حل مسئله و نحوه برخورد و واکنش افراد در برابر مشکلات و چالش هاشون عیار اونا رو تعیین میکنه!
👍6❤‍🔥1
Media is too big
VIEW IN TELEGRAM
این ویدیو رو کامل ببینید، این تکنولوژی روی سرور های G11 شرکت HPE ارائه میگردد.
🔥4👍2❤‍🔥11
آپشن --rm در داکر چیست؟

در Docker، گزینه --rm به این معنی است که وقتی اجرای کانتینر به پایان رسید، به‌طور خودکار کانتینر حذف شود. این گزینه مخصوصاً برای کانتینرهای موقت مفید است که تنها یک عملیات مشخص را انجام می‌دهند و دیگر نیازی به حفظ آن‌ها بعد از اتمام کار نیست.

برای مثال:
docker run --rm -v /mnt/nginx_config:/backup nginx:alpine cp -r /etc/nginx/* /backup

در این دستور ما محتوای دایرکتوری /etc/nginx را در مسیر /backup کپی میکنیم ، و از طرفی این دایرکتوری backup هم به مسیر /mnt/nginx_config مونت شده است ، پس ما یک کپی از مسیر /etc/nginx در سیستم هاستمون داریم.

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

پس این آپشن صرفا جهت کپی کردن فایل های دایرکتوری مربوطه ایجاد شده و بعد از انجام عملیات بطور خودکار حذف میشود
❤‍🔥3
(پارت سوم)
داکر volume چیست؟

در Docker، موضوع volume یا «حجم» یک فضای ذخیره‌سازی پایدار است که Docker برای ذخیره داده‌های کانتینرها ایجاد و مدیریت می‌کند. برخلاف فایل‌های عادی که درون سیستم فایل کانتینر ذخیره می‌شوند و با حذف کانتینر از بین می‌روند،
داده‌های ذخیره‌شده در volume باقی می‌مانند حتی اگر کانتینر حذف شود. این ویژگی volume را به گزینه‌ای عالی برای ذخیره‌ی داده‌هایی تبدیل می‌کند که لازم است بعد از حذف یا بروزرسانی کانتینرها همچنان در دسترس باشند.

چرا از Volume استفاده می‌کنیم؟

پایداری داده‌ها: داده‌هایی که در volume ذخیره می‌شوند با حذف یا بازسازی کانتینر پاک نمی‌شوند و برای کانتینرهای بعدی قابل استفاده هستند.

بهینه‌سازی عملکرد: Docker volume‌ها را بهینه‌سازی کرده است تا عملکرد بالایی در ذخیره‌سازی داده‌ها ارائه دهند.

استقلال از سیستم فایل میزبان: برخلاف bind mount، volume‌ها به مسیرهای فایل خاصی در سیستم میزبان وابسته نیستند و Docker آن‌ها را در دایرکتوری خاص خودش مدیریت می‌کند. این امر به امنیت و مدیریت آسان‌تر داده‌ها کمک می‌کند.

چگونه یک Volume ایجاد و استفاده کنیم؟

برای ایجاد و استفاده از volume، می‌توان از دستورات زیر استفاده کرد:

ایجاد یک Volume
برای ایجاد volume، از دستور docker volume create استفاده می‌کنیم:
docker volume create my_volume

این دستور یک volume به نام my_volume ایجاد می‌کند. با استفاده از این نام می‌توانیم volume را به هر کانتینری که نیاز داریم متصل کنیم.

متصل کردن Volume به کانتینر

برای استفاده از volume در یک کانتینر، از گزینه -v استفاده می‌کنیم:
docker run -itd --name my_container -v my_volume:/data ubuntu

در اینجا: my_volume به کانتینر متصل شده است.
مسیر /data در داخل کانتینر به این volume اختصاص یافته است. هر چیزی که داخل /data در کانتینر ذخیره شود، به volume منتقل می‌شود و پایدار خواهد بود.

ویژگی‌های Volume در Docker

کپی خودکار داده‌ها: اگر volume خالی باشد و به مسیری در کانتینر متصل شود که شامل فایل‌های پیش‌فرض است، Docker این فایل‌ها را به volume کپی می‌کند. این ویژگی برای ذخیره‌سازی تنظیمات پیش‌فرض مفید است.

مدیریت مرکزی: Docker به‌صورت مرکزی volume‌ها را مدیریت می‌کند و آن‌ها را در یک مسیر خاص در سیستم میزبان ذخیره می‌کند. این مسیر معمولاً /var/lib/docker/volumes است.

استفاده‌ی چندگانه: یک volume را می‌توان به چندین کانتینر به‌صورت همزمان متصل کرد، که امکان اشتراک‌گذاری داده‌ها بین کانتینرها را فراهم می‌سازد.
3❤‍🔥1
تفاوت بین Bind Mount و Volume در Docker
بی اطلاعی از این موضوع میتونه باگ بزرگی بشه براتون و در نهایت کانتینر در هنگام اجرا با Exit code 127 بیوفته.

در داکر ، bind mount و volume دو روش مجزا برای مدیریت داده‌ها هستند و هر یک عملکرد خاص خود را دارند:

1.حالت اول Bind Mount

در Bind Mount، یک پوشه دلخواه از سیستم میزبان به کانتینر متصل می‌شود. هر تغییری که در این پوشه میزبان ایجاد شود، مستقیماً بر روی کانتینر تاثیر می‌گذارد. در این حالت:

اگر پوشه‌ی میزبان خالی باشد، مسیر هدف در کانتینر نیز خالی خواهد بود. Docker هیچ فایل پیش‌فرضی را از کانتینر به این پوشه کپی نمی‌کند.

2.حالت دوم Volume
در این حالت Volume در Docker به‌صورت خودکار یک فضای ذخیره‌سازی مجزا ایجاد می‌کند که توسط خود Docker مدیریت می‌شود. وقتی یک مسیر از کانتینر را به volume متصل می‌کنید:

اگر volume خالی باشد، Docker به‌طور خودکار فایل‌های پیش‌فرض را از مسیر مورد نظر در کانتینر به volume کپی می‌کند.
بنابر این Volume‌ها به‌طور مستقل از سیستم فایل میزبان عمل می‌کنند و از این رو، برای ذخیره‌سازی داده‌ها و فایل‌های پیکربندی پایدار بسیار مناسب هستند.

در این حالت، حتی اگر volume خالی باشد، Docker به‌صورت خودکار فایل‌های تنظیمات پیش‌فرض را از کانتینر به volume کپی می‌کند و Nginx بدون مشکل اجرا می‌شود.

پس به عنوان نتیجه :
هنگام کار با Docker، شناخت تفاوت‌های bind mount و volume می‌تواند از بروز مشکلات زیادی جلوگیری کند. Bind mount به شما امکان می‌دهد تا از مسیرهای خاص سیستم میزبان استفاده کنید، اما اگر این مسیرها خالی باشند، ممکن است باعث بروز خطا در کانتینر شوند. در مقابل، volume یک فضای مستقل فراهم می‌کند که Docker به‌طور خودکار فایل‌های پیش‌فرض کانتینر را در آن قرار می‌دهد.
👍5❤‍🔥21