Isticmaalka docker-ka marxalado badan si loo dhiso sawirada daaqadaha

Salaamu calaykum! Magacaygu waa Andrey, waxaanan u shaqeeyaa sidii Injineer DevOps ah Exness kooxda horumarinta. Hawshayda ugu weyni waxay la xidhiidhaa dhisidda, geynta iyo taageeridda codsiyada docker ee hoos yimaada nidaamka hawlgalka Linux (halkan ka dibna loo yaqaan OS). Muddo aan fogayn waxaan haystay hawlo isku mid ah, laakiin bartilmaameedka OS ee mashruuca wuxuu ahaa Windows Server iyo mashruucyo C ++ ah. Aniga ahaan, tani waxay ii ahayd is dhexgalka ugu dhow ee weelasha docker ee hoos yimaada Windows OS iyo, guud ahaan, codsiyada C++. Mahadsanid tan, waxaan lahaa waayo-aragnimo xiiso leh oo aan wax ka bartay qaar ka mid ah qallafsanaanta codsiyada weelka ee Windows.

Isticmaalka docker-ka marxalado badan si loo dhiso sawirada daaqadaha

Maqaalkan waxaan rabaa in aan kuu sheego dhibaatooyinka aan la kulmay iyo sida aan ugu suurtagashay in aan xaliyo. Waxaan rajeynayaa in tani ay waxtar u leedahay caqabadahaaga hadda iyo mustaqbalka. Ku raaxayso akhriska!

Waa maxay sababta weelka?

Shirkaddu waxay haysaa kaabayaal jira oo loogu talagalay abaabulaha weelka Hashicorp Nomad iyo qaybaha la xidhiidha - Qunsulka iyo Vault. Sidaa darteed, weelka codsiga waxaa loo doortay hab midaysan oo lagu gaarsiinayo xal dhamaystiran. Maadaama kaabayaasha mashruuca ay ka kooban yihiin docker hosts oo wata Windows Server Core OS versions 1803 iyo 1809, waxaa lagama maarmaan ah in la dhiso noocyo kala duwan oo ah sawirada docker 1803 iyo 1809. Nooca 1803, waxaa muhiim ah in la xasuusto in nambarka dib u eegista ee dhismaha docker host host waa in uu la mid noqdaa nambarka dib u eegista ee sawirka docker-ka saldhiga iyo martigeliyaha meesha weelka sawirkan laga soo daabici doono. Nooca 1809 ma laha cillad noocaas ah. Wax badan ayaad akhrin kartaa halkan.

Waa maxay sababta marxalado badan?

Injineerada kooxda horumarinta ma haystaan ​​ama aad u xaddidan helitaan ay ku dhistaan ​​martigeliyaha; ma jirto si dhakhso ah loo maareeyo qaybaha loogu talagalay dhisidda codsiga martigeliyayaashan, tusaale ahaan, ku rakib qalab dheeri ah ama culeys shaqo oo loogu talagalay Studio-ga Visual. Sidaa darteed, waxaanu go'aansanay inaanu ku rakibno dhammaan qaybaha lagama maarmaanka u ah in lagu dhiso codsiga dhismaha dhismaha Docker. Haddii loo baahdo, waxaad si dhakhso ah u beddeli kartaa oo keliya dockerfile oo aad bilaabi kartaa dhuumaha si aad u abuurto sawirkan.

Laga soo bilaabo aragti ilaa ficil

Docker-ku-dhis muuqaal leh oo heer-sare ah, deegaanka lagu dhisayo arjiga waxaa lagu diyaariyaa isla qoraalka Dockerfile sida codsiga laftiisa loo dhisay. Laakiin kiiskeena, isku xirka dhexe ayaa lagu daray, kaas oo ah, tallaabada hordhaca ah ee abuurista sawirka docker oo leh wax kasta oo lagama maarmaanka u ah in la dhiso codsiga. Tan waxaa la sameeyay sababtoo ah waxaan rabay inaan isticmaalo qaabka kaydka docker si loo yareeyo wakhtiga rakibida dhammaan ku tiirsanaanta.

Aynu eegno qodobada ugu muhiimsan ee qoraalka dockerfile si loo abuuro sawirkan.

Si aad u abuurto sawirro noocyo OS ah oo kala duwan, waxaad ku qeexi kartaa dood ku jirta dockerfile kaas oo nambarka nooca la mariyo inta lagu jiro dhismaha, iyo sidoo kale waa summada sawirka salka.

Liis dhamaystiran oo ah sumadaha sawirka Microsoft Windows Server ayaa la heli karaa halkan.

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

