VM یا Docker؟

یہ کیسے سمجھیں کہ آپ کو ڈوکر کی ضرورت ہے VM کی نہیں؟ آپ کو یہ طے کرنے کی ضرورت ہے کہ آپ بالکل کس چیز کو الگ کرنا چاہتے ہیں۔ اگر آپ گارنٹی شدہ وسائل اور ورچوئل ہارڈویئر والے سسٹم کو الگ کرنا چاہتے ہیں، تو انتخاب VM پر آنا چاہیے۔ اگر آپ کو چلنے والی ایپلی کیشنز کو الگ الگ سسٹم کے عمل کے طور پر الگ کرنے کی ضرورت ہے، تو آپ کو Docker کی ضرورت ہوگی۔

تو Docker کنٹینرز اور VMs میں کیا فرق ہے؟

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

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

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

میں Docker کنٹینرز پر مبنی ایپلی کیشنز بنانے کا ایک سافٹ ویئر ہے۔ کنٹینرز اور ورچوئل مشینوں کے ایک جیسے فوائد ہیں، لیکن کام مختلف ہیں۔ کنٹینرز کم جگہ لیتے ہیں، کیونکہ VM کے مقابلے میں میزبان سسٹم کے مشترکہ وسائل کا زیادہ استعمال کریں، کیونکہ VM کے برعکس، OS کی سطح پر ورچوئلائزیشن فراہم کرتا ہے، ہارڈ ویئر نہیں۔ یہ نقطہ نظر کم میموری فوٹ پرنٹ، تیز تعیناتی، اور آسان اسکیلنگ فراہم کرتا ہے۔

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

کنٹینر - یہ کیسے کام کرتا ہے؟

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

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

جب کسی تصویر سے کنٹینر شروع کیا جاتا ہے، تو Docker پڑھنے/لکھنے کے فائل سسٹم کو نیچے کی کسی بھی پرت کے اوپر ماؤنٹ کرتا ہے۔ یہ وہ جگہ ہے جہاں ہم اپنے ڈوکر کنٹینر کو چلانے کے لئے تمام عمل چلائیں گے۔

جب ڈوکر پہلی بار ایک کنٹینر شروع کرتا ہے، ابتدائی پڑھنے/لکھنے کی پرت خالی ہوتی ہے۔ جب تبدیلیاں آتی ہیں، تو وہ اس پرت پر لگائی جاتی ہیں۔ مثال کے طور پر، اگر آپ کسی فائل میں ترمیم کرنا چاہتے ہیں، تو اس فائل کو صرف پڑھنے والی پرت سے پڑھنے والی پرت میں کاپی کیا جائے گا۔
فائل کا صرف پڑھنے والا ورژن اب بھی موجود رہے گا، لیکن اب کاپی کے نیچے چھپا ہوا ہے۔ حجم کا استعمال ڈیٹا کو ذخیرہ کرنے کے لیے کیا جاتا ہے، قطع نظر اس کے کہ کنٹینر کا لائف سائیکل کچھ بھی ہو۔ جب ایک کنٹینر بنایا جاتا ہے تو حجم شروع کیے جاتے ہیں۔

تصویر کنٹینر کے ساتھ کیسے منسلک ہے؟

تصویر - ہر کنٹینر کے لئے اہم عنصر. یہ تصویر پروجیکٹ میں شامل کردہ ڈاکر فائل سے بنائی گئی ہے اور یہ فائل سسٹمز (پرتوں) کا ایک سیٹ ہے جو ایک دوسرے کے اوپر پرتیں ہیں اور ایک ساتھ گروپ کی گئی ہیں، جو صرف پڑھنے کے لیے دستیاب ہیں۔ تہوں کی زیادہ سے زیادہ تعداد 127 ہے۔

ہر تصویر کے مرکز میں ایک بنیادی تصویر ہوتی ہے، جس کی وضاحت FROM کمانڈ کے ذریعے کی جاتی ہے - Dockerfile امیج تیار کرتے وقت انٹری پوائنٹ۔ ہر پرت صرف پڑھنے والی پرت ہے اور اس کی نمائندگی ایک واحد کمانڈ کے ذریعہ کی جاتی ہے جو فائل سسٹم میں ترمیم کرتی ہے، جو ایک Dockerfile میں لکھی گئی ہے۔
ان تہوں کو ایک تصویر میں جوڑنے کے لیے، ڈوکر ایڈوانسڈ ملٹی لیئرڈ یونین فائل سسٹم کا استعمال کرتا ہے (AuFS یونین ایف ایس کے اوپر بنایا گیا ہے)، جس سے مختلف فائل لیئرز سے مختلف فائلز اور ڈائرکٹریز کو شفاف طریقے سے اوورلیپ کرنے کی اجازت ملتی ہے، جس سے منسلک فائل سسٹم بنتا ہے۔

