በራሳቸው የሚያምኑ ጥቃቅን ዶከር ምስሎች*

[የአሜሪካን የህፃናት ታሪክ "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

ፒፕ በምስሉ ላይ የለም

በተለምዶ ይህ ችግር በብዙ ደረጃዎች ስብሰባ ይፈታል-

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/

ባለብዙ ደረጃ ስብሰባ

የተገኘው ምስል መጠን 130 ሜባ ነው። በጣም መጥፎ አይደለም! ለማነፃፀር፣ ነባሪው የፓይዘን ምስል 929 ሜባ ይመዝናል፣ እና "ቀጭን" የሆነው (3,7-slim) - 179ሜባ፣ የአልፕስ ምስል (3,7-alpine) — 98,6 ሜባ፣ በምሳሌው ውስጥ ጥቅም ላይ የዋለው መሰረታዊ ዲስትሮል የሌለው ምስል 50,9 ሜባ ነው።

በቀደመው ምሳሌ ላይ ሙሉ ማውጫ እየገለበጥን እንደሆነ በትክክል መጥቀስ ይቻላል። /usr/local/lib/python3.7/site-packages, ይህም የማያስፈልጉንን ጥገኞች ሊይዝ ይችላል። ሆኖም፣ በሁሉም ነባር የፓይዘን መሰረታዊ ምስሎች መካከል ያለው የመጠን ልዩነት እንደሚለዋወጥ ግልጽ ነው።

በሚጻፍበት ጊዜ፣ ጎግል ዲስትሮለስ ብዙ ምስሎችን አይደግፍም፡ ጃቫ እና ፓይዘን አሁንም በሙከራ ላይ ናቸው፣ እና ፓይዘን ለ2,7 እና 3,5 ብቻ ነው የሚገኘው።

ጥቃቅን ምስሎች

ወደ ትናንሽ ምስሎች የመፍጠር አባዜዬ እንመለስ።

የዲስትሮልዝ ምስሎች እንዴት እንደተዋቀሩ ማየት ፈልጌ ነበር። ዲስትሮልዝ ፕሮጀክቱ የጉግልን የግንባታ መሳሪያ ይጠቀማል። bazelይሁን እንጂ፣ ባዘልን መጫን እና የራሴን ምስሎች መፍጠር የተወሰነ ጥረት ጠይቆብኛል (እና ሙሉ በሙሉ እውነቱን ለመናገር፣ መንኮራኩሩን እንደገና ማደስ አስደሳች እና ትምህርታዊ ነው)። የተቀነሰ ምስሎችን መፍጠርን ቀላል ማድረግ ፈልጌ ነበር፡ ምስል የመፍጠር ተግባር እጅግ በጣም ቀላል መሆን አለበት፣ ባናልስለዚህ ለእርስዎ ምንም የውቅር ፋይሎች የሉም፣ በኮንሶሉ ውስጥ አንድ መስመር ብቻ просто собрать образ для <приложение>.

ስለዚህ፣ የራስዎን ምስሎች መፍጠር ከፈለጉ፣ እንደዚህ አይነት ልዩ የሆነ የዶክተር ምስል እንዳለ ይወቁ፣ scratchስክራች "ባዶ" ምስል ነው፤ ምንም ፋይሎች የሉትም፣ ምንም እንኳን ክብደቱ ቢመዝንም - ዋው! -- በነባሪነት 77 ባይትስ።

FROM scratch

የቧጨራ ምስል

ከጭረት ምስሉ በስተጀርባ ያለው ሀሳብ ከአስተናጋጅ ማሽኑ ውስጥ ማንኛውንም ጥገኝነት መቅዳት እና በ Dockerfile ውስጥ መጠቀም ይችላሉ (ይህም ወደ apt እና ከባዶ ይጫኑ)፣ ወይም በኋላ፣ የዶከር ምስሉ ከተሰራ በኋላ። ይህ የዶከር ኮንቴይነር ይዘቶችን ሙሉ በሙሉ ለመቆጣጠር እና በዚህም የምስሉን መጠን ሙሉ በሙሉ ለመቆጣጠር ያስችላል።

አሁን እነዚህን ጥገኝነቶች በሆነ መንገድ መሰብሰብ አለብን። እንደ apt ፓኬጆችን እንዲያወርዱ ይፈቅድልዎታል፣ ነገር ግን ከአሁኑ ማሽን ጋር የተሳሰሩ ናቸው፣ እና በመጨረሻም ዊንዶውስ ወይም ማክኦኤስን አይደግፉም።

ስለዚህ በተቻለ መጠን አነስተኛ መጠን ያለው መሰረታዊ ምስል በራስ-ሰር የሚገነባ እና ማንኛውንም መተግበሪያ የሚያስኬድ የራሴን መሳሪያ ለመስራት ወሰንኩ። የኡቡንቱ/ዴቢያን ፓኬጆችን ተጠቀምኩ፣ ምርጫ ፈጠርኩ (ፓኬጆችን በቀጥታ ከማከማቻዎች በማውጣት) እና ጥገኞቻቸውን በተደጋጋሚ አግኝቻለሁ። ፕሮግራሙ የደህንነት ስጋቶችን በመቀነስ የቅርብ ጊዜውን የተረጋጋ የጥቅሉን ስሪት በራስ-ሰር ማውረድ ነበረበት።

የሙዚቃ መሳሪያውን ስም ሰጠሁት fetchyምክንያቱም እሱ… የሚያስፈልገውን ያገኛል እና ያመጣል…ከእንግሊዝኛ "fetch", "to bring" - trans. note]. መሣሪያው በትእዛዝ መስመር በይነገጽ በኩል ይሰራል፣ ነገር ግን ኤፒአይም ያቀርባል።

