ننڍڙا ڊاڪر تصويرون جيڪي پاڻ ۾ يقين رکن ٿيون*

آمريڪي ٻارن جي افساني جو حوالو "The Little Engine That Could" - تقريبن. لين]*

ننڍڙا ڊاڪر تصويرون جيڪي پاڻ ۾ يقين رکن ٿيون*

توهان جي ضرورتن لاءِ پاڻمرادو ننون ڊاڪر تصويرون ڪيئن ٺاهيون

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

گذريل ٻن مهينن کان، مون کي جنون ڪيو ويو آهي ته ڊاکر جي تصوير ڪيتري ننڍڙي ٿي سگهي ٿي ۽ اڃا تائين ايپليڪيشن هلائي رهي آهي؟

مان سمجهان ٿو، خيال عجيب آهي.

ان کان اڳ جو مان تفصيلات ۽ فني صلاحيتن ۾ وڃان، مان وضاحت ڪرڻ چاهيندس ته هي مسئلو مون کي ايترو پريشان ڇو ڪيو، ۽ اهو توهان کي ڪيئن پريشان ڪري ٿو.

ڇو سائيز اهم آهي

Docker تصوير جي مواد کي گھٽائڻ سان، اسان ان ڪري نقصان جي فهرست کي گھٽائي سگھون ٿا. اضافي طور تي، اسان تصويرن کي صاف ڪريون ٿا، ڇاڪاڻ ته انهن ۾ صرف اهي آهن جيڪي ايپليڪيشن هلائڻ لاء گهربل آهن.

هتي هڪ وڌيڪ ننڍڙو فائدو آهي - تصويرون ٿوري تيز ڊائون لوڊ ڪيا ويا آهن، پر، منهنجي خيال ۾، اهو ايترو اهم ناهي.

مهرباني ڪري نوٽ ڪريو: جيڪڏهن توهان سائيز جي باري ۾ پريشان آهيو، الپائن پاڻ کي ننڍڙو نظر اچن ٿا ۽ ممڪن آهي ته توهان کي مناسب هجي.

بي ترتيب تصويرون

پروجيڪٽ ڊسٽرول پيش ڪري ٿو بنيادي "بيضت" تصويرن جو انتخاب، انهن ۾ پيڪيج مينيجرز، شيل ۽ ٻيون افاديت شامل نه آهن جيڪي توهان ڪمانڊ لائن تي ڏسڻ لاء استعمال ڪيا ويا آهن. نتيجي طور، استعمال ڪريو پيڪيج مينيجرز وانگر pip и apt ڪم نه ڪندو:

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

Dockerfile Python 3 distroless تصوير استعمال ڪندي

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 سائيز ۾. ايترو ب خراب نـ آهي! مقابلي لاءِ: ڊفالٽ Python تصوير جو وزن 929MB آهي، ۽ ”ٿلهي“ هڪ (3,7-slim) - 179MB، الپائن تصوير (3,7-alpine) 98,6MB آهي، جڏهن ته مثال طور استعمال ٿيل بيس ڊسٽرول تصوير 50,9MB آهي.

اهو اشارو ڪرڻ مناسب آهي ته پوئين مثال ۾ اسان هڪ پوري ڊاريڪٽري کي نقل ڪري رهيا آهيون /usr/local/lib/python3.7/site-packages، جنهن ۾ انحصار شامل ٿي سگھي ٿو جنهن جي اسان کي ضرورت ناهي. جيتوڻيڪ اهو واضح آهي ته سڀني موجود Python بنيادي تصويرن جي سائيز جو فرق مختلف آهي.

لکڻ جي وقت تي، Google distroless ڪيترن ئي تصويرن کي سپورٽ نٿو ڪري: جاوا ۽ پٿون اڃا تائين تجرباتي اسٽيج تي آهن، ۽ پٿون صرف 2,7 ۽ 3,5 لاءِ موجود آهي.

ننڍيون تصويرون

ننڍيون تصويرون ٺاهڻ سان منهنجي جنون ڏانهن واپس.

عام طور تي، مون کي ڏسڻ چاهيو ته ڪيئن بي ترتيب تصويرون ٺهيل آهن. ڊسٽرول پروجيڪٽ گوگل جو بلڊ ٽول استعمال ڪري ٿو bazel. بهرحال، بيزل کي انسٽال ڪرڻ ۽ پنهنجون تصويرون لکڻ تمام گهڻو ڪم ورتو (۽ ايماندار ٿيڻ لاءِ، ڦيٿي کي بحال ڪرڻ مزيدار ۽ تعليمي آهي). مان ننڍين تصويرن جي تخليق کي آسان ڪرڻ چاهيان ٿو: تصوير ٺاهڻ جو عمل انتهائي سادو هجڻ گهرجي، عام. انهي ڪري ته توهان لاءِ ڪا به ترتيب واري فائلون نه آهن، ڪنسول ۾ صرف هڪ لائن: просто собрать образ для <приложение>.

