ክፍል 4 / 11

ኮንቴይነር፡ ዶከርፋይል እና ምስል ማመቻቸት በአርቴፊሻል ኢንተለጀንስ

ትርፍ፡

  • የመያዣ እና ዶከርፋይል ጽንሰ-ሀሳቦችን ፣ መሰረታዊ መመሪያዎችን እና የንብርብር አመክንዮ የመረዳት ችሎታ እና ሰው ሰራሽ የማሰብ ችሎታ ለምርት ዝግጁ የሆነ Dockerfile
  • የምስል መጠንን የመቀነስ እና የማሰማራት ፍጥነትን እና ደህንነትን በበርካታ ደረጃ ግንባታ እና በትንሽ የመሠረት ምስል የመጨመር ችሎታ
  • ምስጢሩን በምስሉ ውስጥ ላለማስገባት ፣ ከስር ፈንታ ያልተፈቀደ ተጠቃሚ ጋር ለማስኬድ እና ምስሉን የመቃኘት የደህንነት መርሆዎችን የመተግበር ችሎታ።

"በኮምፒውተሬ ላይ እየሰራ ነበር" የሚለው ዓረፍተ ነገር በሶፍትዌር ታሪክ ውስጥ እጅግ ውድ የሆነው ዓረፍተ ነገር ነው። ተመሳሳዩ ኮድ በተለያዩ የቤተ-መጽሐፍት ሥሪት ምክንያት በተለያየ አገልጋይ ላይ ይፈነዳል። የኮንቴይነር ቴክኖሎጂ ይህንን ችግር በትክክል ይፈታል፡ መተግበሪያዎን ለማስኬድ ከሚያስፈልገው ነገር ሁሉ ጋር - ቤተ-መጻሕፍት፣ ሩጫ ጊዜ፣ መቼት - ወደ አንድ ተንቀሳቃሽ ጥቅል ያስቀምጣል። ይህ ጥቅል በሁሉም ቦታ በትክክል ይሰራል። በጣም የተለመደው የመያዣ መሳሪያ Docker ነው.

የመያዣው መግለጫ ዶከርፋይል ይባላል፡ ማመልከቻዎ ከየትኛው የመሠረት ምስል እንደሚጀምር፣ የትኞቹ ፋይሎች እንደሚገለበጡ እና የትኞቹ ትዕዛዞች እንደሚሰሩ የሚገልጽ የጽሑፍ ፋይል ነው። ከዚህ የምግብ አሰራር ምስል ተዘጋጅቷል; ምስሉ ሲሰራ, መያዣ ይሆናል. AI Dockerfileን በመጻፍ እና - በይበልጥ - በማንሳት እና በማስጠበቅ ረገድ በጣም የተካነ ነው። ነገር ግን የተፈጠረው የምግብ አሰራር ምን እንደሚሰራ እና ሚስጥሮችን የት እንደሚያወጣ መረዳት የእርስዎ ስራ ነው።

የ Dockerfile መሰረታዊ መመሪያዎች

