A’ cleachdadh docker ioma-ìre gus ìomhaighean uinneagan a thogail

Hi uile! Is e m’ ainm Andrey, agus tha mi ag obair mar innleadair DevOps aig Exness anns an sgioba leasachaidh. Tha mo phrìomh ghnìomhachd co-cheangailte ri togail, cleachdadh agus taic a thoirt do thagraidhean ann an docker fo shiostam obrachaidh Linux (ris an canar an OS an-seo). Chan eil fada air ais bha obair agam leis na h-aon ghnìomhachdan, ach b’ e Windows Server agus seata de phròiseactan C ++ an targaid OS den phròiseact. Dhòmhsa, b’ e seo a’ chiad eadar-obrachadh dlùth le soithichean docker fo Windows OS agus, san fharsaingeachd, le tagraidhean C ++. Taing dha seo, bha eòlas inntinneach agam agus dh’ ionnsaich mi mu chuid de cho duilich ‘s a tha e a bhith a’ stòradh thagraidhean ann an Windows.

A’ cleachdadh docker ioma-ìre gus ìomhaighean uinneagan a thogail

San artaigil seo tha mi airson innse dhut dè na duilgheadasan a bh ’agam agus mar a fhuair mi air am fuasgladh. Tha mi an dòchas gum bi seo cuideachail airson na dùbhlain a th’ agad an-dràsta agus san àm ri teachd. Faigh tlachd bho leughadh!

Carson a tha soithichean?

Tha bun-structar aig a’ chompanaidh mar-thà airson orchestrator container Hashicorp Nomad agus pàirtean co-cheangailte ris - Consul and Vault. Mar sin, chaidh còmhdach tagraidh a thaghadh mar dhòigh aonaichte airson fuasgladh iomlan a lìbhrigeadh. Leis gu bheil luchd-aoigheachd docker ann am bun-structar a ’phròiseict le dreachan Windows Server Core OS 1803 agus 1809, feumar dreachan eadar-dhealaichte de dh’ ìomhaighean docker a thogail airson 1803 agus 1809. Ann an dreach 1803, tha e cudromach cuimhneachadh gu bheil àireamh ath-sgrùdaidh an neach-aoigheachd togail docker feumaidh iad a bhith co-ionnan ri àireamh ath-sgrùdaidh ìomhaigh a' bhunait docker agus an òstair far an tèid an soitheach bhon ìomhaigh seo a chur air bhog. Chan eil an leithid de tharraing air ais ann an dreach 1809. Faodaidh tu barrachd a leughadh an seo.

Carson ioma-ìre?

Chan eil cothrom no glè bheag aig innleadairean sgioba leasachaidh air luchd-aoigheachd togail; chan eil dòigh ann air an t-seata de cho-phàirtean a riaghladh gu sgiobalta airson tagradh a thogail air na h-aoighean sin, mar eisimpleir, cuir a-steach inneal no eallach obrach a bharrachd airson Visual Studio. Mar sin, rinn sinn co-dhùnadh na pàirtean gu lèir a chuir a-steach a bha riatanach gus an tagradh a thogail a-steach don ìomhaigh togail Docker. Ma tha feum air, faodaidh tu dìreach am faidhle docker atharrachadh gu sgiobalta agus an loidhne-phìoban airson an ìomhaigh seo a chruthachadh a chuir air bhog.

Bho theòiridh gu gnìomh

Ann an togail ìomhaigh ioma-ìre Docker air leth freagarrach, tha an àrainneachd airson an tagradh a thogail air ullachadh anns an aon sgriobt Dockerfile mar a tha an tagradh fhèin air a thogail. Ach anns a 'chùis againn, chaidh ceangal eadar-mheadhanach a chur ris, is e sin, an ìre tòiseachaidh de bhith a' cruthachadh ìomhaigh docker leis a h-uile dad a tha riatanach gus an tagradh a thogail. Chaidh seo a dhèanamh oir bha mi airson am feart tasgadan docker a chleachdadh gus ùine stàlaidh a h-uile eisimeileachd a lughdachadh.

Nach toir sinn sùil air prìomh phuingean an sgriobt dockerfile airson an ìomhaigh seo a chruthachadh.

Gus ìomhaighean de dhreachan OS eadar-dhealaichte a chruthachadh, faodaidh tu argamaid a mhìneachadh anns an dockerfile tro bheil àireamh an tionndaidh air a thoirt seachad rè an togail, agus is e cuideachd taga na h-ìomhaigh bhunaiteach.

Gheibhear liosta iomlan de thagaichean ìomhaigh Microsoft Windows Server an seo.

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

