ቪኤም ወይስ ዶከር?

VM ሳይሆን ዶከር እንደሚያስፈልግህ እንዴት መረዳት ይቻላል? በትክክል ምን ማግለል እንደሚፈልጉ መወሰን ያስፈልግዎታል. ዋስትና የተሰጣቸው ሀብቶች እና ምናባዊ ሃርድዌር ያለው ስርዓትን ማግለል ከፈለጉ ምርጫው በቪኤም ላይ ይወድቃል። አሂድ ትግበራዎችን እንደ የተለየ የስርዓት ሂደቶች ማግለል ከፈለጉ Docker ያስፈልግዎታል።

ስለዚህ በ Docker ኮንቴይነሮች እና ቪኤምዎች መካከል ያለው ልዩነት ምንድን ነው?

ምናባዊ ማሽን (VM) ሁሉም ቨርቹዋል መሳሪያዎች እና ቨርቹዋል ሃርድ ዲስክ ያለው ቨርቹዋል ኮምፒውተር ሲሆን በላዩ ላይ አዲስ ራሱን የቻለ ኦኤስ ከቨርቹዋል መሳሪያ ሾፌሮች፣ ማህደረ ትውስታ አስተዳደር እና ሌሎች አካላት ጋር የተጫነ። ማለትም፣ በአንድ ኮምፒዩተር ላይ ብዙ ቨርቹዋል ኮምፒውተሮችን እንዲያሄዱ የሚያስችልዎትን የአካላዊ ሃርድዌር ማጠቃለያ እናገኛለን።
የተጫነ ቪኤም በተለያዩ መንገዶች የዲስክ ቦታ ሊወስድ ይችላል፡-

  • ወደ ቨርቹዋል ሃርድ ዲስክ በፍጥነት ለመድረስ እና የፋይል መከፋፈልን የሚከላከል ቋሚ የሃርድ ዲስክ ቦታ;
  • ተለዋዋጭ ማህደረ ትውስታ ምደባ. ተጨማሪ አፕሊኬሽኖችን በሚጭኑበት ጊዜ የማህደረ ትውስታው ከፍተኛ መጠን እስኪደርስ ድረስ በተለዋዋጭ መንገድ ይመደብላቸዋል።

በአገልጋዩ ላይ ብዙ ቨርቹዋል ማሽኖች፣ ብዙ ቦታ ይወስዳሉ፣ እና መተግበሪያዎ እንዲሰራ የሚያስፈልገው የአካባቢ የማያቋርጥ ድጋፍ ይፈልጋሉ።

Docker በመያዣዎች ላይ የተመሰረተ አፕሊኬሽኖችን ለመገንባት ሶፍትዌር ነው. ኮንቴይነሮች እና ምናባዊ ማሽኖች ተመሳሳይ ጥቅሞች አሏቸው, ግን በተለየ መንገድ ይሰራሉ. ኮንቴይነሮች ትንሽ ቦታ ይወስዳሉ, ምክንያቱም ከቪኤም የበለጠ የተጋሩ የአስተናጋጅ ስርዓቱን ሀብቶች ከልክ በላይ መጠቀም፣ ምክንያቱም እንደ VM ሳይሆን በስርዓተ ክወና ደረጃ ቨርቹዋልነትን ያቀርባል። ይህ አካሄድ አነስተኛ የማህደረ ትውስታ አሻራ፣ ፈጣን ማሰማራት እና ቀላል ልኬትን ይሰጣል።

መያዣው ለአስተናጋጁ ስርዓት አስፈላጊ የሆኑትን መገናኛዎች በማቅረብ አፕሊኬሽኖችን ለማሸግ የበለጠ ውጤታማ ዘዴን ያቀርባል. ይህ ባህሪ ኮንቴይነሮች የስርዓቱን ዋና አካል እንዲያካፍሉ ያስችላቸዋል, እያንዳንዱ ኮንቴይነሮች እንደ ዋና ስርዓተ ክወና እንደ የተለየ ሂደት የሚሄዱበት, የራሱ የማስታወሻ ቦታዎች (የራሱ ምናባዊ አድራሻ ቦታ) አለው. የእያንዲንደ ኮንቴይነር ቨርቹዋል የአድራሻ ቦታ የራሱ ስሇሆነ የተሇያዩ የማስታወሻ ቦታዎች ንብረት የሆኑ መረጃዎችን መቀየር አይቻሌም።
የዶከር ቤተኛ ስርዓተ ክወና ሊኑክስ ነው (ዶከር በዊንዶውስ እና ማክኦኤስ ላይም ጥቅም ላይ ሊውል ይችላል) ዋና ጥቅሞቹን ይጠቀማል ፣ ይህም የተከፈለ ከርነል እንዲያደራጅ ያስችለዋል። የዶከር ኮንቴይነሮች በዊንዶውስ መጀመር የሚከናወነው በሊኑክስ ቨርቹዋል ማሽን ውስጥ ነው። ኮንቴይነሮች የአስተናጋጅ ስርዓቱን ስርዓተ ክወና ይጋራሉ እና ለእነሱ ዋናው ስርዓተ ክወና ሊኑክስ ነው።

መያዣ - እንዴት ነው የሚሰራው?

ኮንቴይነር ኮድ እና ጥገኞችን የሚያጣምር በመተግበሪያ ደረጃ ላይ ያለ ረቂቅ ነው። ኮንቴይነሮች ሁልጊዜ ከምስሎች የተፈጠሩ ናቸው, ሊፃፍ የሚችል የላይኛው ሽፋን በመጨመር እና የተለያዩ መለኪያዎችን ያስጀምራሉ. ኮንቴይነሩ የራሱ የሆነ የመፃፍ ንብርብር ስላለው እና ሁሉም ለውጦች በዚያ ንብርብር ውስጥ ስለሚቀመጡ፣ ብዙ መያዣዎች ለተመሳሳይ ዋና ምስል መዳረሻን መጋራት ይችላሉ።

እያንዳንዱ ኮንቴይነር በዋናው መፍትሄ, docker-compose.yml ውስጥ በተካተተ ዶከር-ኮምፖዝ ፕሮጀክት ውስጥ በፋይል ሊዋቀር ይችላል. እዚያ እንደ የመያዣ ስም ፣ ወደቦች ፣ መለያዎች ፣ የንብረት ገደቦች ፣ በሌሎች ኮንቴይነሮች መካከል ያሉ ጥገኞችን የመሳሰሉ የተለያዩ መለኪያዎችን ማዘጋጀት ይችላሉ ። በቅንብሮች ውስጥ የመያዣ ስም ካልገለጹ Docker በእያንዳንዱ ጊዜ አዲስ ኮንቴይነር ይፈጥራል, ስሙን በዘፈቀደ ይመድባል.

ኮንቴይነሩ ከምስል ሲጀመር ዶከር የማንበብ/የመፃፍ ፋይል ስርዓቱን ከታች ባሉት ንብርብሮች ላይ ይጭናል። የእኛ Docker ኮንቴይነር እንዲሠራ የምንፈልጋቸው ሁሉም ሂደቶች የሚሄዱት እዚህ ነው።

ዶከር መጀመሪያ ኮንቴነር ሲጀምር የመጀመርያው የማንበብ/የመፃፍ ንብርብር ባዶ ነው። ለውጦች በሚከሰቱበት ጊዜ, በዚያ ንብርብር ላይ ይተገበራሉ; ለምሳሌ ፋይልን ማሻሻል ከፈለጉ ያ ፋይል ከታች ካለው ተነባቢ-ብቻ ንብርብር ወደ አንባቢ ፃፍ ንብርብር ይገለበጣል።
የፋይሉ ተነባቢ-ብቻ ስሪት አሁንም ይኖራል፣ አሁን ግን በቅጂው ስር ተደብቋል። የእቃው የህይወት ዑደት ምንም ይሁን ምን, ጥራዞች ውሂብን ለማከማቸት ያገለግላሉ. ጥራዞች የሚጀምሩት መያዣ በሚፈጠርበት ጊዜ ነው.

ምስሉ ከእቃ መያዣው ጋር እንዴት ይዛመዳል?

ምስል - ለእያንዳንዱ መያዣ ዋናው አካል. ምስሉ የተፈጠረው በፕሮጀክቱ ውስጥ ከተጨመረው ዶከርፋይል ነው እና የፋይል ስርዓቶች (ንብርብሮች) እርስ በእርሳቸው ላይ ተደራራቢ እና በቡድን ተደራጅተው ለንባብ ብቻ ይገኛሉ; ከፍተኛው የንብርብሮች ብዛት 127 ነው።

በእያንዳንዱ ምስል ልብ ውስጥ የመሠረት ምስል አለ, እሱም በ FROM ትዕዛዝ - የመግቢያ ነጥቡ Dockerfile ምስል ሲያመነጭ. እያንዳንዱ ንብርብር ተነባቢ ብቻ ነው እና የፋይል ስርዓቱን በሚያስተካክል በአንድ ትእዛዝ ነው የሚወከለው በ Dockerfile ውስጥ።
እነዚህን ንብርብሮች ወደ አንድ ምስል ለማጣመር ዶከር የላቀ ባለ ብዙ ሽፋን ዩኒየን የፋይል ስርዓትን ይጠቀማል (AuFS በ UnionFS አናት ላይ ነው የተሰራው)፣ ከተለያዩ የፋይል ንብርብሮች የመጡ የተለያዩ ፋይሎች እና ዳይሬክተሮች በግልፅ እንዲደራረቡ እና ተዛማጅ የፋይል ስርዓት እንዲፈጥሩ ያስችላቸዋል።

ንብርብሮች ስለ እያንዳንዱ ሽፋን በሂደት ጊዜ እና በግንባታ ጊዜ ተዛማጅ መረጃዎችን እንዲያከማቹ የሚያስችልዎ ሜታዳታ ይይዛሉ። እያንዳንዱ ሽፋን ወደ ቀጣዩ ንብርብር የሚወስድ አገናኝ ይዟል, ንብርብሩ ምንም ግንኙነት ከሌለው, ይህ በምስሉ ውስጥ ከፍተኛው ንብርብር ነው.

ዶከርፋይል እንደሚከተሉት ያሉ ትዕዛዞችን ሊይዝ ይችላል፡-

  • ከ - በምስሉ ምስረታ ውስጥ የመግቢያ ነጥብ;
  • ማቆየት - የምስሉ ባለቤት ስም;
  • RUN - በምስል ስብሰባ ወቅት የትእዛዝ አፈፃፀም;
  • አክል - የአስተናጋጁን ፋይል ወደ አዲስ ምስል መቅዳት ፣ የዩአርኤል ፋይልን ከገለጹ Docker ወደተገለጸው ማውጫ ያወርዳል ፣
  • ENV - የአካባቢ ተለዋዋጮች;
  • CMD - በምስሉ ላይ የተመሰረተ አዲስ መያዣ መፍጠር ይጀምራል;
  • የመግቢያ ነጥብ - ትዕዛዙ የሚከናወነው መያዣው ሲጀመር ነው.
  • WORKDIR የCMD ትዕዛዙን ለማስፈጸም የስራ ማውጫ ነው።
  • USER - UID ን ከምስሉ ለተፈጠረው መያዣ ያዘጋጃል።
  • ድምጽ - የአስተናጋጅ ማውጫውን ወደ መያዣው ይጭናል.
  • EXPOSE በመያዣው ውስጥ የሚደመጥ ወደቦች ስብስብ ነው።

UnionFS እንዴት ነው የሚሰራው?

UnionFS - የአገልግሎት ቁልል ፋይል ስርዓት (FS) ለሊኑክስ እና ለ FreeBSD። ይህ FS የመፃፍ ላይ ቅጅ (ኮፒ-ላይ-ጻፍ፣ COW) ዘዴን ተግባራዊ ያደርጋል። የUnionFS የስራ ክፍል ንብርብር ነው፣ እያንዳንዱ ሽፋን እንደ የተለየ ሙሉ የፋይል ስርዓት ከሥሩ የማውጫ ተዋረድ ጋር መቆጠር አለበት። ዩኒየንኤፍኤስ ለሌሎች የፋይል ሲስተሞች የዩኒየን ተራራን ይፈጥራል እና ከተለያዩ የፋይል ሲስተሞች (ቅርንጫፎች ተብለው የሚጠሩት) ፋይሎችን እና ማውጫዎችን በግልፅ ለተጠቃሚው ግልጽ በሆነ መልኩ ወደ አንድ የተገናኘ የፋይል ስርዓት እንዲያዋህዱ ይፈቅድልዎታል።

ተመሳሳይ ዱካዎች ያላቸው የማውጫ ይዘቶች በአንድ ላይ በተፈጠረው የፋይል ስርዓት በአንድ ጥምር ማውጫ (በተመሳሳይ የስም ቦታ) ውስጥ ይታያሉ።

UnionFS በሚከተሉት መርሆዎች ላይ በመመስረት ንብርብሮችን ያጣምራል፡

  • ከንብርብሮች አንዱ የላይኛው ደረጃ ንብርብር ይሆናል, ሁለተኛው እና ተከታይ ንብርብሮች ዝቅተኛ-ደረጃ ንብርብሮች ይሆናሉ;
  • የንብርብሮች እቃዎች ለተጠቃሚው "ከላይ ወደ ታች" ተደራሽ ናቸው, ማለትም. የተጠየቀው ነገር በ "የላይኛው" ንብርብር ውስጥ ከሆነ, በ "ታችኛው" ንብርብር ውስጥ ተመሳሳይ ስም ያለው ነገር ቢኖርም, ተመልሶ ይመለሳል; አለበለዚያ "የታችኛው" ንብርብር ነገር ይመለሳል; የተጠየቀው ነገር እዚያም ሆነ እዚያ ከሌለ ስህተቱ "እንዲህ ያለ ፋይል ወይም ማውጫ የለም" አልተመለሰም;
  • የሚሠራው ንብርብር “ከላይ” ነው ፣ ማለትም ፣ ሁሉም የተጠቃሚ እርምጃዎች መረጃን ለመለወጥ የሚደረጉት በከፍተኛ ደረጃ ንብርብር ላይ ብቻ ነው ፣ የታችኛው ደረጃ ንብርብሮች ይዘቶች ላይ ተጽዕኖ ሳያደርጉ።

ዶከር በመተግበሪያ ሥራ ውስጥ መያዣዎችን ለመጠቀም በጣም የተለመደ ቴክኖሎጂ ነው. በሊኑክስ ከርነል በተሰጡት ስብስቦች እና የስም ቦታዎች ላይ በመገንባት በዚህ አካባቢ ደረጃው ሆኗል.

Docker ኦኤስ ከርነልን በሁሉም ኮንቴይነሮች መካከል በማካፈል እንደ የተለየ የስርዓተ ክወና ሂደት በመሮጥ አፕሊኬሽኖችን በፍጥነት እንድናሰማራ እና የፋይል ስርዓቱን በተሻለ ሁኔታ እንድንጠቀም ያስችለናል።

ምንጭ: hab.com

አስተያየት ያክሉ