تنهن ڪري، جيڪڏهن توهان پنهنجون تصويرون ٺاهڻ چاهيو ٿا، پوء ڄاڻو: اتي هڪ منفرد ڊاکر تصوير آهي، scratch. اسڪريچ هڪ "خالي" تصوير آهي، ان ۾ ڪا به فائل ناهي، جيتوڻيڪ اهو ڊفالٽ طور وزن آهي - واه! - 77 بائيٽ.

FROM scratch

ڇڪيل تصوير

اسڪريچ تصوير جو خيال اهو آهي ته توهان ميزبان مشين مان ڪنهن به انحصار کي نقل ڪري سگهو ٿا ان ۾ ۽ يا ته انهن کي ڊاڪرفائل جي اندر استعمال ڪريو (اهو انهن کي نقل ڪرڻ وانگر آهي. apt ۽ شروع کان انسٽال ڪريو) يا بعد ۾ جڏهن ڊاڪر جي تصوير مادي ڪئي وئي آهي. هي توهان کي مڪمل طور تي Docker ڪنٽينر جي مواد کي ڪنٽرول ڪرڻ جي اجازت ڏئي ٿو، ۽ اهڙيء طرح مڪمل طور تي تصوير جي سائيز کي ڪنٽرول ڪري ٿو.

هاڻي اسان کي ڪنهن به طرح انهن انحصار کي گڏ ڪرڻ جي ضرورت آهي. موجوده اوزار جهڙوڪ apt توهان کي پيڪيجز کي ڊائون لوڊ ڪرڻ جي اجازت ڏين ٿا، پر اهي موجوده مشين سان ڳنڍيل آهن ۽ آخرڪار، ونڊوز يا MacOS کي سپورٽ نه ڪندا آهن.

تنهن ڪري مون پنهنجو اوزار ٺاهيو جيڪو خودڪار طور تي ننڍڙي ممڪن سائيز جي بنيادي تصوير ٺاهي ۽ ڪنهن به ايپليڪيشن کي هلائي. مون استعمال ڪيو Ubuntu/Debian پيڪيجز، هڪ چونڊ ڪيو (پيڪيجز کي سڌو سنئون مخزنن مان حاصل ڪرڻ) ۽ انهن جي انحصار کي بار بار مليو. پروگرام کي خودڪار طريقي سان پيڪيج جي جديد مستحڪم ورزن کي ڊائون لوڊ ڪرڻ گهرجي، ممڪن حد تائين سيڪيورٽي خطرن کي گھٽائڻ.

مون اوزار جو نالو ڏنو fetchyڇاڪاڻ ته هو... ڳولهي ٿو ۽ آڻي ٿو... جيڪو گهربل آهيانگريزي کان "آڻ"، "آڻ" - تقريبن. لين]. اوزار ڪمانڊ لائن انٽرفيس ذريعي ڪم ڪري ٿو، پر ساڳئي وقت هڪ API پيش ڪري ٿو.

استعمال ڪندي تصوير کي گڏ ڪرڻ لاء fetchy (اچو ته هن ڀيري پيٿون جي تصوير وٺون)، توهان کي صرف CLI استعمال ڪرڻ جي ضرورت آهي هن طرح: fetchy dockerize python. توهان شايد ٽارگيٽ آپريٽنگ سسٽم ۽ codename لاء پڇيو وڃي ڇاڪاڻ ته fetchy في الحال صرف ڊيبين ۽ Ubuntu جي بنياد تي پيڪيجز استعمال ڪري ٿو.

ھاڻي توھان چونڊي سگھوٿا ڪھڙين انحصار جي ضرورت نه آھي (اسان جي حوالي سان) ۽ انھن کي خارج ڪريو. مثال طور، پٿون پرل تي منحصر آهي، جيتوڻيڪ اهو پرل نصب ٿيڻ کان سواء ٺيڪ ڪم ڪري ٿو.

نتيجا

Python تصوير ٺاهي وئي ڪمانڊ استعمال ڪندي fetchy dockerize python3.5 وزن صرف 35 ايم بي (مون کي پڪ آهي ته مستقبل ۾ اهو اڃا به وڌيڪ روشن ٿي سگهي ٿو). اهو ظاهر ٿيو ته اسان هڪ ٻئي 15 ڊبليو ڊبليو ڊبليو ڊبليو ڊبليو ڊبليو ڊبليو ڊبليو ڊبليو ڊبليو ڊبليو ڊبليو ڊبليو ڊبليو.

توھان ڏسي سگھوٿا سڀ تصويرون گڏ ڪيل آھن ھن وقت تائين هتي.

پروجيڪٽ - هتي.

جيڪڏهن توهان وٽ خاصيتون غائب آهن، صرف هڪ درخواست ٺاهيو - مون کي مدد ڪرڻ ۾ خوشي ٿي ويندي :) اڃا به وڌيڪ، مان هن وقت ڪم ڪري رهيو آهيان ٻين پيڪيج مينيجرز کي فيچي ۾ ضم ڪرڻ تي، انهي ڪري ته گهڻن مرحلن جي تعمير جي ضرورت ناهي.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو