چھوٹے ڈاکر کی تصاویر جو خود پر یقین رکھتی ہیں*

[امریکی بچوں کی پریوں کی کہانی "The Little Engine That Could" کا حوالہ - تقریباً۔ لین]*

چھوٹے ڈاکر کی تصاویر جو خود پر یقین رکھتی ہیں*

اپنی ضروریات کے لیے خود بخود چھوٹی ڈوکر امیجز کیسے بنائیں

غیر معمولی جنون

پچھلے کچھ مہینوں سے، میں اس بات کا شکار ہوں کہ ڈوکر امیج کتنی چھوٹی ہو سکتی ہے اور پھر بھی ایپلی کیشن چل رہی ہے؟

میں سمجھتا ہوں، خیال عجیب ہے۔

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

سائز کیوں اہمیت رکھتا ہے۔

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

ایک اور چھوٹا فائدہ ہے - تصاویر تھوڑی تیزی سے ڈاؤن لوڈ کی جاتی ہیں، لیکن، میری رائے میں، یہ اتنا اہم نہیں ہے۔

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

بے ترتیب تصاویر

پروجیکٹ ڈسٹرولیس بنیادی "ڈسٹرول لیس" امیجز کا انتخاب پیش کرتا ہے، ان میں پیکیج مینیجر، شیلز اور دیگر یوٹیلیٹیز شامل نہیں ہیں جنہیں آپ کمانڈ لائن پر دیکھنے کے عادی ہیں۔ نتیجے کے طور پر، جیسے پیکیج مینیجرز کا استعمال کریں pip и apt کام نہیں کرے گا:

FROM gcr.io/distroless/python3
RUN  pip3 install numpy

پائتھون 3 ڈسٹرول لیس امیج کا استعمال کرتے ہوئے ڈاکر فائل

Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM gcr.io/distroless/python3
 ---> 556d570d5c53
Step 2/2 : RUN  pip3 install numpy
 ---> Running in dbfe5623f125
/bin/sh: 1: pip3: not found

Pip تصویر میں نہیں ہے۔

عام طور پر یہ مسئلہ ملٹی اسٹیج بلڈ کے ذریعہ حل کیا جاتا ہے:

FROM python:3 as builder
RUN  pip3 install numpy

FROM gcr.io/distroless/python3
COPY --from=builder /usr/local/lib/python3.7/site-packages /usr/local/lib/python3.5/

ملٹی اسٹیج اسمبلی

نتیجہ 130MB سائز کی تصویر ہے۔ اتنا بھی برا نہیں! موازنہ کے لیے: ڈیفالٹ ازگر کی تصویر کا وزن 929MB ہے، اور "پتلی" والی (3,7-slim) - 179MB، الپائن امیج (3,7-alpine) 98,6MB ہے، جبکہ مثال میں استعمال ہونے والی بنیادی ڈسٹرول لیس تصویر 50,9MB ہے۔

یہ بتانا مناسب ہے کہ پچھلی مثال میں ہم ایک پوری ڈائریکٹری کاپی کر رہے ہیں۔ /usr/local/lib/python3.7/site-packages، جس میں انحصار شامل ہوسکتا ہے جس کی ہمیں ضرورت نہیں ہے۔ اگرچہ یہ واضح ہے کہ تمام موجودہ Python بیس امیجز کے سائز کا فرق مختلف ہوتا ہے۔

لکھنے کے وقت، گوگل ڈسٹرولیس بہت سی تصاویر کو سپورٹ نہیں کرتا ہے: جاوا اور ازگر ابھی بھی تجرباتی مرحلے پر ہیں، اور ازگر صرف 2,7 اور 3,5 کے لیے موجود ہے۔

چھوٹی تصاویر

چھوٹی تصاویر بنانے کے اپنے جنون پر واپس جائیں۔

