አሁን መደበኛ Dockerfile በመጠቀም Docker ምስሎችን በ werf ውስጥ መገንባት ይችላሉ።

ከመቼውም ጊዜ ዘግይቶ ይሻላል። ወይም የመተግበሪያ ምስሎችን ለመገንባት ለመደበኛ Dockerfiles ድጋፍ ባለማግኘት እንዴት ከባድ ስህተት እንደሰራን ማለት ይቻላል።

አሁን መደበኛ Dockerfile በመጠቀም Docker ምስሎችን በ werf ውስጥ መገንባት ይችላሉ።

ስለ ይሆናል werf - ከማንኛውም የሲአይ/ሲዲ ስርዓት ጋር የተዋሃደ እና አጠቃላይ የመተግበሪያውን የህይወት ዑደት የሚያስተዳድር የ GitOps መገልገያ፡-

  • ምስሎችን መሰብሰብ እና ማተም ፣
  • ማመልከቻዎችን ወደ Kubernetes ያሰማሩ ፣
  • ልዩ ፖሊሲዎችን በመጠቀም ጥቅም ላይ ያልዋሉ ምስሎችን ሰርዝ።


የፕሮጀክቱ ፍልስፍና የዴቭኦፕስ መሐንዲሶች አፕሊኬሽኖችን እንዲቆጣጠሩ የሚያስችል ዝቅተኛ ደረጃ መሳሪያዎችን ወደ አንድ ወጥ ስርዓት መሰብሰብ ነው። ከተቻለ ነባር መገልገያዎች (እንደ ሄልም እና ዶከር) ጥቅም ላይ መዋል አለባቸው። ለችግሩ መፍትሄ ከሌለ, ለዚህ አስፈላጊ የሆኑትን ሁሉ መፍጠር እና መደገፍ እንችላለን.

ዳራ፡ የራስህ ምስል ሰብሳቢ

በ werf ውስጥ ካለው ምስል ገንቢ ጋር የሆነው ይህ ነው፡ የተለመደው Dockerfile አጥተናል። በፕሮጀክቱ ታሪክ ውስጥ በአጭሩ ከገቡ ፣ ይህ ችግር በመጀመሪያዎቹ የ werf ስሪቶች (ከዚያም) ቀድሞውኑ እራሱን ገለጠ ። ዳፕ በመባል ይታወቃል).

አፕሊኬሽኖችን ወደ ዶከር ምስሎች ለመገንባት መሳሪያ በምንፈጥርበት ጊዜ Dockerfile ለአንዳንድ ልዩ ስራዎች ለእኛ ተስማሚ እንዳልሆነ በፍጥነት ተገነዘብን።

  1. በሚከተለው መደበኛ እቅድ መሰረት የተለመዱ ትናንሽ የድር መተግበሪያዎችን የመሰብሰብ አስፈላጊነት:
    • የመተግበሪያውን ስርዓት-ሰፊ ጥገኞችን ይጫኑ ፣
    • የመተግበሪያ ጥገኝነት ቤተ-ፍርግሞችን ጫን ፣
    • ንብረቶችን መሰብሰብ ፣
    • እና ከሁሉም በላይ, በምስሉ ላይ ያለውን ኮድ በፍጥነት እና በብቃት ያዘምኑ.
  2. በፕሮጀክት ፋይሎች ላይ ለውጦች ሲደረጉ ገንቢው የተቀየሩትን ፋይሎች በማስተካከል በፍጥነት አዲስ ንብርብር መፍጠር አለበት።
  3. የተወሰኑ ፋይሎች ከተቀየሩ, ተጓዳኝ ጥገኛ ደረጃ እንደገና መገንባት አለበት.

ዛሬ ሰብሳቢያችን ሌሎች ብዙ እድሎች አሉት፣ ግን እነዚህ የመጀመሪያዎቹ ምኞቶች እና ምኞቶች ነበሩ።

በአጠቃላይ፣ ሁለት ጊዜ ሳናስብ፣ የምንጠቀመውን የፕሮግራሚንግ ቋንቋ አስታጠቅን። (ከስር ተመልከት) እና መንገዱን ይምቱ - ለመተግበር የራሱ DSL! በተቀመጡት ተግባራት መሰረት የግንባታውን ሂደት በደረጃ ለመግለጽ እና የእነዚህን ደረጃዎች በፋይሎች ላይ ያለውን ጥገኝነት ለመወሰን ታስቦ ነበር. እና ጨመረው። የራሱ ቧንቧ, ይህም DSL ወደ የመጨረሻው ግብ ቀይሮታል - የተሰበሰበው ምስል. በመጀመሪያ DSL በሩቢ ውስጥ ነበር, ግን እንደ ወደ ጎላንግ መቀየር - የኛ ሰብሳቢው ውቅር በ YAML ፋይል ውስጥ መገለጽ ጀመረ።