By default amarada ku jira tilmaamaha RUN gudaha dockerfile-ka Windows OS waxaa lagu fuliyay kumbuyuutarka cmd.exe. Si ay ugu habboonaato qorista qoraallada iyo ballaarinta shaqada amarada la isticmaalo, waxaan dib u qeexi doonaa qalabka fulinta amarka ee Powershell iyada oo loo marayo tilmaanta SHELL.

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

Talaabada xigta waa in la rakibo maamulaha xirmada shukulaatada iyo xirmooyinka lagama maarmaanka ah:

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'

Si aad u rakibto baakadaha adigoo isticmaalaya shukulaatada, waxaad si fudud ugu gudbin kartaa liis ahaan, ama waxaad ku rakibi kartaa hal mar haddii aad u baahan tahay inaad ka gudubto cabbirro gaar ah xirmo kasta. Xaaladeena, waxaanu isticmaalnay faylka cad ee qaabka XML, kaas oo ka kooban liiska xirmooyinka loo baahan yahay iyo xuduudahooda. Waxa ku jira ayaa u eg sidan:

<?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>

Marka xigta, waxaan ku rakibnaa deegaanka dhisitaanka codsiga, oo ah, MS Build Tools 2019 - kani waa nooc fudud oo Visual Studio 2019 ah, kaas oo ka kooban qaybaha ugu yar ee loo baahan yahay ee ururinta koodka.
Si aan si buuxda ugu shaqayno mashruucayaga C++, waxaanu u baahan doonaa qaybo dheeraad ah, oo kala ah:

  • Culayska shaqada ee C++
  • Qalabka v141
  • Windows 10 SDK (10.0.17134.0)

Waxaad si toos ah ugu rakibi kartaa qalabyo la fidiyay adigoo isticmaalaya faylka qaabeynta ee qaabka JSON. Waxa ku jira faylka qaabaynta:

Liis dhamaystiran oo ah qaybaha la heli karo ayaa laga heli karaa goobta dukumeentigu 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"
  ]
}

Dockerfile-ku waxa uu wadaa qoraalka rakibaadda, si ay ugu habboonaato, waxa uu ku darayaa dariiqa loo maro qalabka lagu dhisayo faylalka la fulin karo doorsoomiyaha deegaanka PATH. Waxa kale oo lagu talinayaa in meesha laga saaro faylasha iyo hagayaasha aan loo baahnayn si loo yareeyo xajmiga sawirka.

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)

Marxaladdan, sawirkayaga soo ururinta codsiga C++ waa diyaar, waxaanan si toos ah ugu socon karnaa abuurista qalab-dhismeed heerar badan oo codsiga ah.

Marxalad badan oo ficil ah

Waxaan u isticmaali doonaa sawirka la sameeyay oo ay la socdaan dhammaan agabka saaran markabka sidii sawir dhisme. Sida qoraalkii hore ee dockerfile, waxaanu ku dari doonaa awooda si firfircoon loo qeexo nambarka nooca/muuqaalka summada si loo fududeeyo dib-u-isticmaalka koodka. Waa muhiim in lagu daro calaamad as builder ilaa sawirka shirka ee tilmaamaha FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

Hadda waa waqtigii la dhisi lahaa codsiga. Wax kasta oo halkan ku yaal aad bay u fudud yihiin: nuqul ka samee koodhka isha iyo wax kasta oo la xidhiidha, oo bilow habka isku-darka.

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

Marxaladda ugu dambeysa ee abuurista sawirka kama dambaysta ah waa in la caddeeyo sawirka saldhigga ah ee codsiga, halkaas oo dhammaan agabka la isku dubariday iyo faylasha qaabeynta ay ku yaalliin. Si aad u nuqul ka sameysid faylasha la soo ururiyey ee sawirka isu-tagga dhexe, waa in aad qeexdaa cabbirka --from=builder ee tilmaamaha COPY.

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

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

Hadda waxa hadhay oo dhan waa in lagu daro ku tiirsanaanta lagama maarmaanka u ah codsigeena si uu u shaqeeyo oo aan u qeexno amarka bilaabista habraaca ENTRYPOINT ama CMD.

gunaanad

Maqaalkan, waxaan ka hadlay sida loo abuuro jawi isku dhafan oo buuxa oo loogu talagalay codsiyada C ++ ee ku jira weelka hoostiisa Windows iyo sida loo isticmaalo awoodaha dhismooyinka heerar badan ee docker si loo abuuro sawirro buuxa oo codsi ah.

Source: www.habr.com

Add a comment