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

[የአሜሪካን የህፃናት ተረት ማጣቀሻ "ትንሹ ሞተር" - በግምት. መስመር]*

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

እንዴት ለፍላጎትዎ ጥቃቅን Docker ምስሎችን በራስ ሰር መፍጠር እንደሚችሉ

ያልተለመደ አባዜ

ላለፉት ሁለት ወራት፣ የዶከር ምስል ምን ያህል ትንሽ ሊሆን እንደሚችል እና አሁንም አፕሊኬሽኑ እየሰራ እንደሆነ እያሰብኩኝ ነው?

ተረድቻለሁ፣ ሀሳቡ እንግዳ ነው።

ወደ ዝርዝር ጉዳዮች እና ቴክኒካል ጉዳዮች ከመግባቴ በፊት፣ ይህ ችግር ለምን በጣም እንዳስቸገረኝ እና እርስዎን እንዴት እንደሚያስብ ማስረዳት እፈልጋለሁ።

ለምን መጠን አስፈላጊ ነው

የዶከር ምስል ይዘቶችን በመቀነስ, በዚህም የተጋላጭነት ዝርዝርን እንቀንሳለን. በተጨማሪም, ምስሎችን የበለጠ ንጹህ እናደርጋለን, ምክንያቱም አፕሊኬሽኖችን ለማሄድ የሚያስፈልጉትን ብቻ ይይዛሉ.

አንድ ተጨማሪ ትንሽ ጥቅም አለ - ምስሎች ትንሽ በፍጥነት ይወርዳሉ, ግን, በእኔ አስተያየት, ይህ በጣም አስፈላጊ አይደለም.

እባክዎን ያስተውሉ: ስለ መጠኑ ካሳሰበዎት, የአልፕስ መልክ እራሱ ትንሽ ነው እና እርስዎን ሊያሟላ ይችላል.

ያልተበላሹ ምስሎች

የፕሮጀክት መበላሸት የመሠረታዊ “የተበታተኑ” ምስሎች ምርጫን ያቀርባል ፣ እነሱ በትእዛዝ መስመሩ ላይ ለማየት የተጠቀሙባቸውን የጥቅል አስተዳዳሪዎች ፣ ዛጎሎች እና ሌሎች መገልገያዎችን አልያዙም። በውጤቱም, እንደ ጥቅል አስተዳዳሪዎች ይጠቀሙ pip и apt አይሰራም:

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

ዶከርፋይል 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

ፒፕ በምስሉ ውስጥ የለም።

ብዙውን ጊዜ ይህ ችግር የሚፈታው ባለብዙ ደረጃ ግንባታ ነው-

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) - 179 ሜባ፣ የአልፕስ ምስል (3,7-alpine) 98,6 ሜባ ሲሆን በምሳሌው ላይ ጥቅም ላይ የዋለው የመሠረት ዲስትሮ-አልባ ምስል 50,9 ሜባ ነው።

ባለፈው ምሳሌ ውስጥ አንድ ሙሉ ማውጫ እየገለበጥን መሆኑን መጥቀስ ተገቢ ነው /usr/local/lib/python3.7/site-packagesእኛ የማያስፈልጉንን ጥገኞች ሊይዝ ይችላል። ምንም እንኳን የሁሉም ነባር የ Python ቤዝ ምስሎች የመጠን ልዩነት እንደሚለያይ ግልጽ ቢሆንም.

በሚጽፉበት ጊዜ Google distroless ብዙ ምስሎችን አይደግፍም: Java እና Python አሁንም በሙከራ ደረጃ ላይ ናቸው, እና Python ለ 2,7 እና 3,5 ብቻ ነው ያለው.

ጥቃቅን ምስሎች

ትናንሽ ምስሎችን በመፍጠር ወደ አባዜ ልመለስ።