አሁን መደበኛ Dockerfile በመጠቀም Docker ምስሎችን በ werf ውስጥ መገንባት ይችላሉ።
በሩቢ ውስጥ ለዳፕ የቆየ ውቅር

አሁን መደበኛ Dockerfile በመጠቀም Docker ምስሎችን በ werf ውስጥ መገንባት ይችላሉ።
በ YAML ላይ ለ werf የአሁኑ ውቅር

የሰብሳቢው ዘዴም በጊዜ ሂደት ተለውጧል. መጀመሪያ ላይ በበረራ ላይ ከኛ ውቅረት ላይ አንዳንድ ጊዜያዊ Dockerfile ፈጠርን እና ከዛም የግንባታ መመሪያዎችን በጊዜያዊ ኮንቴይነሮች ውስጥ ማስኬድ እና ቃል መግባት ጀመርን።

NBበአሁኑ ጊዜ ግንበኛችን በራሱ ውቅር (በ YAML) የሚሠራው እና ስታፔል ግንበኛ ተብሎ የሚጠራው ቀድሞውንም ቢሆን በጣም ኃይለኛ መሳሪያ ሆኗል። የእሱ ዝርዝር መግለጫ የተለየ መጣጥፎች ይገባዋል, እና ዋና ዝርዝሮች በ ውስጥ ይገኛሉ ሰነድ.

የችግሩን ግንዛቤ

ነገር ግን አንድ ስህተት እንደሰራን ወዲያውኑ ተገነዘብን: ችሎታውን አልጨመርንም ምስሎችን በመደበኛ Dockerfile ይገንቡ እና ከጫፍ እስከ ጫፍ የመተግበሪያ አስተዳደር መሠረተ ልማት ውስጥ ያዋህዷቸው (ማለትም ምስሎችን ይሰብስቡ፣ ያሰማሩ እና ያፅዱ)። በ Kubernetes ውስጥ የማሰማሪያ መሳሪያ እንዴት መስራት እንደሚችሉ እና የ Dockerfile ድጋፍን አይተገብሩም, ማለትም. ለአብዛኛዎቹ ፕሮጀክቶች ምስሎችን ለመግለጽ መደበኛ መንገድ?

ለእንደዚህ አይነት ጥያቄ መልስ ከመስጠት ይልቅ መፍትሄውን እናቀርባለን. አስቀድመው Dockerfile (ወይም የዶከርፋይል ስብስብ) ካለዎት እና werf መጠቀም ከፈለጉስ?

NBበነገራችን ላይ ለምን werf መጠቀም ትፈልጋለህ? ዋናዎቹ ባህሪያት በሚከተሉት ይከፈላሉ.

  • ምስሎችን የማጽዳትን ጨምሮ ሙሉ የመተግበሪያ አስተዳደር ዑደት;
  • ከአንድ ውቅረት ብዙ ምስሎችን በአንድ ጊዜ የመገጣጠም ችሎታ;
  • ለ Helm ተስማሚ ገበታዎች የተሻሻለ የማሰማራት ሂደት።

የበለጠ የተሟላ ዝርዝር በ ላይ ይገኛል። የፕሮጀክት ገጽ.

ስለዚህ፣ ከዚህ ቀደም Dockerfile ን በእኛ ውቅረት ውስጥ እንደገና ለመፃፍ ብንሰጥ ኖሮ አሁን በደስታ እንላለን፡- “የእርስዎን Dockerfiles እንገንባ!” እንላለን።

እንዴት መጠቀም ይቻላል?

የዚህ ባህሪ ሙሉ አተገባበር በተለቀቀው ውስጥ ታየ werf v1.0.3-beta.1. አጠቃላይ መርሆው ቀላል ነው፡ ተጠቃሚው በ werf ውቅር ውስጥ ወዳለው Dockerfile የሚወስደውን መንገድ ይገልፃል እና ከዚያ ትዕዛዙን ያስኬዳል። werf buildእና ያ ነው - werf ምስሉን ይሰበስባል. አንድ አብስትራክት ምሳሌ እንመልከት።

ቀጣዩን እናሳውቅ Dockerfile በፕሮጀክቱ መሠረት;

FROM ubuntu:18.04
RUN echo Building ...

እና እናሳውቃለን። werf.yamlይህንን የሚጠቀመው Dockerfile:

configVersion: 1
project: dockerfile-example
---
image: ~
dockerfile: ./Dockerfile

ሁሉም! ግራ አሂድ werf build:

አሁን መደበኛ Dockerfile በመጠቀም Docker ምስሎችን በ werf ውስጥ መገንባት ይችላሉ።

በተጨማሪም, የሚከተሉትን ማወጅ ይችላሉ werf.yaml ከተለያዩ Dockerfiles ብዙ ምስሎችን በአንድ ጊዜ ለመገንባት፡-

configVersion: 1
project: dockerfile-example
---
image: backend
dockerfile: ./dockerfiles/Dockerfile-backend
---
image: frontend
dockerfile: ./dockerfiles/Dockerfile-frontend

በመጨረሻም፣ እንደ ተጨማሪ የግንባታ መለኪያዎች ማለፍን ይደግፋል --build-arg и --add-host - በ werf ውቅር በኩል። የ Dockerfile ምስል ውቅር ሙሉ መግለጫ በ ላይ ይገኛል። የሰነድ ገጽ.

ይህ የሚሠራው እንዴት ነው?

በግንባታው ሂደት ውስጥ, በ Docker ውስጥ ያሉ የአካባቢያዊ ንብርብሮች መደበኛ መሸጎጫ. ሆኖም በአስፈላጊ ሁኔታ, werf ደግሞ የ Dockerfile ውቅረትን ወደ መሠረተ ልማቱ ያዋህዳል. ይህ ምን ማለት ነው?

  1. ከ Dockerfile የተሰራ እያንዳንዱ ምስል አንድ ነጠላ ደረጃን ይይዛል dockerfile (በ werf ውስጥ ምን ደረጃዎች እንዳሉ የበለጠ ማንበብ ይችላሉ እዚህ).
  2. ለመድረክ dockerfile werf በ Dockerfile ውቅር ይዘት ላይ የሚመረኮዝ ፊርማ ያሰላል። የ Dockerfile ውቅረትን መቀየር የመድረክ ፊርማውን ይለውጣል dockerfile እና werf በአዲሱ Dockerfile ውቅር የዚያን ደረጃ እንደገና መገንባት ይጀምራል። ፊርማው ካልተቀየረ, ከዚያም werf ምስሉን ከመሸጎጫው ይወስዳል (በ werf ውስጥ ስለ ፊርማዎች አጠቃቀም የበለጠ በ ውስጥ ተገልጿል ይህ ሪፖርት).
  3. በመቀጠል, የተሰበሰቡት ምስሎች በትእዛዙ ሊታተሙ ይችላሉ werf publish (ወይም werf build-and-publish) እና ወደ ኩበርኔትስ ለማሰማራት ይጠቀሙበት። በDocker መዝገብ ውስጥ የታተሙ ምስሎች በመደበኛ የዊርፍ ማጽጃ መሳሪያዎች ይጸዳሉ, ማለትም. የድሮ ምስሎችን (ከኤን ቀናት በላይ የቆዩ)፣ ከሌሉት የጂት ቅርንጫፎች እና ሌሎች ፖሊሲዎች ጋር የተቆራኙ ምስሎችን በራስ ሰር የማጽዳት ስራ ይኖራል።

እዚህ ስለተገለጹት ነጥቦች ተጨማሪ ዝርዝሮች በሰነዱ ውስጥ ይገኛሉ፡-

ማስታወሻዎች እና ጥንቃቄዎች

1. ውጫዊ ዩአርኤል በADD ውስጥ አይደገፍም።

በአሁኑ ጊዜ በመመሪያ ውስጥ ውጫዊ ዩአርኤል መጠቀም አይደገፍም። ADD. በተጠቀሰው ዩአርኤል ላይ ያለ ምንጭ ሲቀየር Werf እንደገና መገንባትን አያነሳሳም። ይህ ባህሪ በቅርቡ ለመጨመር ታቅዷል።

2. በምስሉ ላይ .git ማከል አይችሉም

