Uża docker f'diversi stadji biex tibni immaġini tat-twieqi
Hi kollha! Jisimni Andrey, u naħdem bħala inġinier DevOps f'Exness fit-tim tal-iżvilupp. L-attività ewlenija tiegħi hija relatata mal-bini, l-iskjerament u l-appoġġ ta' applikazzjonijiet fid-docker taħt is-sistema operattiva Linux (minn hawn 'il quddiem imsejħa l-OS). Ftit ilu kelli kompitu bl-istess attivitajiet, iżda l-OS fil-mira tal-proġett kien Windows Server u sett ta 'proġetti C++. Għalija, din kienet l-ewwel interazzjoni mill-qrib ma 'kontenituri docker taħt Windows OS u, b'mod ġenerali, ma' applikazzjonijiet C++. Grazzi għal dan, kelli esperjenza interessanti u tgħallimt dwar xi wħud mill-intricacies ta 'kontenituri applikazzjonijiet fil-Windows.
F’dan l-artiklu rrid ngħidilkom x’diffikultajiet kelli niffaċċja u kif irnexxieli nsolvihom. Nittama li dan ikun ta' għajnuna għall-isfidi attwali u futuri tiegħek. Igawdu l-qari!
Għaliex kontenituri?
Il-kumpanija għandha infrastruttura eżistenti għall-orkestratur tal-kontejners Hashicorp Nomad u komponenti relatati - Consul and Vault. Għalhekk, il-kontejners tal-applikazzjoni ntgħażlet bħala metodu unifikat għat-twassil ta 'soluzzjoni sħiħa. Peress li l-infrastruttura tal-proġett fiha docker hosts bil-verżjonijiet tal-Windows Server Core OS 1803 u 1809, huwa meħtieġ li jinbnew verżjonijiet separati tal-immaġini docker għall-1803 u 1809. Fil-verżjoni 1803, huwa importanti li wieħed jiftakar li n-numru tar-reviżjoni tal-build docker host irid jaqbel man-numru tar-reviżjoni tal-immaġni bażi tad-docker u l-host fejn se jitnieda l-kontenitur minn din l-immaġni. Verżjoni 1809 m'għandha l-ebda żvantaġġ bħal dan. Tista' taqra aktar hawn.
Għaliex f'diversi stadji?
L-inġiniera tat-tim ta 'żvilupp m'għandhom l-ebda aċċess jew aċċess limitat ħafna biex jibnu hosts; m'hemm l-ebda mod kif timmaniġġja malajr is-sett ta' komponenti għall-bini ta 'applikazzjoni fuq dawn l-hosts, pereżempju, tinstalla sett ta' għodda jew ammont ta' xogħol addizzjonali għal Visual Studio. Għalhekk, ħadna d-deċiżjoni li ninstallaw il-komponenti kollha meħtieġa biex nibnu l-applikazzjoni fl-immaġni Docker tal-bini. Jekk meħtieġ, tista 'malajr tibdel biss id-dockerfile u tniedi l-pipeline għall-ħolqien ta' din l-immaġni.
Mit-teorija għall-azzjoni
F'bini ideali ta 'immaġni Docker f'diversi stadji, l-ambjent għall-bini tal-applikazzjoni huwa ppreparat fl-istess skript Dockerfile kif tinbena l-applikazzjoni nnifisha. Iżda fil-każ tagħna, ġiet miżjuda rabta intermedja, jiġifieri, il-pass tal-ħolqien preliminari ta 'immaġni ta' docker b'dak kollu meħtieġ biex tinbena l-applikazzjoni. Dan sar għaliex ridt nuża l-karatteristika docker cache biex tnaqqas il-ħin ta 'installazzjoni tad-dipendenzi kollha.
Ejja nħarsu lejn il-punti ewlenin tal-iskrittura dockerfile għall-ħolqien ta 'din l-immaġni.
Biex toħloq immaġini ta 'verżjonijiet tal-OS differenti, tista' tiddefinixxi argument fid-dockerfile li minnu jgħaddi n-numru tal-verżjoni waqt il-bini, u hija wkoll it-tikketta tal-immaġni bażi.
Tista' tinstab lista kompluta ta' tikketti tal-immaġni tal-Microsoft Windows Server hawn.
ARG WINDOWS_OS_VERSION=1809
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION
B'mod awtomatiku l-kmandi fl-istruzzjonijiet RUN ġewwa l-dockerfile fuq Windows OS huma esegwiti fil-console cmd.exe. Għall-konvenjenza tal-kitba ta' skripts u tespandi l-funzjonalità tal-kmandi użati, aħna se niddefinixxu mill-ġdid il-console tal-eżekuzzjoni tal-kmand f'Powershell permezz tal-istruzzjoni SHELL.
Biex tinstalla pakketti bl-użu taċ-ċikkulata, tista 'sempliċement tgħaddihom bħala lista, jew tinstallahom wieħed kull darba jekk ikollok bżonn tgħaddi parametri uniċi għal kull pakkett. Fis-sitwazzjoni tagħna, użajna fajl manifest f'format XML, li fih lista ta 'pakketti meħtieġa u l-parametri tagħhom. Il-kontenut tiegħu jidher bħal dan:
Sussegwentement, aħna ninstallaw l-ambjent tal-bini tal-applikazzjoni, jiġifieri, MS Build Tools 2019 - din hija verżjoni ħafifa ta 'Visual Studio 2019, li fiha s-sett minimu meħtieġ ta' komponenti għall-kompilazzjoni tal-kodiċi.
Biex naħdmu bis-sħiħ mal-proġett C++ tagħna, ser ikollna bżonn komponenti addizzjonali, jiġifieri:
Għodda ta' xogħol C++
Toolset v141
Windows 10 SDK (10.0.17134.0)
Tista 'tinstalla sett estiż ta' għodod awtomatikament billi tuża fajl ta 'konfigurazzjoni f'format JSON. Kontenut tal-fajl tal-konfigurazzjoni:
Lista kompluta ta' komponenti disponibbli tista' tinstab fuq is-sit tad-dokumentazzjoni Microsoft Visual Studio.
Id-dockerfile imexxi l-iskrittura tal-installazzjoni, u għall-konvenjenza, iżid il-mogħdija għall-fajls eżekutibbli tal-għodod tal-bini mal-varjabbli tal-ambjent PATH. Huwa wkoll rakkomandabbli li jitneħħew fajls u direttorji mhux meħtieġa biex jitnaqqas id-daqs tal-immaġni.
F'dan l-istadju, l-immaġni tagħna għall-kompilazzjoni tal-applikazzjoni C++ hija lesta, u nistgħu nipproċedu direttament biex noħolqu bini ta 'docker f'diversi stadji tal-applikazzjoni.
F'diversi stadji fl-azzjoni
Se nużaw l-immaġni maħluqa bl-għodda kollha abbord bħala immaġni tal-bini. Bħal fl-iskript ta 'dockerfile preċedenti, aħna se nżidu l-abbiltà li jispeċifikaw b'mod dinamiku n-numru tal-verżjoni/tikketta tal-immaġni għal faċilità ta' użu mill-ġdid tal-kodiċi. Huwa importanti li żżid tikketta as builder għall-immaġni tal-assemblaġġ fl-istruzzjonijiet FROM.
ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder
Issa wasal iż-żmien li tibni l-applikazzjoni. Kollox hawnhekk huwa pjuttost sempliċi: ikkopja l-kodiċi tas-sors u dak kollu assoċjat miegħu, u ibda l-proċess ta 'kumpilazzjoni.
L-istadju finali tal-ħolqien tal-immaġni finali huwa li tispeċifika l-immaġni bażi tal-applikazzjoni, fejn se jkunu jinsabu l-artifacts kollha tal-kumpilazzjoni u l-fajls tal-konfigurazzjoni. Biex tikkopja fajls ikkumpilati mill-immaġni tal-assemblaġġ intermedju, trid tispeċifika l-parametru --from=builder fl-istruzzjonijiet COPY.
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION
COPY --from=builder C:/x64/Release/myapp/ ./
COPY ./configs ./
Issa dak kollu li jibqa 'huwa li żżid id-dipendenzi meħtieġa biex l-applikazzjoni tagħna taħdem u tispeċifika l-kmand tat-tnedija permezz tal-istruzzjonijiet ENTRYPOINT jew CMD.
Konklużjoni
F'dan l-artikolu, tkellimt dwar kif toħloq ambjent ta 'kumpilazzjoni sħiħ għal applikazzjonijiet C++ ġewwa kontenitur taħt il-Windows u kif tuża l-kapaċitajiet ta' bini f'diversi stadji docker biex toħloq immaġini sħiħa tal-applikazzjoni tagħna.