በአጠቃላይ, የተበላሹ ምስሎች እንዴት እንደሚገነቡ ለማየት ፈልጌ ነበር. ያልተበላሸው ፕሮጀክት የጉግልን የግንባታ መሳሪያ ይጠቀማል bazel. ሆኖም ባዝልን መጫን እና የእራስዎን ምስሎች መፃፍ ብዙ ስራ ፈጅቷል (እና እውነቱን ለመናገር መንኮራኩሩን ማደስ አስደሳች እና አስተማሪ ነው)። ትናንሽ ምስሎችን መፍጠርን ለማቃለል ፈለግሁ-ምስል የመፍጠር ተግባር እጅግ በጣም ቀላል መሆን አለበት ፣ ባናል. ስለዚህ ለእርስዎ ምንም የማዋቀር ፋይሎች እንዳይኖሩ ፣ በኮንሶሉ ውስጥ አንድ መስመር ብቻ просто собрать образ для <приложение>.

ስለዚህ, የራስዎን ምስሎች ለመፍጠር ከፈለጉ, ከዚያ ይወቁ: እንደዚህ ያለ ልዩ የዶክ ምስል አለ, scratch. Scratch "ባዶ" ምስል ነው, በውስጡ ምንም ፋይሎች የሉም, ምንም እንኳን በነባሪነት ቢመዘንም - ዋው! - 77 ባይት.

FROM scratch

የጭረት ምስል

የጭረት ምስል ሀሳብ ማንኛውንም ጥገኛ ከአስተናጋጅ ማሽን ወደ እሱ መገልበጥ እና በ Dockerfile ውስጥ መጠቀም ይችላሉ (ይህ እነሱን ለመቅዳት ያህል ነው) apt እና ከባዶ ይጫኑ) ወይም በኋላ የዶከር ምስሉ እውን ሲሆን። ይህ የዶከር ኮንቴይነሩን ይዘት ሙሉ በሙሉ እንዲቆጣጠሩ ያስችልዎታል, እና ስለዚህ የምስሉን መጠን ሙሉ በሙሉ ይቆጣጠሩ.

አሁን እነዚህን ጥገኞች እንደምንም መሰብሰብ አለብን። እንደ ነባር መሳሪያዎች apt ፓኬጆችን እንዲያወርዱ ይፈቅድልዎታል ፣ ግን እነሱ አሁን ካለው ማሽን ጋር የተሳሰሩ ናቸው እና ከሁሉም በላይ ዊንዶውስ ወይም ማክኦስን አይደግፉም።

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

መሳሪያውን ሰይሜዋለሁ fetchyእሱ... አግኝቶ ስለሚያመጣ... የሚያስፈልገውን [ከእንግሊዝኛ “አምጣ”፣ “አምጣ” - በግምት። መስመር]. መሣሪያው በትእዛዝ መስመር በይነገጽ በኩል ይሰራል, ግን በተመሳሳይ ጊዜ ኤፒአይ ያቀርባል.

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

አሁን የትኞቹ ጥገኞች በጭራሽ አያስፈልጉም (በእኛ አውድ) መምረጥ እና እነሱን ማግለል ይችላሉ። ለምሳሌ፣ ፓይዘን በፐርል ላይ የተመሰረተ ነው፣ ምንም እንኳን ፐርል ሳይጫን በጥሩ ሁኔታ ይሰራል።

ውጤቶች

ትዕዛዙን በመጠቀም የ Python ምስል ተፈጠረ fetchy dockerize python3.5 ክብደቱ 35 ሜባ ብቻ ነው (ለወደፊቱ የበለጠ ቀላል እንደሚሆን እርግጠኛ ነኝ)። ከተበላሸ ምስል ሌላ 15 WW መላጨት ችለናል።

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

ፕሮጀክት - እዚህ.

ባህሪያት ከሌሉዎት, ጥያቄን ብቻ ይፍጠሩ - ለማገዝ ደስተኛ እሆናለሁ :) ከዚህም በላይ በአሁኑ ጊዜ ሌሎች የጥቅል አስተዳዳሪዎችን ወደ fetchy በማዋሃድ ላይ እየሰራሁ ነው, ስለዚህም ባለብዙ ደረጃ ግንባታዎች አያስፈልግም.

ምንጭ: hab.com

አስተያየት ያክሉ