شروع سے ڈاکر امیج بنانا

Creating Docker Image From Scratch



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

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







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



ایک ڈاکر تصویر کی اناٹومی۔

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



درخواستیں سافٹ وئیر کی تہوں سے بنائی گئی ہیں۔ ایک ورڈپریس کنٹینر امیج httpd کنٹینر امیج کا استعمال کرتے ہوئے بنائی گئی ہے جو کہ اوبنٹو امیج کے اوپر بنائی گئی ہے۔ جس تصویر پر ایک نئی تصویر بنائی گئی ہے اسے ڈوکر ٹرمینالوجی میں PARENT IMAGE کہا جاتا ہے۔ ڈاکر فائل میں (ہم تھوڑی دیر بعد ڈاکر فائل کا کیا مطلب لیتے ہیں) ، اس پیرنٹ امیج کا ذکر فائل کے اوپری حصے پر کیا گیا ہے جیسا کہ ذیل میں دکھایا گیا ہے۔





اوبنٹو سے: 18.04۔
## باقی ڈاکر فائل۔

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

نئی ڈاکر امیج کھینچنے کی کوشش کرتے وقت آپ نے یہ محسوس کیا ہوگا۔



شروع سے ڈاکر امیج بنانا

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

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

شروع سے
## باقی ڈی کوکر فائل۔

ہم پہلے ایک سادہ ہیلو ورلڈ ایپلی کیشن بنائیں گے اور پھر اندازہ لگائیں گے کہ باقی ڈوکر فائل کیا ہو گی۔ میزبان نظام اوبنٹو: 18.04 LTS ہے اور ہم تجربے کے لیے ڈوکر ورژن 17.12.1-ce استعمال کر رہے ہیں۔

ایک جامد بائنری بنانا۔

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

لیکن زیادہ تر اعلیٰ سطحی ایپلی کیشنز کا انحصار بہت سی سسٹم لائبریریوں پر ہوتا ہے (جیسے۔ glibc ، musl ، klibc ، وغیرہ۔ ) اور بہت سارے رن ٹائم انحصار جیسے ازگر یا نوڈ ڈاٹ جے ایس یا جاوا رن ٹائم۔ ایپلی کیشن بائنری میں اس کے اندر تمام لائبریریاں دستیاب نہیں ہیں ، لیکن جب اس پر عملدرآمد شروع ہوتا ہے تو وہ ان لائبریریوں کو میزبان آپریٹنگ سسٹم سے کال کرتا ہے۔

چونکہ ہم شروع سے ایک تصویر بنانے کی کوشش کر رہے ہیں ، اس لیے ہمیں یہ نیکیاں نہیں ملیں گی۔ لہذا ہماری درخواست کو ایک مستحکم فائل یا اسٹینڈ اسٹون قابل عمل ہونے کی ضرورت ہے۔

آئیے MyDockerImage کے نام سے ایک فولڈر بنا کر شروع کریں اور اس کے اندر ایک فائل hello.cc بنائیں۔

$mkdirMyDockerImage
$سی ڈیMyDockerImage
$چھوناhello.cc

اپنے پسندیدہ ٹیکسٹ ایڈیٹر کا استعمال کرتے ہوئے hello.cc کھولیں اور اس کے اندر درج ذیل لائنیں شامل کریں۔

#شامل کریں
نام کی جگہ کا استعمال کرتے ہوئے std؛
intمرکزی(){
لاگت<< 'ہیلو! یہ پیغام ایک کنٹینر سے آرہا ہے۔n'؛
واپسی ؛

}

یہ ایک سادہ سی ++ پروگرام ہے جو ہیلو پرنٹ کرتا ہے! یہ پیغام …

پہلے زیر بحث وجوہات کی بناء پر ، ہم اسے جامد پرچم کا استعمال کرتے ہوئے مرتب کریں گے۔ استعمال ہونے والا کمپلر ہے۔ g ++ (Ubuntu 7.3.0-16ubuntu3) 7.3.0۔

پروگرام کو مرتب کرنے کے لیے ، اسی ڈائریکٹری میں درج ذیل کمانڈ چلائیں:

$ جی++۔ -اے ہیلو-جامدہیلو.ڈی سی

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

$./ہیلو

اب ہم اس سادہ پروگرام کو کنٹینرائز کرنے کے لیے تیار ہیں۔

ڈاکر فائل۔

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

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

$چھوناڈاکر فائل۔

اسے اپنے پسندیدہ ٹیکسٹ ایڈیٹر سے کھولیں ، اور اسے درج ذیل لائنیں لکھیں:

شروع سے
ہیلو شامل کریں۔/
سی ایم ڈی['/ہیلو']

سکریچ والدین کی تصویر نہیں ہے بلکہ یہ ڈاکر کی طرف اشارہ کرتا ہے کہ تصویر کسی دوسری تصویر کے اوپر نہیں بنائی گئی ہے۔ یہ شروع سے بنایا گیا ہے۔ ADD کمانڈ موجودہ ڈائریکٹری سے جامد بائنری | _+_ | لے کر اسے امیج فائل کی روٹ ڈائریکٹری میں شامل کرے گی۔ جب ہم آخر میں اس شبیہہ پر مبنی کنٹینر چلائیں گے تو ، ہیلو ایگزیکیوٹیبل جڑ ڈائریکٹری کے اندر ہی نظر آئے گا | _+_ |

آخر میں ، سی ایم ڈی لائن میں ایک تار ہے۔ /ہیلو جب بھی اس تصویر سے کنٹینر بنایا جائے گا ، اس سٹرنگ کو شیل کمانڈ کے طور پر چلایا جائے گا ، اس طرح بائنری فائل جو ہم نے اپنے کنٹینر میں شامل کی اور اس پیغام کو پرنٹ کیا جو ہم نے اپنی ایپ میں لکھا تھا۔

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

$ڈوکر بلڈ-ٹیگہیلو .

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

ڈوکر کنٹینر چل رہا ہے۔

یہ چیک کرنے کے لیے کہ جو تصویر ہم نے ابھی بنائی ہے وہ تصاویر کی فہرست میں دکھائی دیتی ہے ، چلائیں:

$ڈاکر کی تصاویر

غور کریں کہ ہیلو امیج دوسری تصاویر کے مقابلے میں کتنی چھوٹی ہے۔ کسی بھی صورت میں ، یہ ایک کنٹینر کے طور پر چلانے کے لیے تیار ہے ،

$ڈاکر رن ہیلو

یہی ہے! آپ نے شروع سے اپنا پہلا مرصع کنٹینر بنایا۔

دوسرے اختیارات۔

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

استعمال کرتے ہوئے انہیں اپنے والدین کی تصویر کے طور پر استعمال کریں الپائن سے: تازہ ترین۔ اس کے نتیجے میں چھوٹی تصاویر بھی ہوں گی۔ چونکہ بیس تصاویر سائز میں صرف 2-5 MB ہیں۔ ہمیں بتائیں کہ اگر کوئی ڈوکر سے متعلقہ موضوع ہے جو آپ چاہتے ہیں کہ ہم اگلے کا احاطہ کریں۔ آپ ہم تک پہنچ سکتے ہیں۔ ٹویٹر ، فیس بک یا ای میل کے ذریعے ہمیں سبسکرائب کریں۔