Dockerfileን ኦዲት ለማድረግ መሰረታዊ መመሪያዎችን ማወቅ አለቦት፡-

  • `FROM'፡ የመሠረት ምስሉን ይመርጣል (ለምሳሌ python፡3.12-slim)። ይህ የምስሉ መጠን እና ደህንነት በአብዛኛው የሚመጣው እዚህ ነው.
  • `WORKDIR`፡ የስራ ማውጫውን ይገልጻል።
  • `ኮፒ` / `ADD`፡ ወደ ምስሉ ቅጂዎች ፋይሎች።
  • `RUN`፡ በግንባታ ጊዜ ትእዛዝ ይሰራል (ለምሳሌ ጥገኝነትን ይጭናል)። እያንዳንዱ RUN አዲስ ንብርብር ይፈጥራል.
  • `ENV`፡ የአካባቢን ተለዋዋጭ ይገልጻል።
  • 'ExPOSE'፡ መያዣው በየትኛው ወደብ እየሰማ እንደሆነ ሰነዶች።
  • `CMD` / `ENTRYPOINT`፡ መያዣው ሲጀምር የሚሰራውን ትዕዛዝ ይወስናል።

ወሳኝ ጽንሰ-ሀሳብ ንብርብር ነው፡ ዶከር እያንዳንዱን መመሪያ እንደ ንብርብር ይሸፍናል። በተደጋጋሚ የሚለዋወጡትን ደረጃዎች መጨረሻ ላይ ካስቀመጡት, የማይለወጡ ንጣፎች ከመሸጎጫው ይመጣሉ እና ግንባታው በፍጥነት ይጨምራል.

ጠቃሚ ምክር፡ የምስል መጠንን ለመቀነስ ሁለቱ ትላልቅ ማንሻዎች፡ (1) እንደ ቀጭን ወይም አልፓይን ያለ ትንሽ የመሠረት ምስል መምረጥ; (2) ባለብዙ ደረጃ ግንባታን በመጠቀም - የግንባታ መሳሪያዎችን በአንድ ደረጃ መተው እና የመጨረሻውን ምርት ወደ ቀጭን ምስል ብቻ ማስተላለፍ። AI በፈለገ ጊዜ እነዚህን ሁለቱን በብቃት መተግበር ይችላል።

ትንሹ ምስል በጣም አስፈላጊ የሆነው ለምንድነው? ምክንያቱም የምስል መጠን የዲስክ ጉዳይ ብቻ አይደለም። አንድ ትልቅ ምስል ከእያንዳንዱ ማሰማራቱ ጋር ለመጎተት ረጅም ጊዜ ይወስዳል፣ በመዝገቡ ውስጥ ብዙ ቦታ ይወስዳል፣ አዲስ ፖድስ በሚዛንበት ጊዜ ጅምርን ይቀንሳል፣ እና ብዙ ፓኬጆችን ስለያዘ፣ ትልቅ የጥቃት ቦታን ይሰጣል - ማለትም አጥቂ ለመበዝበዝ ክፍት ቦታ። ከ 1 ጂቢ ምስል ይልቅ 100 ሜባ ምስል መጠቀም; የማሰማራቱን ጊዜ ያሳጥራል, ወጪዎችን ይቀንሳል እና ደህንነትን ይጨምራል. Dockerfileን ማመቻቸት እነዚህን ሶስት ጥቅሞች በአንድ ጊዜ እያጨዱ ነው። ለተመቻቸ Dockerfile ለ AI ሲጠይቁ "ትንሹን የመጨረሻ ምስል" ግቡን በግልጽ ይግለጹ; ስለዚህ የማጠናቀሪያውን ደረጃ ለመለየት እና አላስፈላጊ ፓኬጆችን ለመጣል ቅድሚያ ይሰጣል።

ደረጃ በደረጃ፡ Dockerfileን በ AI መፍጠር እና ማመቻቸት

  1. ማመልከቻውን ይግለጹ. ቋንቋ፣ ሥሪት፣ የግቤት ትዕዛዝ፣ የተደመጠ ወደብ።
  2. የመጀመሪያውን ረቂቅ እንዲዘጋጅ ያድርጉ. ቀላል የሚሰራ Dockerfile ይጠይቁ።
  3. አመቻቹት። ለባለብዙ ደረጃ ግንባታ፣ ለአነስተኛ የመሠረት ምስል እና የንብርብር ቅደም ተከተል ማመቻቸት ተመሳሳዩን AI ይጠይቁ።
  4. ደህንነትን ያረጋግጡ። ምስጢሩ የተካተተ ነው, እንደ ስር ይሠራል, ምንም አላስፈላጊ መሳሪያዎች አሉ?
  5. ይገንቡ እና መጠኑን ይለኩ. ዶከር ከተገነባ በኋላ መጠኑን በዶክተር ምስሎች ይመልከቱ።
  6. ቅኝት. እንደ ዶከር ስካውት ወይም ትሪቪ ባሉ የብዝበዛ ስካነር የታወቁ ተጋላጭነቶችን ያረጋግጡ።

ደህንነት: በመያዣ-ተኮር አደጋዎች

የመያዣ ደህንነት በቀላሉ ችላ ይባላል። ሶስት ህጎች:

  1. ምስጢሩን በምስሉ ውስጥ አታስቀምጡ። እንደ ENV API_KEY=... ወይም COPY .env ያሉ መስመሮች ምስጢሩን ወደ ምስሉ ንብርብሮች በቋሚነት ይጽፋሉ; ምስሉን የተቀበለ ሰው ማንበብ ይችላል። ምስጢሩን በሂደት ላይ እንደ የአካባቢ ተለዋዋጭ ወይም ከቮልት ይስጡ.
  2. እንደ ሥር በመሮጥ ላይ። በነባሪ, መያዣዎች እንደ ስር ይሰራሉ; መክፈቻው ከመያዣው ውስጥ ወደ ማምለጫነት ሊለወጥ ይችላል. በ USER መመሪያ ወደ ያልተፈቀደ ተጠቃሚ ጣል ያድርጉ።
  3. ትንሽ እና የዘመነ የመሠረት ምስል። የተበላሹ ምስሎች ሁለቱም ቀርፋፋ እና የበለጠ ተጋላጭነት አላቸው። ቀጠን/አልፓይን ምረጥ፣ ስሪቱን አስተካክል (የቅርብ ጊዜን አትጠቀም)።
ማስጠንቀቂያ፡ በ RUN ውስጥ ሚስጥሩን ቢጠቀሙ እና ቢሰርዙትም በመሃል ዌር ውስጥ እንዳለ ይቆያል እና በዶክተር ታሪክ በኩል ሊነበብ ይችላል። በግንባታው ወቅት ምስጢር የሚያስፈልግ ከሆነ፣ ENV/COPYን ሳይሆን የዶከርን - ሚስጥራዊ ዘዴ ይጠቀሙ።

የማመቻቸት ተጽዕኖ ሰንጠረዥ

ቴክኒካል

ምን ያደርጋል

የተለመደ ተፅዕኖ

ቀጭን / የአልፕስ መሰረት ምስል

አላስፈላጊ ፓኬጆችን ያስወግዳል

900MB → 120MB

ባለብዙ ደረጃ ግንባታ

የግንባታ መሳሪያዎችን አያካትትም።

700MB → 90MB

.dockergnore

በግንባታ ውስጥ አላስፈላጊ ፋይሎችን አያካትትም።

ፈጣን ግንባታ፣ ትንሽ አውድ

የደረጃ ምደባ

መሸጎጫ መምታቱን ይጨምራል

5 ደቂቃ → 40 ሰከንድ ይገንቡ

ስሪት ማስተካከል (:15)

ተደጋጋሚነት + ደህንነት

ድንገተኛ መበላሸትን ይከላከላል

ሶስት ጥቃቅን ጉዳዮች

መያዣ 1 — 1.1 ጂቢ ምስል ወደ 95 ሜባ ቀንሷል። የአንድ ቡድን Node.js ምስል 1.1 ጂቢ ነበር; እያንዳንዱ ማሰማራት ደቂቃዎች ፈጅቷል። AI “ይህንን ባለብዙ ደረጃ ግንባታ እና አልፓይን ያመቻቹ” ብለው ነገሩት። AI የማጠናቀር ደረጃውን በመለየት የተፈጠሩትን ፋይሎች ብቻ ወደ ቀጭን ምስል አንቀሳቅሷል; ውጤቱም 95 ሜባ ነበር, የማሰማራት ጊዜ በአንድ ሶስተኛ ቀንሷል.

ጉዳይ 2 - የተቀበረ ሚስጥር ተይዟል. አንድ መሐንዲስ በYZ በተሰራው Dockerfile ውስጥ የENV DB_PASSWORD=የምርት_ምስጢር መስመርን አስተውሏል። AI “ይሰራ” እንዲል የይለፍ ቃሉን ወደ ምስሉ ውስጥ አስገብቶ ነበር። መሐንዲሱ ይህንን አስወግዶ የይለፍ ቃሉን ከአካባቢው ተለዋዋጭ በ runtime ለውጦታል። አለበለዚያ ምስሉን ያነሳ ማንኛውም ሰው የይለፍ ቃሉን ማንበብ ይችላል።

ጉዳይ 3 - ሥር የማምለጥ አደጋ. የመቃኛ መሳሪያ በአአይኤ የተሰራው ምስል እንደ ስር እየሄደ እና ወሳኝ ተጋላጭነትን እንደያዘ ዘግቧል። ቡድኑ USER appuser ን አክሏል እና የመሠረት ምስሉን ወደ የአሁኑ ስሪት ገፋው; ቅኝት ጸድቷል. ትምህርት፡ ከማተምዎ በፊት እያንዳንዱን ምስል ይቃኙ እና ላልተፈቀደላቸው ተጠቃሚዎች ያጋልጡት።

አራት ሊገለበጡ የሚችሉ አብነቶች

1) የተመቻቸ ዶከርፋይል በማመንጨት ላይ፡

ለ [LANGUAGE/FAMEWORK] መተግበሪያ ለምርት ዝግጁ የሆነ ዶከርፋይል ይጻፉ።መመሪያ፡- ባለብዙ ደረጃ ግንባታን ይጠቀሙ፤ የመጨረሻውን ምስል በተቻለ መጠን ትንሹን ያድርጉት.- የመሠረት ምስሉ ቀጭን / አልፓይን እና ስሪቱ ተስተካክሏል (": የቅርብ ጊዜ" አይጠቀሙ) .- መያዣውን ባልተፈቀደለት USER ያካሂዱ, ሥር አይደለም. - ምስጢሩን በጭራሽ አታድርጉ; በሂደት ጊዜ የአካባቢ ተለዋዋጭ ይጠብቁ። - .dockerignore ጥቆማን ያክሉ። የግቤት ትዕዛዝ፡ [X]፣ የመስማት ወደብ፡ [Y]።

2) ያለውን Dockerfile ያሻሽሉ፡

ለመቀነስ እና ለማፋጠን ይህን ዶከርፋይል ይመልከቱ። በንብርብር ቅደም ተከተል ፣ ባለብዙ ደረጃ ግንባታ ፣ የመሠረት ምስል እና ተደጋጋሚ ፓኬጆችን በተመለከተ ተጨባጭ ለውጦችን ምከሩ። የእያንዳንዱን ለውጥ የሚገመተውን መጠን/ፍጥነት ተፅእኖ ይፃፉ። ዶከርፋይል፡ [CONTENT]

3) የደህንነት ኦዲት;

ይህንን Dockerfile ለደህንነት ያረጋግጡ፡ የተካተቱ ምስጢሮች፣ ስርወ ተጠቃሚዎች፣ ያልተስተካከሉ ስሪቶች፣ አላስፈላጊ መሳሪያዎች፣ ጊዜ ያለፈባቸው የመሠረት ምስሎች አሉ? ግኝቶቹን በአስፈላጊነት ቅደም ተከተል እና ማንኛውንም እርማቶች ይዘርዝሩ። ዶከርፋይል፡ [CONTENT]

4) ስህተቶችን መፍታት;

የዚህ ዶከር ግንባታ ስህተት መንስኤው ምንድን ነው እና እንዴት መፍታት ይቻላል? ዋናውን ምክንያት እና መፍትሄውን በትንሹ ለውጦች ስጠኝ. ምስጢር በሚያዩበት ቦታ እውነተኛ እሴት አያቅርቡ፣ ቦታ ያዥን ይጠቀሙ። ስህተት፡ [LOG] Dockerfile፡ [CONTENT]

ደካማ ጥያቄ / ጠንካራ ጥያቄ

ደካማ፡ "ለእኔ መስቀለኛ መንገድ ማመልከቻ Dockerfile ፃፉ።"

ውጤት፡ ግዙፍ የመሠረት ምስል፣ ሥር ተጠቃሚ፣ ነጠላ ደረጃ፣ ምናልባትም ለሚስጥር የተጋለጠ; መጠንን እና ደህንነትን ከግምት ውስጥ ሳያስገባ ውፅዓት።

ጠንካራ፡ "ለእኔ የመስቀለኛ 20 መተግበሪያ ለምርት ዝግጁ የሆነ Dockerfile ፃፉ፡ ባለብዙ ደረጃ ግንባታ፣ መስቀለኛ መንገድ፡20-አልፓይን መሰረት ምስል (ስሪት ቋሚ)፣ ካልተፈቀደለት USER ጋር አሂድ፣ ሚስጥራዊ መክተት፣ ወደብ 3000 ማዳመጥ፣ የመግቢያ መስቀለኛ መንገድ dist/server.js። እንዲሁም .dockerignoreን ይጠቁሙ።"

ልዩነት: ሁለተኛው ፈጣን ስሪት የማመቻቸት ቴክኒኮችን, የደህንነት ህግን እና የመግቢያ ትዕዛዝ ይሰጣል; ውጤቱ ትንሽ ፣ ደህንነቱ የተጠበቀ እና በቀጥታ ጥቅም ላይ የሚውል ይሆናል።

የተለመዱ ስህተቶች

  • ምስጢሩን በ`ENV`/`COPY` መክተት። በንብርብሮች ውስጥ ይቀራል እና ተመልሶ ይነበባል.
  • እንደ ሥር በመሮጥ ላይ። የ USER መመሪያን መዝለል ከባድ የደህንነት አደጋ ነው።
  • `: የቅርብ»ን በመጠቀም ላይ። የማይደገሙ ግንባታዎችን እና ያልተጠበቁ መቆራረጦችን ይፈጥራል።
  • የብዝሃ-ደረጃ ግንባታን መዝለል። የማጠናቀሪያ መሳሪያዎች ሳያስፈልግ የመጨረሻውን ምስል ያብባሉ.
  • `.dockerignore` አይጻፉ። እንደ .git እና node_modules ያሉ ግዙፍ ማውጫዎች በግንባታው ውስጥ ተካትተዋል።
  • ምስሉን ሳይቃኙ በማተም ላይ. የታወቁ ድክመቶችን ሳያውቁ ማምረት.