ምስልን በመጠቀም ለመሰብሰብ fetchy (በዚህ ጊዜ የፓይዘን ምስል እንውሰድ)፣ CLIን እንደሚከተለው መጠቀም ብቻ ያስፈልግዎታል፡ fetchy dockerize pythonየዒላማውን ኦፐሬቲንግ ሲስተም እና የኮድ ስም ሊጠየቁ ይችላሉ ምክንያቱም fetchy በአሁኑ ጊዜ በዴቢያን እና በኡቡንቱ ላይ የተመሰረቱ ፓኬጆችን ብቻ ነው የሚጠቀመው።

አሁን የትኞቹ ጥገኝነቶች (በእኛ አውድ) ሙሉ በሙሉ አላስፈላጊ እንደሆኑ መምረጥ እና ማስወገድ ይችላሉ። ለምሳሌ፣ Python በፐርል ላይ የተመሰረተ ነው፣ ምንም እንኳን ፐርል ሳይጫን በትክክል ቢሰራም።

ውጤቶች

የፓይቶን ምስል የተፈጠረው ትዕዛዙን በመጠቀም ነው fetchy dockerize python3.5 ክብደቱ 35ሜባ ብቻ ነው (ወደፊት የበለጠ ቀላል ሊሆን እንደሚችል እርግጠኛ ነኝ)። ስለዚህ ከዲስትሮሌክስ ምስሉ ሌላ 15ሜባ መላጥ ችለናል።

እስካሁን የተሰበሰቡትን ምስሎች በሙሉ ማየት ይችላሉ። እዚህ.

ፕሮጀክት - እዚህ.

ባህሪያት ካጡዎት፣ ጥያቄ ብቻ ይፍጠሩ - እርስዎን ለመርዳት ደስተኛ ነኝ :) ከዚህም በላይ፣ በአሁኑ ጊዜ ሌሎች የጥቅል አስተዳዳሪዎችን ወደ ማራኪነት በማዋሃድ ላይ እየሰራሁ ነው፣ ስለዚህ ባለብዙ ደረጃ ግንባታዎች አያስፈልጉም።

ምንጭ: hab.com

አስተያየት ያክሉ