በአጠቃላይ ፣ ማውጫ ማከል .git በምስሉ ውስጥ - መጥፎ መጥፎ ልምምድ እና ለምን እንደሆነ እነሆ-

  1. ከሆነ .git በመጨረሻው ምስል ላይ ይቆያል, ይህ መርሆቹን ይጥሳል 12 ነጥብ መተግበሪያ: የተገኘው ምስል ከአንድ ቁርጠኝነት ጋር መያያዝ ስላለበት, ማድረግ መቻል የለበትም git checkout በዘፈቀደ መፈጸም.
  2. .git የምስሉን መጠን ይጨምራል (ትልቅ ፋይሎች አንድ ጊዜ ተጨምረዋል እና ከዚያም የተሰረዙ በመሆናቸው ማከማቻው ትልቅ ሊሆን ይችላል)። ከአንድ የተወሰነ ቁርጠኝነት ጋር ብቻ የተያያዘው የዛፉ መጠን በ Git ውስጥ ባለው የሥራ ታሪክ ላይ የተመካ አይሆንም። በዚህ ሁኔታ, መጨመር እና ቀጣይ መወገድ .git ከመጨረሻው ምስል አይሰራም: ምስሉ አሁንም ተጨማሪ ንብርብር ያገኛል - ዶከር የሚሠራው በዚህ መንገድ ነው.
  3. ዶከር ከተለያዩ የስራ ዛፎች ተመሳሳይ ቁርጠኝነት እየተገነባ ቢሆንም እንኳ አላስፈላጊ መልሶ ግንባታ ሊያስጀምር ይችላል። ለምሳሌ፣ GitLab በ ውስጥ የተለያዩ የተዘጉ ማውጫዎችን ይፈጥራል /home/gitlab-runner/builds/HASH/[0-N]/yourproject በትይዩ ስብሰባ ነቅቷል. ተጨማሪ መልሶ መገንባት በማውጫው እውነታ ምክንያት ይሆናል .git በተመሳሳዩ ማከማቻ ውስጥ በተለያዩ የክሎድ ስሪቶች ውስጥ የተለየ ፣ ምንም እንኳን ተመሳሳይ ቃል ቢገነባም።

የመጨረሻው ነጥብ werf በሚጠቀሙበት ጊዜ ውጤት አለው. Werf አንዳንድ ትዕዛዞችን ሲያሄዱ አብሮ የተሰራ መሸጎጫ እንዲኖር ይፈልጋል (ለምሳሌ፡- werf deploy). እንደዚህ ያሉ ትዕዛዞችን በሚፈፀሙበት ጊዜ werf በ ውስጥ ለተገለጹት ምስሎች የመድረክ ፊርማዎችን ያሰላል werf.yaml, እና እነሱ በስብሰባው መሸጎጫ ውስጥ መሆን አለባቸው - አለበለዚያ ትዕዛዙ መስራቱን መቀጠል አይችልም. የመድረክ ፊርማ በይዘቱ ላይ የሚመረኮዝ ከሆነ .git, ከዚያ አግባብነት በሌላቸው ፋይሎች ላይ ለውጦች የማይረጋጋ መሸጎጫ እናገኛለን, እና werf እንዲህ ያለውን ቁጥጥር ይቅር ማለት አይችልም (ለተጨማሪ ዝርዝሮች, ይመልከቱ). ሰነድ).

በአጠቃላይ የተወሰኑ አስፈላጊ ፋይሎችን ብቻ ማከል በመመሪያው በኩል ADD በማንኛውም ሁኔታ የተፃፈውን ውጤታማነት እና አስተማማኝነት ይጨምራል Dockerfile, እና እንዲሁም በዚህ የተሰበሰበውን የመሸጎጫ መረጋጋት ያሻሽላል Dockerfile, በ Git ውስጥ አግባብነት የሌላቸው ለውጦች.

ውጤቱ

ለተወሰኑ ፍላጎቶች የራሳችንን ገንቢ የምንጽፍበት የመጀመሪያ መንገዳችን ከባድ፣ ሐቀኛ እና ቀጥተኛ ነበር፡ በመደበኛው Dockerfile ላይ ክራንች ከመጠቀም ይልቅ መፍትሄችንን በብጁ አገባብ ጻፍን። እና ይህ ጥቅሞቹ ነበሩት-የስታፔል ሰብሳቢው ተግባሩን በትክክል ይቋቋማል።

ነገር ግን፣ የራሳችንን ገንቢ በመጻፍ ሂደት ውስጥ፣ ለነባር Dockerfiles ድጋፍ አይተናል። አሁን ይህ ጉድለት ተስተካክሏል፣ እና ለወደፊቱ የ Dockerfile ድጋፍን ከብጁ ስታፔል ግንበኛ ጋር ለተከፋፈሉ ግንባታዎች እና Kubernetes በመጠቀም ለመገንባት አቅደናል (ማለትም በኩበርኔትስ ውስጥ ባሉ ሯጮች ላይ መገንባት ፣ በካኒኮ እንደሚደረገው)።

ስለዚህ ፣ በድንገት በዙሪያው የተኙ ሁለት Dockerfiles ካሉዎት… ሞክረው werf!

PS በርዕሱ ላይ የሰነድ ዝርዝር

በብሎጋችን ላይ ያንብቡ፡-werf - የእኛ መሳሪያ ለ CI / ሲዲ በኩበርኔትስ (አጠቃላይ እይታ እና የቪዲዮ ዘገባ)».

ምንጭ: hab.com

አስተያየት ያክሉ