ڈاکر کمپوز - میموری کی حدیں۔

Docker Compose Memory Limits



ڈوکر کمپوز ایک طاقتور افادیت ہے۔ یہ وقت بچاتا ہے اور آپ کی ڈاکرائزڈ ایپلیکیشن کو تعینات کرتے وقت غلطیوں کو کم کرتا ہے۔ عام طور پر ، ایک ہی کنٹینر کے اندر سے فرنٹ اینڈ ، ڈیٹا بیس سرور وغیرہ سمیت پورے اسٹیک کو چلانا اچھا خیال نہیں ہے۔

ہم ایک ایپلیکیشن کے مختلف کام کے بوجھ کو سنبھالنے کے لیے مختلف کنٹینرز کو گھما دیتے ہیں اور ہم اسے آسانی سے کرنے کے لیے ڈوکر کمپوز استعمال کرتے ہیں۔ ہر منطقی طور پر مختلف کام کا بوجھ مختلف کے طور پر درج ہے۔ سروس . مثال کے طور پر ، آپ کا فرنٹ اینڈ HTTP سرور ایک فرنٹ اینڈ سروس کے طور پر درج کیا جائے گا جو اپاچی یا Nginx امیج کو کنٹینر کے طور پر چلائے گا۔







تمام خدمات ، ان کی نیٹ ورکنگ کی ضروریات ، اسٹوریج کی ضروریات وغیرہ کو ڈوکر- compose.yml فائل میں بیان کیا جا سکتا ہے۔ ہم یہاں میموری کے استعمال کی وضاحت پر توجہ مرکوز کریں گے۔



آپ کو اپنے ہتھیاروں میں درج ذیل ٹولز کی ضرورت ہوگی تاکہ ساتھ چل سکیں۔



  1. ڈوکر کی بنیادی تفہیم۔
  2. ڈوکر ونڈوز یا میک کے لیے۔ یا اگر آپ لینکس چلا رہے ہیں ، لینکس کے لیے ڈاکر سی ای۔
  3. ڈاکر کمپوز بائنار۔ y (ونڈوز اور میک صارفین پہلے ہی انسٹال کر لیں گے)

ہم اپنی docker-compose.yml فائلوں کے لیے ورژن 2.4 پر قائم رہیں گے کیونکہ یہ ورژن 17.12 اور اس سے زیادہ ڈوکر انجن اور اس سے زیادہ ورژن کو سپورٹ کرتا ہے۔ ہم ورژن 3 کے ساتھ جا سکتے تھے جو کہ حالیہ ہے لیکن یہ پرانی میموری کی حد بندی کے نحو کی حمایت نہیں کرتا۔ اگر آپ نیا نحو استعمال کرنے کی کوشش کرتے ہیں تو ، اس کے بجائے ڈوکر کو سوار موڈ میں استعمال کرنے پر اصرار کرتا ہے۔ لہذا باقاعدہ ڈوکر صارفین کے لیے معاملہ کو آسان رکھنے کے لیے میں ورژن 2.4 پر قائم رہوں گا۔





زیادہ تر کوڈ ورژن 3 کے لیے بالکل اسی طرح کام کرے گا ، اور جہاں فرق ہوگا ، میں ڈاکر سوارم صارفین کے لیے نئے نحو کا ذکر کروں گا۔

نمونہ کی درخواست۔

آئیے پہلے سی ایل آئی اور پھر ایک سادہ ڈوکر کمپوز ڈاٹ ایم ایل کا استعمال کرتے ہوئے پورٹ 80 پر ایک سادہ اینجینکس سروس چلانے کی کوشش کریں۔ اگلے حصے میں ، ہم اس کی یادداشت کی حدود اور استعمال کو تلاش کریں گے اور اپنی ڈوکر- compose.yml میں ترمیم کریں گے تاکہ دیکھیں کہ کسٹم حدود کس طرح عائد کی جاتی ہیں۔



آئیے ڈوکر- CLI کا استعمال کرتے ہوئے ایک سادہ nginx سرور شروع کریں:

$ docker run -d --name my -nginx -p80۔:80۔nginx: تازہ ترین۔

آپ nginx سرور ملاحظہ کرکے کام کرتے ہوئے دیکھ سکتے ہیں۔ http: // localhost یا lcoalhost کو تبدیل کریں۔

اپنے ڈاکر میزبان کے آئی پی ایڈریس کے ساتھ۔ یہ کنٹینر ممکنہ طور پر آپ کے ڈوکر میزبان پر پوری دستیاب میموری کو استعمال کرسکتا ہے (ہمارے معاملے میں یہ تقریبا 2 جی بی ہے)۔ میموری کے استعمال کو چیک کرنے کے لیے ، دوسری چیزوں کے علاوہ ، ہم کمانڈ استعمال کر سکتے ہیں:

$ docker کے اعدادوشمار my-nginx۔

کنٹینر ID کا نام CPU٪ MEM استعمال/محدود MEM٪ نیٹ I/O بلاک I/O PIDS
6eb0091c0cf2 my-nginx0.00۔٪ 2.133MiB / 1.934GiB0.11۔٪ 3.14kB / 2.13kB 0B / 0B۔

MEM USAGE/LIMIT کل 1.934GiB میں سے 2.133MiB پر ہے۔ آئیے اس کنٹینر کو ہٹا دیں اور ڈاکر کمپوز سکرپٹ لکھنا شروع کریں۔

$ docker stop my-nginx
$ docker rm my-nginx

مساوی ym فائل۔

اگر ہم ان اقدامات پر عمل کریں تو اوپر جیسا عین کنٹینر بنایا جا سکتا ہے۔

$ mkdir my-compose
$ cd my-compose
$ vim docker-compose.yml

ہم ایک نئی خالی ڈائرکٹری بناتے ہیں اور اس میں فائل docker-compose.yml بناتے ہیں۔ جب ہم اس ڈائرکٹری سے ڈاکر کمپوز اپ چلائیں گے ، تو یہ اس مخصوص فائل کی تلاش کرے گی (باقی سب کو نظر انداز کرتے ہوئے) اور اسی کے مطابق ہماری تعیناتی بنائے گی۔ اس .yml فائل کے اندر درج ذیل مواد شامل کریں۔

ورژن:'3'
خدمات:
my-nginx:
تصویر: nginx: تازہ ترین۔
بندرگاہیں:
-'80: 80 '

$ docker -compose up -d

-d پرچم شامل کیا گیا ہے تاکہ نئے بنائے گئے کنٹینر پس منظر میں چلیں۔ بصورت دیگر ، ٹرمینل خود کو کنٹینرز سے جوڑ دے گا اور اس سے رپورٹیں چھاپنا شروع کردے گا۔ اب ہم نئے بنائے گئے کنٹینرز کے اعدادوشمار دیکھ سکتے ہیں:

$ docker کے اعدادوشمار -تمام۔

کنٹینر ID کا نام CPU٪ MEM استعمال/محدود MEM٪ نیٹ I/O بلاک I/O PIDS
5f8a1e2c08ac my-compose_my-nginx_10.00۔٪ 2.25MiB/1.934GiB0.11۔٪ 1.65kB/0B 7.35MB/0B۔

آپ دیکھیں گے کہ ایک جیسا کنٹینر پہلے کی طرح میموری کی حدوں اور یہاں تک کہ استعمال کے ساتھ بنایا گیا تھا۔ اسی ڈائریکٹری سے جس میں yml فائل ہے۔ نئے بنائے گئے کنٹینر کو حذف کرنے کے لیے درج ذیل کمانڈ کو چلائیں ، ساتھ ہی کسٹمر برج نیٹ ورک جو بنایا گیا تھا۔

$docker-compose down

یہ ڈوکر کو صاف ستھری حالت میں لوٹائے گا جو کہ کسی بھی جلد کی تخلیق کی گئی تھی (ہم نے کوئی تخلیق نہیں کی ہے لہذا یہ کوئی تشویش کی بات نہیں ہے۔)

میموری کی حد اور میموری ریزرویشن

میموری کی حدیں اور میموری ریزرویشن دو مختلف پہلو ہیں تاکہ آپ کی ایپلی کیشنز اور ڈوکر میزبان آپ کے اوپر چل رہے ہوں۔

وسیع پیمانے پر ، میموری کی حد میموری کی مقدار پر ایک بالائی حد لگاتی ہے جو ممکنہ طور پر ڈوکر کنٹینر استعمال کرسکتا ہے۔ پہلے سے طے شدہ طور پر ایک ڈوکر کنٹینر ، کسی دوسرے سسٹم کے عمل کی طرح ، ڈوکر میزبان کی پوری دستیاب میموری استعمال کرسکتا ہے۔ یہ میموری سے باہر ہونے کا سبب بن سکتا ہے اور آپ کا سسٹم بہت خراب ہو سکتا ہے۔ یہاں تک کہ اگر یہ کبھی نہیں آتا ہے ، یہ پھر بھی قیمتی وسائل سے دوسرے عمل (دیگر کنٹینرز سمیت) کو بھوکا رکھ سکتا ہے ، جو کارکردگی کو دوبارہ نقصان پہنچا سکتا ہے۔ یادداشت کی حدیں اس بات کو یقینی بناتی ہیں کہ وسائل کے بھوکے کنٹینرز ایک خاص حد سے تجاوز نہ کریں۔ یہ ایک خراب تحریری درخواست کے دھماکے کے دائرے کو کچھ کنٹینرز تک محدود کرتا ہے ، پورے میزبان کو نہیں۔

دوسری طرف ، میموری ریزرویشن کم سخت ہے۔ جب سسٹم میموری پر کم چل رہا ہے اور اس میں سے کچھ کو دوبارہ حاصل کرنے کی کوشش کرتا ہے۔ یہ کنٹینر کی میموری کی کھپت کو ریزرویشن کی حد سے نیچے لانے کی کوشش کرتا ہے۔ اگر میموری کی کثرت ہے ، تاہم ، ایپلی کیشن ہارڈ سیٹ میموری کی حد تک بڑھا سکتی ہے۔

مختصر کرنے کے لئے:

  1. یادداشت کی حد: کنٹینر کو دستیاب میموری کی مقدار کی سخت اوپری حد۔
  2. میموری ریزرویشن: اسے میموری کی کم سے کم مقدار کے طور پر سیٹ کیا جانا چاہیے جو کسی ایپلیکیشن کو مناسب طریقے سے چلانے کی ضرورت ہے۔ لہذا جب یہ نظام میموری کو دوبارہ حاصل کرنے کی کوشش کر رہا ہو تو یہ کریش یا غلط سلوک نہیں کرتا ہے۔

اگر میموری ریزرویشن میموری کی حد سے زیادہ ہے تو میموری کی حد کو فوقیت حاصل ہے۔

میموری کی حد اور ریزرویشن کی وضاحت

ورژن 2۔

آئیے واپس docker-compose.yml پر جائیں جو ہم نے پہلے لکھا تھا اور اس میں میموری کی حد شامل کی۔ شرائط سیکشن میں زیر بحث وجوہات کی بنا پر ورژن کو 2.4 میں تبدیل کریں۔

ورژن:'2.4'
خدمات:
my-nginx:
تصویر: nginx: تازہ ترین۔
بندرگاہیں:
-'80: 80 '
mem_limit: 300m

آخری لائن my-nginx سروس کی حد 300MiB مقرر کرتی ہے۔ آپ k کو KiB کے لیے ، اور G کو GiB اور b کو صرف بائٹس کے لیے استعمال کر سکتے ہیں۔ تاہم ، اس سے پہلے کا نمبر ایک عدد ہونا چاہیے۔ آپ 2.4 میٹر جیسی اقدار استعمال نہیں کر سکتے ، آپ کو اس کے بجائے 2400 ک استعمال کرنا پڑے گا۔ اب اگر آپ چلاتے ہیں:

$ docker stat --all

کنٹینر ID کا نام CPU٪ MEM استعمال/محدود MEM٪ نیٹ I/O بلاک I/O PIDS
44114d785d0a my-compose_my-nginx_10.00۔٪ 2.141MiB/300MiB0.71۔٪ 1.16kB/0B 0B/0B

آپ دیکھیں گے کہ میموری کی حد 300 ایم آئی بی مقرر ہے۔ میموری ریزرویشن سیٹ کرنا اتنا ہی آسان ہے ، صرف ایک لائن mem_reservation: xxx آخر میں شامل کریں۔

ورژن:'2.4'
خدمات:
my-nginx:
تصویر: nginx: تازہ ترین۔
بندرگاہیں:
-'80: 80 '
mem_limit: 300m
mem_reservation: 100m

ورژن 3 (اختیاری)

تین ورژن استعمال کرنے کے لیے آپ کو ڈوکر کو سوار موڈ میں چلانے کی ضرورت ہے۔ ونڈوز اور میک کے لیے آپ اسے ڈوکر سیٹنگز مینو کے ذریعے فعال کر سکتے ہیں۔ لینکس صارفین کو ڈوکر سوارم init چلانے کی ضرورت ہوگی۔ اس پر مزید معلومات مل سکتی ہیں۔ یہاں . اگرچہ یہ ایک ضروری قدم نہیں ہے ، اور اگر آپ نے اسے فعال نہیں کیا ہے تو یہ بھی ٹھیک ہے۔ یہ سیکشن لوگوں کے لیے ہے۔ پہلے سے سوار موڈ میں چل رہا ہے اور نئے ورژن کو استعمال کر سکتا ہے۔

ورژن:'3'
خدمات:
my-nginx:
تصویر: nginx: تازہ ترین۔
بندرگاہیں:
-'80: 80 '
تعینات کرنا:
حوالہ جات:
حدود:
میموری: 300 میٹر
تحفظات:
میموری: 100 میٹر

ہم اس سب کی وضاحت وسائل کے اختیارات کے تحت کرتے ہیں۔ حدود اور ریزرویشن ان کی اپنی بنیادی چابیاں بن جاتی ہیں اور میموری یہاں بہت سے وسائل میں سے ایک ہے جو یہاں زیر انتظام ہے۔ CPU ایک اور اہم پیرامیٹر ہے۔

مزید معلومات

آپ سرکاری دستاویزات سے ڈاکر کمپوز کے بارے میں مزید جان سکتے ہیں۔ یہاں منسلک . ایک بار جب آپ کو ایک کمپوز فائل لکھنے کا خلاصہ مل جائے تو دستاویزات آپ کو مختلف پیرامیٹرز کی تفصیلات میں مدد دے سکتی ہیں۔

آپ کو سب کچھ جاننے کی ضرورت نہیں ہے ، صرف یہ تلاش کریں کہ آپ کی درخواست کی کیا ضرورت ہے اور حوالہ آپ کو اس پر عمل درآمد کرنے میں رہنمائی کرے گا۔