پرتوں میں میٹا ڈیٹا ہوتا ہے جو آپ کو رن ٹائم اور تعمیر کے وقت ہر پرت کے بارے میں متعلقہ معلومات کو ذخیرہ کرنے کی اجازت دیتا ہے۔ ہر پرت میں اگلی پرت کا لنک ہوتا ہے، اگر اس پرت کا کوئی لنک نہیں ہے، تو یہ تصویر کی سب سے اوپر والی پرت ہے۔

ڈاکر فائل میں کمانڈز شامل ہوسکتے ہیں جیسے:

  • FROM - تصویر کی تشکیل میں انٹری پوائنٹ؛
  • مینٹینر - تصویر کے مالک کا نام؛
  • RUN - تصویر اسمبلی کے دوران کمانڈ پر عمل درآمد؛
  • ADD - میزبان فائل کو ایک نئی تصویر میں کاپی کرنا، اگر آپ URL فائل کی وضاحت کرتے ہیں، تو Docker اسے مخصوص ڈائریکٹری میں ڈاؤن لوڈ کرے گا۔
  • ENV - ماحولیاتی متغیرات؛
  • CMD - تصویر کی بنیاد پر ایک نئے کنٹینر کی تخلیق شروع کرتا ہے؛
  • ENTRYPOINT - کنٹینر شروع ہونے پر کمانڈ پر عمل درآمد ہوتا ہے۔
  • WORKDIR CMD کمانڈ کو چلانے کے لیے ورکنگ ڈائرکٹری ہے۔
  • USER - تصویر سے بنائے گئے کنٹینر کے لیے UID سیٹ کرتا ہے۔
  • حجم - میزبان ڈائریکٹری کو کنٹینر پر ماؤنٹ کرتا ہے۔
  • EXPOSE بندرگاہوں کا ایک سیٹ ہے جسے کنٹینر میں سنا جاتا ہے۔

یونین ایف ایس کیسے کام کرتا ہے؟

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

یکساں راستوں والی ڈائریکٹریز کے مشمولات نتیجے میں آنے والے فائل سسٹم کی ایک مشترکہ ڈائریکٹری (اسی نام کی جگہ میں) ایک ساتھ دکھائے جائیں گے۔

یونین ایف ایس درج ذیل اصولوں کی بنیاد پر تہوں کو یکجا کرتا ہے:

  • پرتوں میں سے ایک اوپری سطح کی پرت بن جاتی ہے، دوسری اور اس کے بعد کی پرتیں نچلی سطح کی پرتیں بن جاتی ہیں۔
  • پرت اشیاء صارف کے لیے "اوپر سے نیچے تک" قابل رسائی ہیں، یعنی اگر درخواست کردہ آبجیکٹ "اوپری" پرت میں ہے، تو اسے واپس کر دیا جاتا ہے، قطع نظر اس کے کہ "نچلی" پرت میں اسی نام کے ساتھ کسی چیز کی موجودگی؛ دوسری صورت میں، "نیچے" پرت آبجیکٹ واپس آ جاتا ہے؛ اگر درخواست کی گئی آبجیکٹ نہ تو وہاں ہے اور نہ ہی وہاں، غلطی "ایسی کوئی فائل یا ڈائرکٹری نہیں" لوٹائی جاتی ہے۔
  • ورکنگ لیئر "سب سے اوپر" ہے، یعنی ڈیٹا کو تبدیل کرنے کے لیے صارف کے تمام اقدامات نچلے درجے کی پرتوں کے مواد کو متاثر کیے بغیر، صرف اوپر کی سطح پر ہی جھلکتے ہیں۔

ڈوکر ایپلی کیشن کے کام میں کنٹینرز کے استعمال کے لیے سب سے عام ٹیکنالوجی ہے۔ یہ اس علاقے میں معیاری بن گیا ہے، جو لینکس کرنل کے ذریعہ فراہم کردہ cgroups اور نام کی جگہوں پر تعمیر کرتا ہے۔

Docker ہمیں تمام کنٹینرز کے درمیان OS کرنل کا اشتراک کرکے، علیحدہ OS پراسیس کے طور پر چلتے ہوئے ایپلیکیشنز کو تیزی سے تعینات کرنے اور فائل سسٹم کا بہترین استعمال کرنے کی اجازت دیتا ہے۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں