የመስኮቶች ምስሎችን ለመገንባት ዶከር ባለብዙ ደረጃን በመጠቀም

ሰላም ሁላችሁም! ስሜ አንድሬ ነው፣ እና በልማት ቡድን ውስጥ በኤክስነስ የዴቭኦፕስ መሐንዲስ ሆኜ እሰራለሁ። ዋና ስራዬ በሊኑክስ ኦፕሬቲንግ ሲስተም (ከዚህ በኋላ OS እየተባለ ይጠራል) በዶክተር ውስጥ አፕሊኬሽኖችን ከመገንባት፣ ከማሰማራት እና ከመደገፍ ጋር የተያያዘ ነው። ብዙም ሳይቆይ ከተመሳሳይ እንቅስቃሴዎች ጋር አንድ ተግባር ነበረኝ, ነገር ግን የፕሮጀክቱ ዒላማ OS ዊንዶውስ አገልጋይ እና የ C ++ ፕሮጀክቶች ስብስብ ነበር. ለእኔ፣ ይህ በዊንዶውስ ኦኤስ ስር ከዶከር ኮንቴይነሮች ጋር እና በአጠቃላይ ከC++ መተግበሪያዎች ጋር የመጀመሪያው የቅርብ መስተጋብር ነበር። ለዚህም ምስጋና ይግባውና አንድ አስደሳች ተሞክሮ ነበረኝ እና በዊንዶውስ ውስጥ ስለ አንዳንድ የመያዣ አፕሊኬሽኖች ውስብስብ ነገሮች ተማርኩ።

የመስኮቶች ምስሎችን ለመገንባት ዶከር ባለብዙ ደረጃን በመጠቀም

በዚህ ጽሑፍ ውስጥ ምን ችግሮች እንዳጋጠሙኝ እና እንዴት መፍታት እንደቻልኩ ልነግርዎ እፈልጋለሁ. ይህ ለአሁኑ እና ለወደፊቱ ፈተናዎችዎ ጠቃሚ እንደሚሆን ተስፋ አደርጋለሁ። በማንበብ ይደሰቱ!

ለምን መያዣዎች?

ኩባንያው ለ Hashicorp Nomad ኮንቴይነር ኦርኬስትራ እና ተዛማጅ አካላት - ቆንስል እና ቮልት ነባር መሠረተ ልማት አለው። ስለዚህ የመተግበሪያ መያዣ (ኮንቴይነር) የተሟላ መፍትሄ ለማቅረብ እንደ አንድ ወጥ ዘዴ ተመርጧል. የፕሮጀክት መሠረተ ልማት ዶከር አስተናጋጆችን ከዊንዶውስ አገልጋይ ኮር ኦኤስ ስሪቶች 1803 እና 1809 ጋር ስላላቸው ለ 1803 እና 1809 የዶክተር ምስሎችን የተለያዩ ስሪቶች መገንባት አስፈላጊ ነው ። በስሪት 1803 ፣ የግንባታ ዶከር አስተናጋጅ የክለሳ ቁጥር መሆኑን ማስታወስ አስፈላጊ ነው ። ከመሠረት ዶከር ምስል እና ከዚህ ምስል ውስጥ ያለው መያዣ ከሚነሳበት አስተናጋጅ ጋር መዛመድ አለበት። ስሪት 1809 እንደዚህ አይነት ችግር የለውም. የበለጠ ማንበብ ትችላለህ እዚህ.

ለምን ባለብዙ ደረጃ?

የልማት ቡድን መሐንዲሶች አስተናጋጆችን ለመገንባት ምንም ወይም በጣም የተገደበ መዳረሻ የላቸውም፤ በእነዚህ አስተናጋጆች ላይ መተግበሪያን ለመገንባት የሚያስፈልጉትን ክፍሎች በፍጥነት ለማስተዳደር ምንም መንገድ የለም፣ ለምሳሌ ለቪዥዋል ስቱዲዮ ተጨማሪ የመሳሪያ ስብስብ ወይም የስራ ጫና ይጫኑ። ስለዚህ, አፕሊኬሽኑን ወደ ግንባታ ዶከር ምስል ለመገንባት አስፈላጊ የሆኑትን ሁሉንም ክፍሎች ለመጫን ወስነናል. አስፈላጊ ከሆነ, በፍጥነት የዶክ ፋይልን ብቻ መቀየር እና ይህን ምስል ለመፍጠር የቧንቧ መስመርን ማስጀመር ይችላሉ.

ከቲዎሪ ወደ ተግባር

ሃሳባዊ ዶከር ባለ ብዙ ደረጃ ምስል ግንባታ፣ አፕሊኬሽኑን የሚገነባበት አካባቢ አፕሊኬሽኑ ራሱ እንደተገነባ በተመሳሳይ Dockerfile ስክሪፕት ተዘጋጅቷል። ግን በእኛ ሁኔታ ፣ መካከለኛ አገናኝ ተጨምሯል ፣ ማለትም ፣ አፕሊኬሽኑን ለመገንባት አስፈላጊ ከሆኑት ነገሮች ሁሉ ጋር የዶክተር ምስል የመፍጠር የመጀመሪያ ደረጃ። ይህ የተደረገው የሁሉንም ጥገኛዎች የመጫኛ ጊዜ ለመቀነስ የዶክ መሸጎጫ ባህሪን ለመጠቀም ስለፈለግሁ ነው።

ይህንን ምስል ለመፍጠር የዶክ ፋይል ስክሪፕት ዋና ዋና ነጥቦችን እንመልከት።

የተለያዩ የስርዓተ ክወና ስሪቶች ምስሎችን ለመፍጠር ፣ በግንባታው ወቅት የስሪት ቁጥሩ የሚያልፍበት በዶክ ፋይል ውስጥ ክርክርን መግለፅ ይችላሉ ፣ እና እሱ የመሠረት ምስል መለያ ነው።

የተሟላ የማይክሮሶፍት ዊንዶውስ አገልጋይ ምስል መለያዎች ዝርዝር ሊገኝ ይችላል። እዚህ.

ARG WINDOWS_OS_VERSION=1809
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION

በመመሪያው ውስጥ ያሉት ትዕዛዞች በነባሪ RUN በዊንዶውስ ኦኤስ ላይ በዶክተር ፋይል ውስጥ በ cmd.exe ኮንሶል ውስጥ ይከናወናሉ. ስክሪፕቶችን ለመጻፍ እና ጥቅም ላይ የዋሉትን የትእዛዞችን ተግባራዊነት ለማስፋት በPowershell ውስጥ ያለውን የትእዛዝ ማስፈጸሚያ ኮንሶል በመመሪያው በኩል እንደገና እንገልፃለን። SHELL.

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]

ቀጣዩ ደረጃ የቸኮሌት ጥቅል አስተዳዳሪን እና አስፈላጊዎቹን ፓኬጆችን መጫን ነው-

COPY chocolatey.pkg.config .
RUN Set-ExecutionPolicy Bypass -Scope Process -Force ;
    [System.Net.ServicePointManager]::SecurityProtocol = 
    [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 ;
    $env:chocolateyUseWindowsCompression = 'true' ;
    iex ((New-Object System.Net.WebClient).DownloadString( 
      'https://chocolatey.org/install.ps1')) ;
    choco install chocolatey.pkg.config -y --ignore-detected-reboot ;
    if ( @(0, 1605, 1614, 1641, 3010) -contains $LASTEXITCODE ) { 
      refreshenv; } else { exit $LASTEXITCODE; } ;
    Remove-Item 'chocolatey.pkg.config'

ቸኮሌትን በመጠቀም ፓኬጆችን ለመጫን በቀላሉ እንደ ዝርዝር ማለፍ ወይም ለእያንዳንዱ ጥቅል ልዩ መለኪያዎችን ማለፍ ከፈለጉ አንድ በአንድ መጫን ይችላሉ። በእኛ ሁኔታ, አስፈላጊ የሆኑ ፓኬጆችን እና መመዘኛዎቻቸውን የያዘውን አንጸባራቂ ፋይል በኤክስኤምኤል ቅርጸት ተጠቀምን. ይዘቱ ይህን ይመስላል።

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="python" version="3.8.2"/>
  <package id="nuget.commandline" version="5.5.1"/>
  <package id="git" version="2.26.2"/>
</packages>

በመቀጠል፣ የመተግበሪያ ግንባታ አካባቢን እንጭነዋለን፣ ማለትም፣ MS Build Tools 2019 - ይህ ቀላል ክብደት ያለው ቪዥዋል ስቱዲዮ 2019 ስሪት ነው፣ እሱም ኮድ ለማጠናቀር የሚያስፈልጉትን አነስተኛ ክፍሎች የያዘ።
ከC++ ፕሮጄክታችን ጋር ሙሉ በሙሉ ለመስራት ተጨማሪ አካላት ያስፈልጉናል፡-

  • የስራ ጫና C ++ መሳሪያዎች
  • የመሳሪያ ስብስብ v141
  • ዊንዶውስ 10 ኤስዲኬ (10.0.17134.0)

በJSON ቅርጸት የማዋቀሪያ ፋይልን በመጠቀም የተራዘመ የመሳሪያዎች ስብስብ በራስ-ሰር መጫን ይችላሉ። የማዋቀር ፋይል ይዘቶች፡-

የሚገኙትን ክፍሎች ሙሉ ዝርዝር በሰነድ ጣቢያው ላይ ማግኘት ይቻላል Microsoft Visual Studio.

{
  "version": "1.0",
  "components": [
    "Microsoft.Component.MSBuild",
    "Microsoft.VisualStudio.Workload.VCTools;includeRecommended",
    "Microsoft.VisualStudio.Component.VC.v141.x86.x64",
    "Microsoft.VisualStudio.Component.Windows10SDK.17134"
  ]
}

ዶክ ፋይሉ የመጫኛ ስክሪፕቱን ያካሂዳል፣ እና ለመመቻቸት፣ የግንባታ መሳሪያዎችን የሚተገበሩ ፋይሎችን ወደ አካባቢው ተለዋዋጭ መንገዱን ይጨምራል። PATH. እንዲሁም የምስሉን መጠን ለመቀነስ አላስፈላጊ ፋይሎችን እና ማውጫዎችን ማስወገድ ተገቢ ነው.

COPY buildtools.config.json .
RUN Invoke-WebRequest 'https://aka.ms/vs/16/release/vs_BuildTools.exe' 
      -OutFile '.vs_buildtools.exe' -UseBasicParsing ;
    Start-Process -FilePath '.vs_buildtools.exe' -Wait -ArgumentList 
      '--quiet --norestart --nocache --config C:buildtools.config.json' ;
    Remove-Item '.vs_buildtools.exe' ;
    Remove-Item '.buildtools.config.json' ;
    Remove-Item -Force -Recurse 
      'C:Program Files (x86)Microsoft Visual StudioInstaller' ;
    $env:PATH = 'C:Program Files (x86)Microsoft Visual Studio2019BuildToolsMSBuildCurrentBin;' + $env:PATH; 
    [Environment]::SetEnvironmentVariable('PATH', $env:PATH, 
      [EnvironmentVariableTarget]::Machine)

በዚህ ደረጃ፣ የC++ አፕሊኬሽኑን ለማጠናቀር ምስላችን ዝግጁ ነው፣ እና በቀጥታ ወደ ዶክተር ባለ ብዙ ደረጃ የመተግበሪያ ግንባታ መቀጠል እንችላለን።

ባለብዙ-ደረጃ በተግባር

የተፈጠረውን ምስል በቦርዱ ላይ ካሉ መሳሪያዎች ሁሉ ጋር እንደ የግንባታ ምስል እንጠቀማለን። እንደ ቀደመው ዶከርፋይል ስክሪፕት፣ ኮድ መልሶ ለመጠቀም ቀላል እንዲሆን የስሪት ቁጥር/ምስል መለያን በተለዋዋጭ የመግለጽ ችሎታን እንጨምራለን። መለያ ማከል አስፈላጊ ነው as builder በመመሪያው ውስጥ ወደ ስብሰባው ምስል FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

መተግበሪያውን ለመገንባት ጊዜው አሁን ነው። እዚህ ሁሉም ነገር በጣም ቀላል ነው-የምንጩን ኮድ እና ከእሱ ጋር የተያያዙትን ሁሉ ይቅዱ እና የማጠናቀር ሂደቱን ይጀምሩ.

COPY myapp .
RUN nuget restore myapp.sln ;
    msbuild myapp.sln /t:myapp /p:Configuration=Release

የመጨረሻውን ምስል ለመፍጠር የመጨረሻው ደረጃ የመተግበሪያውን መሰረታዊ ምስል መግለጽ ነው, ሁሉም የተቀናጁ ቅርሶች እና የውቅረት ፋይሎች የሚገኙበት ቦታ. የተሰባሰቡ ፋይሎችን ከመካከለኛው የመሰብሰቢያ ምስል ለመቅዳት ልኬቱን መግለጽ አለብዎት --from=builder በመመሪያው ውስጥ COPY.

FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION

COPY --from=builder C:/x64/Release/myapp/ ./
COPY ./configs ./

አሁን የቀረው ለትግበራችን አስፈላጊ የሆኑትን ጥገኞች ማከል እና በመመሪያው በኩል የማስጀመሪያውን ትዕዛዝ መግለጽ ብቻ ነው። ENTRYPOINT ወይም CMD.

መደምደሚያ

በዚህ ጽሑፍ ውስጥ በዊንዶውስ ስር ባለው ኮንቴይነር ውስጥ ለ C++ አፕሊኬሽኖች የተሟላ የማጠናቀር አካባቢን እንዴት መፍጠር እንደሚቻል እና የመተግበሪያችን ሙሉ ምስሎችን ለመፍጠር የዶክተር ባለብዙ ደረጃ ግንባታዎችን አቅም እንዴት መጠቀም እንደሚቻል ተናግሬያለሁ።

ምንጭ: hab.com

አስተያየት ያክሉ