عام طور پر، میں یہ دیکھنا چاہتا تھا کہ بے ترتیب تصاویر کیسے بنتی ہیں۔ ڈسٹرول لیس پروجیکٹ گوگل کا بلڈ ٹول استعمال کرتا ہے۔ bazel. تاہم، Bazel کو انسٹال کرنے اور آپ کی اپنی تصاویر لکھنے میں کافی کام ہوا (اور سچ پوچھیں تو پہیے کو دوبارہ ایجاد کرنا تفریحی اور تعلیمی ہے)۔ میں چھوٹی امیجز کی تخلیق کو آسان بنانا چاہتا تھا: تصویر بنانے کا عمل انتہائی آسان ہونا چاہیے، banal. تاکہ آپ کے لیے کوئی کنفیگریشن فائلیں نہ ہوں، کنسول میں صرف ایک لائن: просто собрать образ для <приложение>.

لہذا، اگر آپ اپنی تصاویر خود بنانا چاہتے ہیں، تو جان لیں: ایسی منفرد ڈاکر امیج ہے، scratch. سکریچ ایک "خالی" تصویر ہے، اس میں کوئی فائل نہیں ہے، حالانکہ اس کا وزن ڈیفالٹ سے ہوتا ہے - واہ! - 77 بائٹس۔

FROM scratch

سکریچ تصویر

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

اب ہمیں کسی نہ کسی طرح ان انحصار کو جمع کرنے کی ضرورت ہے۔ جیسے موجودہ اوزار apt آپ کو پیکیجز ڈاؤن لوڈ کرنے کی اجازت دیتا ہے، لیکن وہ موجودہ مشین سے جڑے ہوئے ہیں اور آخر کار، ونڈوز یا میک او ایس کو سپورٹ نہیں کرتے ہیں۔

لہذا میں نے اپنا ٹول بنانے کا ارادہ کیا جو خود بخود سب سے چھوٹی ممکنہ سائز کی بیس امیج بنائے گا اور کسی بھی ایپلیکیشن کو بھی چلائے گا۔ میں نے Ubuntu/Debian پیکجوں کا استعمال کیا، ایک انتخاب کیا (براہ راست ریپوزٹریوں سے پیکجز حاصل کرنا) اور بار بار ان کا انحصار پایا۔ پروگرام کو پیکج کا تازہ ترین مستحکم ورژن خود بخود ڈاؤن لوڈ کرنا تھا، جس سے ممکنہ حد تک حفاظتی خطرات کو کم کیا جائے۔

میں نے ٹول کا نام دیا۔ fetchyکیونکہ وہ... ڈھونڈتا اور لاتا ہے... جو ضرورت ہے [انگریزی سے "لائیں"، "لائیں" - تقریباً۔ لین] یہ ٹول کمانڈ لائن انٹرفیس کے ذریعے کام کرتا ہے، لیکن ساتھ ہی ایک API پیش کرتا ہے۔

کا استعمال کرتے ہوئے ایک تصویر کو جمع کرنے کے لئے fetchy (آئیے اس بار ازگر کی تصویر لیں)، آپ کو صرف اس طرح CLI استعمال کرنے کی ضرورت ہے: fetchy dockerize python. آپ سے ٹارگٹ آپریٹنگ سسٹم اور کوڈ نام کے لیے کہا جا سکتا ہے کیونکہ fetchy فی الحال صرف Debian اور Ubuntu پر مبنی پیکیجز استعمال کرتا ہے۔

اب آپ منتخب کر سکتے ہیں کہ کن انحصاروں کی ضرورت نہیں ہے (ہمارے تناظر میں) اور انہیں خارج کر دیں۔ مثال کے طور پر، Python پرل پر منحصر ہے، حالانکہ یہ پرل انسٹال کیے بغیر ٹھیک کام کرتا ہے۔

نتائج

کمانڈ کا استعمال کرتے ہوئے ازگر کی تصویر بنائی گئی۔ fetchy dockerize python3.5 اس کا وزن صرف 35MB ہے (مجھے یقین سے زیادہ یقین ہے کہ مستقبل میں اسے اور بھی ہلکا بنایا جا سکتا ہے)۔ یہ پتہ چلتا ہے کہ ہم ڈسٹرول لیس امیج سے مزید 15 ڈبلیو ڈبلیو کو منڈوانے میں کامیاب ہوگئے۔

آپ اب تک جمع کی گئی تمام تصاویر دیکھ سکتے ہیں۔ یہاں.

پروجیکٹ - یہاں.

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

ماخذ: www.habr.com

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