Docker daudzpakÄpju izmantoÅ”ana, lai izveidotu Windows attÄlus
Sveiki visiem! Mani sauc Andrejs, un es strÄdÄju par DevOps inženieri Exness izstrÄdes komandÄ. Mana galvenÄ darbÄ«ba ir saistÄ«ta ar lietojumprogrammu izveidi, izvietoÅ”anu un atbalstÄ«Å”anu docker operÄtÄjsistÄmÄ Linux (turpmÄk tekstÄ ā OS). Pirms neilga laika man bija uzdevums ar tÄdÄm paÅ”Äm darbÄ«bÄm, bet projekta mÄrÄ·a OS bija Windows Server un C++ projektu komplekts. Man Ŕī bija pirmÄ cieÅ”Ä mijiedarbÄ«ba ar docker konteineriem operÄtÄjsistÄmÄ Windows un kopumÄ ar C++ lietojumprogrammÄm. Pateicoties tam, es guvu interesantu pieredzi un uzzinÄju par dažÄm Windows lietojumprogrammu konteinerizÄÅ”anas sarežģītÄ«bÄm.
Å ajÄ rakstÄ es vÄlos jums pastÄstÄ«t, ar kÄdÄm grÅ«tÄ«bÄm man bija jÄsaskaras un kÄ man tÄs izdevÄs atrisinÄt. Es ceru, ka tas noderÄs jÅ«su paÅ”reizÄjiem un turpmÄkajiem izaicinÄjumiem. Izbaudi lasÄ«Å”anu!
KÄpÄc konteineri?
UzÅÄmumam ir esoÅ”Ä infrastruktÅ«ra Hashicorp Nomad konteineru orÄ·estrim un ar to saistÄ«tajÄm sastÄvdaļÄm - Consul un Vault. TÄpÄc lietojumprogrammu konteinerizÄcija tika izvÄlÄta kÄ vienota metode pilnÄ«ga risinÄjuma piegÄdei. TÄ kÄ projekta infrastruktÅ«rÄ ir docker hosts ar Windows Server Core OS versijÄm 1803 un 1809, ir nepiecieÅ”ams izveidot atseviŔķas docker attÄlu versijas 1803 un 1809. VersijÄ 1803 ir svarÄ«gi atcerÄties, ka build Docker resursdatora versijas numurs jÄatbilst pamata docker attÄla un resursdatora versijas numuram, kurÄ tiks palaists konteiners no Ŕī attÄla. Versijai 1809 Å”Ädu trÅ«kumu nav. JÅ«s varat lasÄ«t vairÄk Å”eit.
KÄpÄc daudzpakÄpju?
IzstrÄdes komandas inženieriem nav vai ir ļoti ierobežota piekļuve saimniekdatoru izveidei; nav iespÄjams Ätri pÄrvaldÄ«t komponentu kopu lietojumprogrammas izveidei Å”ajos resursdatoros, piemÄram, instalÄt papildu rÄ«ku kopu vai darba slodzi programmai Visual Studio. TÄpÄc mÄs pieÅÄmÄm lÄmumu instalÄt visus komponentus, kas nepiecieÅ”ami, lai izveidotu lietojumprogrammu Buil Docker attÄlÄ. Ja nepiecieÅ”ams, varat Ätri mainÄ«t tikai dockerfailu un palaist Ŕī attÄla izveides cauruļvadu.
No teorijas līdz darbībai
IdeÄlÄ Docker daudzpakÄpju attÄla bÅ«vÄjumÄ vide lietojumprogrammas izveidei tiek sagatavota tajÄ paÅ”Ä Dockerfile skriptÄ, kurÄ tiek veidota pati lietojumprogramma. Bet mÅ«su gadÄ«jumÄ tika pievienota starpsaite, proti, dokera attÄla sÄkotnÄjÄs izveides solis ar visu nepiecieÅ”amo lietojumprogrammas izveidoÅ”anai. Tas tika darÄ«ts, jo es vÄlÄjos izmantot docker keÅ”atmiÅas funkciju, lai samazinÄtu visu atkarÄ«bu instalÄÅ”anas laiku.
ApskatÄ«sim galvenos dockerfile skripta punktus Ŕī attÄla izveidei.
Lai izveidotu dažÄdu OS versiju attÄlus, docker failÄ varat definÄt argumentu, caur kuru versijas numurs tiek nodots bÅ«ves laikÄ, un tas ir arÄ« pamata attÄla tags.
Pilns Microsoft Windows Server attÄlu tagu saraksts ir atrodams Å”eit.
ARG WINDOWS_OS_VERSION=1809
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION
PÄc noklusÄjuma komandas instrukcijÄs RUN Docker failÄ operÄtÄjsistÄmÄ Windows OS tie tiek izpildÄ«ti konsolÄ cmd.exe. Skriptu rakstÄ«Å”anas ÄrtÄ«bai un izmantoto komandu funkcionalitÄtes paplaÅ”inÄÅ”anai mÄs no jauna definÄsim komandu izpildes konsoli programmÄ Powershell, izmantojot instrukciju SHELL.
Lai instalÄtu pakotnes, izmantojot chocolatey, varat tÄs vienkÄrÅ”i nodot kÄ sarakstu vai instalÄt pa vienai, ja katrai pakotnei ir jÄnodod unikÄli parametri. MÅ«su situÄcijÄ mÄs izmantojÄm manifesta failu XML formÄtÄ, kurÄ ir saraksts ar nepiecieÅ”amajÄm pakotnÄm un to parametriem. TÄs saturs izskatÄs Å”Ädi:
TÄlÄk mÄs instalÄjam lietojumprogrammu veidoÅ”anas vidi, proti, MS Build Tools 2019 - Ŕī ir Visual Studio 2019 vieglÄ versija, kurÄ ir minimÄli nepiecieÅ”amais komponentu komplekts koda kompilÄÅ”anai.
Lai pilnÄ«bÄ strÄdÄtu ar mÅ«su C++ projektu, mums bÅ«s nepiecieÅ”ami papildu komponenti, proti:
Å ajÄ posmÄ mÅ«su attÄls C++ lietojumprogrammas kompilÄÅ”anai ir gatavs, un mÄs varam pÄriet tieÅ”i uz lietojumprogrammas docker daudzpakÄpju bÅ«vÄjuma izveidi.
DaudzpakÄpju darbÄ«bÄ
Izveidoto attÄlu ar visiem uz klÄja esoÅ”ajiem rÄ«kiem izmantosim kÄ bÅ«ves attÄlu. TÄpat kÄ iepriekÅ”ÄjÄ dockerfile skriptÄ, mÄs pievienosim iespÄju dinamiski norÄdÄ«t versijas numuru/attÄla tagu, lai atvieglotu koda atkÄrtotu izmantoÅ”anu. Ir svarÄ«gi pievienot etiÄ·eti as builder uz montÄžas attÄlu instrukcijÄs FROM.
ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder
Tagad ir pienÄcis laiks izveidot lietojumprogrammu. Å eit viss ir pavisam vienkÄrÅ”i: nokopÄjiet avota kodu un visu, kas ar to saistÄ«ts, un sÄciet kompilÄcijas procesu.
GalÄ«gÄ attÄla izveides pÄdÄjais posms ir lietojumprogrammas bÄzes attÄla norÄdÄ«Å”ana, kurÄ atradÄ«sies visi kompilÄcijas artefakti un konfigurÄcijas faili. Lai kopÄtu apkopotos failus no starpposma montÄžas attÄla, jÄnorÄda parametrs --from=builder instrukcijÄs COPY.
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION
COPY --from=builder C:/x64/Release/myapp/ ./
COPY ./configs ./
Tagad atliek tikai pievienot nepiecieÅ”amÄs atkarÄ«bas, lai mÅ«su lietojumprogramma darbotos, un norÄdÄ«t palaiÅ”anas komandu, izmantojot instrukcijas ENTRYPOINT vai CMD.
SecinÄjums
Å ajÄ rakstÄ es runÄju par to, kÄ izveidot pilnvÄrtÄ«gu kompilÄcijas vidi C++ lietojumprogrammÄm konteinerÄ sistÄmÄ Windows un kÄ izmantot docker daudzpakÄpju bÅ«vÄjumu iespÄjas, lai izveidotu pilnvÄrtÄ«gus mÅ«su lietojumprogrammas attÄlus.