በማጠቃለያው

ኮንቴይነሮች አፕሊኬሽኑን በሁሉም ቦታ በሚሰሩ ተንቀሳቃሽ ፓኬጆች ውስጥ ያስቀምጣሉ; የምግብ አዘገጃጀት Dockerfile ነው. AI ለምርት ዝግጁ እና የተመቻቹ Dockerfiles በማምረት ላይ ሃይለኛ ነው - ነገር ግን ባለብዙ ደረጃ ግንባታዎችን፣ ትናንሽ ምስሎችን ፣ ያልተፈቀዱ ተጠቃሚዎችን እና ምስጢሮችን በግልፅ ያስፈልጉዎታል። የምስሉን መጠን መቀነስ ማሰማራትን ያፋጥናል; ምስጢሩን አለመክተት፣ ስር ማምለጥ እና ምስሉን መቃኘት ደህንነትን ያረጋግጣል። እያንዳንዱ የምግብ አሰራር ምን እንደሚሰራ እና የት እንደሚፈስ ማረጋገጥ የእርስዎ ኃላፊነት ነው።

የመተግበሪያ ተግባር

ቀላል መተግበሪያ ይምረጡ። AI Dockerfile በ"የተመቻቸ የዶክ ፋይል ማመንጨት" አብነት ያመነጫል። ከዚያ፡ (1) የተከተተውን ሚስጥራዊ እና ስርወ ተጠቃሚውን በ"ደህንነት ማረጋገጫ" አብነት ያረጋግጡ፤ (2) ከተቻለ ዶከርን ይገንቡ እና መጠኑን በዶክተር ምስሎች ይለኩ; (3) በሚቀጥለው ደረጃ ምስሉን ለመቀነስ የትኛው ዘዴ በጣም ውጤታማ እንደሚሆን ልብ ይበሉ።

የማረጋገጫ ዝርዝር

  • [ ] የቋንቋውን/የማዕቀፍ ሥሪትን፣ የግቤት ትዕዛዙን እና ወደብ ወደ መጠየቄ ጨምሬአለሁ።
  • [] በ Dockerfile ውስጥ ምንም የተካተቱ ምስጢሮች የሉም; በሚስጥር ጊዜ የሚጠበቀው.
  • [] ኮንቴይነሩ የሚሄደው ካልተፈቀደለት USER ጋር ነው እንጂ ስርወ አይደለም።
  • [] የመሠረቱ ምስል ትንሽ ነው (ቀጭን/አልፓይን) እና ስሪቱ ተስተካክሏል (ምንም: የቅርብ)።
  • [ ] ባለብዙ ደረጃ ግንባታ እና .dockerignore ተጠቀምኩ።
  • [ ] ምስሉን በተጋላጭነት ስካነር ቃኘሁት።