Gu gnàthach, na h-òrdughan anns an stiùireadh RUN taobh a-staigh an dockerfile air Windows OS tha iad air an cur gu bàs anns a’ chonsail cmd.exe. Airson goireasachd a bhith a’ sgrìobhadh sgriobtaichean agus a’ leudachadh comas-gnìomh nan òrduighean a thathar a’ cleachdadh, nì sinn ath-mhìneachadh air a’ chonsail cur an gnìomh àithne ann an Powershell tron ​​stiùireadh SHELL.

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

Is e an ath cheum am manaidsear pacaid chocolatey agus na pacaidean riatanach a chuir a-steach:

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'

Gus pacaidean a chuir a-steach le chocolatey, faodaidh tu dìreach an toirt seachad mar liosta, no an stàladh aon aig aon àm ma dh'fheumas tu a dhol seachad air crìochan sònraichte airson gach pasgan. Anns an t-suidheachadh againn, chleachd sinn faidhle follaiseach ann an cruth XML, anns a bheil liosta de phasganan riatanach agus na crìochan aca. Tha an t-susbaint aige a’ coimhead mar seo:

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

An ath rud, bidh sinn a’ stàladh àrainneachd togail an tagraidh, is e sin, MS Build Tools 2019 - is e dreach aotrom a tha seo de Visual Studio 2019, anns a bheil an seata de cho-phàirtean as ìsle a tha riatanach airson còd a chuir ri chèile.
Gus obrachadh gu h-iomlan leis a’ phròiseact C ++ againn, bidh feum againn air co-phàirtean a bharrachd, is iad sin:

  • Uallach obrach C ++ innealan
  • Inneal-lìonaidh v141
  • Windows 10 SDK (10.0.17134.0)

Faodaidh tu seata innealan leudaichte a chuir a-steach gu fèin-ghluasadach a’ cleachdadh faidhle rèiteachaidh ann an cruth JSON. Susbaint an fhaidhle rèiteachaidh:

Gheibhear liosta iomlan de na pàirtean a tha rim faighinn air làrach-lìn nan sgrìobhainnean 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"
  ]
}

Bidh an dockerfile a’ ruith an sgriobt stàlaidh, agus airson goireasachd, cuiridh e an t-slighe gu faidhlichean so-ghnìomhaichte innealan togail gu caochladair na h-àrainneachd PATH. Tha e ciallach cuideachd faidhlichean agus clàran neo-riatanach a thoirt air falbh gus meud na h-ìomhaigh a lughdachadh.

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)

Aig an ìre seo, tha an ìomhaigh againn airson an tagradh C ++ a chuir ri chèile deiseil, agus is urrainn dhuinn a dhol air adhart gu dìreach gu bhith a’ cruthachadh docker ioma-ìre togail den tagradh.

Ioma-ìre ann an gnìomh

Cleachdaidh sinn an ìomhaigh chruthaichte leis na h-innealan uile air bòrd mar ìomhaigh togail. Mar a bha san sgriobt dockerfile roimhe, cuiridh sinn ris a’ chomas àireamh an tionndaidh / taga ìomhaigh a shònrachadh gu dinamach airson ath-chleachdadh còd gu furasta. Tha e cudromach suaicheantas a chur ris as builder gu ìomhaigh a’ cho-chruinneachaidh anns an stiùireadh FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

A-nis tha an t-àm ann an tagradh a thogail. Tha a h-uile dad an seo gu math sìmplidh: dèan lethbhreac den chòd stòr agus a h-uile càil co-cheangailte ris, agus tòisich air a’ phròiseas cruinneachaidh.

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

Is e an ìre mu dheireadh de bhith a’ cruthachadh an ìomhaigh dheireannaich ìomhaigh bhunaiteach an tagraidh a shònrachadh, far am bi a h-uile artifact cruinneachaidh agus faidhle rèiteachaidh suidhichte. Gus lethbhreac a dhèanamh de fhaidhlichean cruinnichte bhon ìomhaigh co-chruinneachaidh eadar-mheadhanach, feumaidh tu am paramadair a shònrachadh --from=builder anns an stiùireadh COPY.

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

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

A-nis chan eil air fhàgail ach na h-eisimeileachd riatanach a chuir ris airson an tagradh againn a bhith ag obair agus an àithne tòiseachaidh a shònrachadh tron ​​​​stiùireadh ENTRYPOINT no CMD.

co-dhùnadh

San artaigil seo, bhruidhinn mi air mar a chruthaicheas tu àrainneachd cruinneachaidh làn-chuimseach airson tagraidhean C ++ taobh a-staigh soitheach fo Windows agus mar a chleachdas tu comasan togail ioma-ìre docker gus ìomhaighean làn-chuimseach den tagradh againn a chruthachadh.

Source: www.habr.com

Cuir beachd ann