Späť na blog

Ako hostovať repozitár Docker obrazov a zostavovať Docker obrazy s GitLab Self-Managed inštanciou na Ubuntu 20.04

Ako hostovať repozitár Docker obrazov a zostavovať Docker obrazy s GitLab Self-Managed inštanciou na Ubuntu 20.04

Technológia kontajnerizácie zaznamenala obrovský pokrok v technologickom priestore vývoja softvéru ako najuznávanejšia metóda balenia a nasadzovania aplikácií v cloudových prostrediach. To si vyžiadala potreba kontinuálnej integrácie (CI) a kontinuálneho nasadzovania (CD), ktoré sú definujúcimi aspektmi DevOps. Softvéroví vývojári a inžinieri využívajú kontajnery na dosiahnutie aspektu CI/CD v softvérovej architektúre. Kontajner je v podstate plne zabalená prenosná a samostatná výpočtová platforma. Hoci na webe existuje niekoľko kontajnerových platforiem, Docker je tou najbežnejšou.

Docker je open-source kontajnerová platforma, ktorá robí vývoj efektívnym a predvídateľným. Docker ponúka verejný repozitár Docker obrazov dostupný na Docker Hub. Obsahuje mnoho open-source Docker obrazov pre najbežnejšie implementácie, ktoré si môžete stiahnuť a použiť. Keďže ide o verejný repozitár, môžete doň bezplatne pridávať aj vlastné Docker obrazy a zdieľať ich s verejnosťou. Ak však máte súkromný/vlastnícky kód, možno budete musieť platiť za súkromný repozitár obrazov alebo si vybudovať vlastnú službu repozitára obrazov. Tu prichádza na rad GitLab.

GitLab je webový Git repozitár, ktorý je viac než len nástrojom na správu verzií. Poskytuje DevOps nástroje pre kontinuálnu integráciu a nasadzovanie, sledovanie chýb, registre Docker obrazov a ďalšie. Ponúka tri možnosti: GitLab Community Edition (CE), GitLab Enterprise Edition (EE) a GitLab SaaS. GitLab CE a GitLab EE sú samo-spravované riešenia, ktoré vám umožňujú stiahnuť, nainštalovať a spravovať inštanciu GitLabu sami. GitLab SaaS je hostovaný spoločnosťou GitLab inc a nemusíte sa starať o inštaláciu ničoho, aby ste ho mohli používať.

V predchádzajúcom návode sme vám ukázali, ako nastaviť inštanciu GitLabu na serveri CloudSigma a hostovať vlastný Git repozitár. Tiež sme vám ukázali, ako implementovať pipeline-y kontinuálnej integrácie s GitLab runnerom, aby sa automaticky zostavili a spustili vaše testy vždy, keď dôjde k novému commitu. Ak ste neprešli spomínanými návodmi, urobte tak, pretože sú stavebnými kameňmi tohto návodu.

V tomto návode si ukážeme, ako zostaviť jednoduchý Docker obraz a hostovať ho pomocou vlastnej inštancie GitLabu (či už používate Community Edition alebo Enterprise Edition – postup krokov je rovnaký).

Požiadavky

Ak chcete postupovať podľa každého kroku tohto návodu, uistite sa, že máte GitLab CI runner a vlastný GitLab server, ako je vysvetlené nižšie.

1. Zabezpečený GitLab server

Tento server budeme používať na ukladanie zdrojového kódu, spúšťanie úloh CI/CD a hostovanie registra Docker obrazov. Mali by ste mať server s aspoň 2 CPU jadrami a 4GB pamäte RAM, ako odporúča GitLab na inštaláciu samo-spravovanej inštancie GitLabu. Budete tiež potrebovať registrovaný názov domény, ktorý nasmerujete na server, pretože ho budeme používať na získanie SSL certifikátu od Let’s Encrypt na zabezpečenie servera. Nižšie uvádzame niekoľko odkazov, podľa ktorých môžete nastaviť vlastnú inštanciu GitLabu.

2. GitLab CI runner

GitLab CI runner je potrebný na spúšťanie automatizovaných úloh pre vaše testovacie prípady. Návod na ako nastaviť pipeline-y kontinuálnej integrácie GitLabu na Ubuntu 20.04 vám poskytne prehľad o GitLab CI serveri a ukáže vám, ako spúšťať úlohy. Ak ste tak ešte neurobili, postupujte podľa krokov v návode na nastavenie služby GitLab CI runner. Návod obsahuje demo aplikáciu v Node.js s testovacími prípadmi – budeme ju používať v tomto návode.

Teraz poďme začať!

Krok 1: Konfigurácia privilegovaného GitLab CI runnera

V návode na nastavenie GitLab CI runnera sme nakonfigurovali GitLab runner pomocou sudo gitlab-runner register príkaz, ktorý nám umožnil interaktívne pridať požadované parametre. Hoci to fungovalo pre náš predchádzajúci prípad použitia, ktorým bolo spúšťanie zostavení a testov v izolovaných kontajneroch Docker, nemusí to zvládnuť zostavovanie obrazov Docker. Zostavovanie obrazov Docker vyžaduje, aby mal runner plný prístup k službe Docker. Túto konfiguráciu môžete dosiahnuť použitím oficiálneho docker-in-docker obrazu na spúšťanie úloh. Takáto konfigurácia zahŕňa udelenie runneru privilegovaného režimu vykonávania.

Hoci udelenie privilegovaného režimu vykonávania je nevyhnutné na zostavovanie obrazov Docker, prináša so sebou bezpečnostné riziká. Je to preto, že to zahŕňa zrušenie bezpečnostných výhod kontajnerov. Možno si myslíte, že ostatné runnery Docker sú bezpečné, ale majú rovnaké problémy, ako je vysvetlené v oficiálnej dokumentácii Docker.

Vytvoríme ďalší runner s privilegovaným režimom vykonávania. Pôjde o runner špecifický pre projekt z dôvodu vyššie uvedených bezpečnostných dôsledkov. Bude prijímať úlohy z projektu Node Pipeline, ktorý sme vytvorili v návode na tému ako nastaviť kontinuálne CI pipeline s GitLabom.

Prvá vec, ktorú by ste mali urobiť, je skontrolovať, či sú Shared Runners na projekte zakázané. Na stránke projektu Node Pipeline kliknite na Settings v ľavom dolnom menu a vyberte CI/CD v podmenu:

Docker Image 1

Nájdite tlačidlo Expand v sekcii Runners a kliknutím naň zobrazte podrobnosti o dostupných runneroch:

runners

Kliknutím na prepínač Disable Shared Runners pre tento projekt ich zakážte. Ak ste v predchádzajúcej časti pridali runner špecifický pre projekt, zakážte aj ten. Budeme pridávať privilegovaný runner špecifický pre projekt na spúšťanie úloh pre tento projekt. To zaručuje, že neskončíme s chybami zostavenia v prípade, že GitLab náhodne priradí úlohy runnerom, ktoré neboli zaregistrované s privilegovaným režimom vykonávania. Na snímke obrazovky vyššie, pod záložkou Specific runnersregistračnýregistračný token vášho projektu. Poznačte si ho, pretože ho použijete nižšie.

Note: Runner špecifický pre projekt môže byť priradený aj k iným projektom zo sekcie Admin panel > Runners. Keď vyberiete runner zo zoznamu runnerov, dostanete sa na stránku konfigurácie runnera. Prejdite nadol a zobrazte sekciu Restrict projects for this runner:

assigned projects

Je čas spustiť terminál. Ak ste nevykonali kroky v návode na tému ako nastaviť GitLab Continuous Integration Pipelines na Ubuntu 20.04, dajte si pauzu od tohto návodu a postupujte podľa krokov, aby ste mali server so službou GitLab CI runner. V opačnom prípade sa prihláste cez SSH na server runnera GitLab CI pomocou vášho sudo používateľa pre ďalšie kroky.

Ak chcete nastaviť privilegovaný runner špecifický pre projekt, zadajte do terminálu nasledujúci príkaz, pričom nahraďte názov vašej domény a registračný token skopírovaný vyššie:

Tento výstup ukazuje úspešnú registráciu:

output

Ak chcete overiť, že vaša inštancia GitLab zachytila runner, vráťte sa do prehliadača a obnovte stránku Settings > CI/CD. Rozbaľte sekciu Runners a mali by ste vidieť svoj runner pod Specific Runners:

Docker Image 2

Voliteľne, ak prejdete do Admin Panel (kliknutím na tlačidlo Menu v hornom paneli a výberom Admin), potom vyberte Runners v možnostiach ponuky:

admin

Mali by ste sa dostať na túto stránku zobrazujúcu všetky dostupné runnery pripojené k vašej inštancii GitLab, zdieľané aj špecifické pre projekt:

GitLab instance

Do tohto bodu ste úspešne nastavili runner, ktorý dokáže zostavovať obrazy Docker.

Krok 2: Konfigurácia Docker Registry v GitLabe

Niektoré kľúčové pracovné postupy vyžadujú nezávislosť od externých služieb. Práve vtedy prichádza na rad samostatne spravovaný Docker Registry od GitLabu. Je nielen bezpečný, ale tiež zaisťuje flexibilitu pri prispôsobovaní vašich úloh a pipeline podľa vašich potrieb. Ak chcete nastaviť Docker Registry, budete upravovať konfiguračný súbor GitLabu. Najprv sa prihláste cez SSH do inštancie GitLabu a potom otvorte súbor pomocou nasledujúceho príkazu:

Prejdite nadol, kým neuvidíte Container Registry Settings:

Docker Image 3

Odkomentujte riadok s registry_external_url a nastavte ho na názov domény vašej inštancie GitLabu, pričom na konci uveďte port 8888 na konci:

Ďalej musíme pridaním nasledujúcich riadkov špecifikovať, kde register nájde certifikáty Let’s Encrypt. Nezabudnite ich upraviť podľa skutočného názvu domény vašej inštancie GitLabu:

Po dokončení súbor uložte a zatvorte. Zadajte nasledujúci príkaz do terminálu na rekonfiguráciu GitLabu:

Potom počkajte niekoľko sekúnd, kým sa príkaz dokončí. V prípade úspechu by ste mali vidieť nasledujúci výstup:

gitlab reconfigured

Ďalej musíme zabezpečiť, aby firewall (ufw) povoľoval prevádzku na port registra, ktorý sme priradili, pomocou príkazu:

Potom musíte otestovať, či Docker Registry beží, a to tak, že sa doň prihlásite z iného počítača s nainštalovaným Dockerom pomocou príkazu docker login. Ak ste nenastavili Docker vo svojom lokálnom prostredí, môžete sa prihlásiť cez SSH do servera GitLab CI runner, keďže ten už má Docker nainštalovaný. Potom spustite nasledujúci príkaz, pričom samozrejme uveďte názov domény vašej inštancie GitLabu:

Váš výstup zobrazí správu Login Succeeded takto:

login succeeded

To znamená, že register bol úspešne nakonfigurovaný a funguje. Keď vytvoríte obrazy, uložia sa lokálne v súborovom systéme servera GitLab. Pre súkromný firemný register je to v poriadku. Ak však plánujete nechať svoj register otvorený pre verejnosť, môžete potrebovať väčšie úložisko. Našťastie GitLab ponúka možnosti pripojenia k úložným bucketom. Viac si môžete prečítať v oficiálnej dokumentácii pre GitLab container registry to see how you can configure a storage bucket for your GitLab instance.

Krok 3: Upravte súbor gitlab-ci.yml a zostavte Docker obraz

Ak chcete pokračovať v tomto kroku, mali by ste mať projekt Node Pipeline vo vašej inštancii GitLabu. Tu je zobrazenie projektu na GitLabe:

Node Pipeline

Hovorili sme o gitlab-ci.yml ako o súbore, ktorý GitLab CI runner číta pri spustení, aby vedel, ako zostaviť vašu aplikáciu a vykonať automatizované testy. Tento súbor musíme upraviť a pridať pokyny na zostavenie Docker obrazov. Tento súbor sa môžete rozhodnúť upraviť priamo v rozhraní GitLabu. Môžete ho tiež naklonovať do svojho lokálneho počítača, upraviť vo svojom obľúbenom editore a potom vykonať commit a git push späť do GitLabu. Pre stručnosť použijeme rozhranie GitLabu.

Kliknutím na súbor ho otvorte a potom kliknite na tlačidlo Upraviť :

Edit

Tým sa súbor otvorí pripravený na úpravu. Vymažte zo súboru všetko a pridajte nasledujúci kód:

Počas pridávania vyššie uvedeného úryvku kódu nezabudnite aktualizovať zvýraznenú časť o vaše skutočné údaje. Keď skončíte, uložte zmeny stlačením tlačidla Commit changes. Ak ste pracovali mimo GitLabu, potvrďte (commit) a odošlite (push) svoje zmeny.

Poďme pochopiť, čo robí kód, ktorý sme pridali do súboru .gitlab-ci.yml. Prvý riadok hovorí GitLabu, aby použil oficiálny Docker-in-Docker obraz a pripojí ho k službe docker-in-docker (docker:dind). Potom definujeme fázy pre build, test a release. Fáza build zostaví obraz pomocou inštrukcií v Dockerfile a potom ho nahrá do Docker Registry, ktorú sme nastavili v predchádzajúcom kroku.

Keď fáza build úspešne skončí, fáza test stiahne obraz, spustí ho ako kontajner a vykoná príkaz npm test na vykonanie automatizovaných testov vo vnútri kontajnera. Ak fáza test úspešne skončí, prevezme riadenie fáza release. Vo fáze release sa obraz stiahne a označí tagom node_pipeline:latest. Potom sa odošle späť do registra.

Toto je len základná konfigurácia pre ukážkový projekt. Pre vaše reálne projekty môžete mať ďalšie fázy, napríklad staging, production atď. Keď súbor po úprave uložíte, spustí sa pipeline. Tá následne začne spúšťať úlohy. Vráťte sa na stránku Node Pipeline. Mali by ste vidieť, že úloha momentálne beží:

staging

Kliknutím na ikonu indikátora CI zobrazíte rôzne fázy úlohy:

Docker Image 7

Ako môžete vidieť na snímke obrazovky vyššie, všetky fázy boli úspešné, čo potvrdzujú zelené ikony začiarknutia. Kliknutím na každú fázu môžete zobraziť výstup úlohy:

Docker Image 6

V ponuke na ľavej strane kliknite na Packages & Registries a vyberte Container Registry:

Docker Image 5

Tým sa otvorí stránka so zoznamom dostupných Docker obrazov pre vybraný projekt. Obraz, ktorý sme zostavili a vydali, by sa mal zobraziť v zozname s priradeným tagom assigned:

container registryKliknutím zobrazíte rôzne tagy pre tento obraz:

Docker Image 4

Ak máte Docker nainštalovaný vo svojom lokálnom prostredí, môžete obraz stiahnuť (pull) a otestovať, či beží podľa očakávania. Kliknite na ikonu Copy vedľa názvu tagu obrazu. Do schránky sa skopíruje celý názov obrazu, ktorý môžete použiť s príkazom docker pull:

Vyššie uvedené príkazy stiahnu obraz a spustia ho vo vnútri kontajnera:

pull the image and run

Aplikácia je teraz dostupná na porte 8090. Ak otvoríte svoj prehliadač a prejdete na your-IP-address:8090 mali by ste vidieť zobrazenú stránku:

hello, world

Ak vo svojom prehliadači vidíte takúto stránku, úspešne ste vytvorili Docker image a zdieľali ho v súkromnom Docker Registry. V budúcnosti, ak vykonáte akékoľvek zmeny v master vetve, spustia sa fázy definované v súbore .gitlab-ci.yml a ak uspejú, nový Docker image s tagom latest sa znova zostaví a odošle do registra.

Záver

V tomto projekte ste sa naučili, ako pridať privileged GitLab runner do vašej vlastnej inštancie GitLabu (self-managed), aby ste mohli vytvárať Docker images. Tiež ste nakonfigurovali súkromný register Docker images na hosťovanie vašich obrazov. Pomocou projektu Node pipeline ste mohli otestovať každý komponent nastavenia a uistiť sa, že sa pripojili a komunikovali podľa očakávania. Keď bol váš image dostupný v registri, mohli ste ho stiahnuť a overiť, že beží v kontajneri.

Toto je úvodný návod, ktorý vám poskytne základy, na ktorých môžete stavať. Postupujte podľa oficiálnej dokumentácie GitLabu, aby ste sa dozvedeli viac o GitLabe. Tento odkaz môže poskytnúť informácie o GitLab Container Registry.

Ďalšie zdroje o využívaní Dockeru nájdete v ďalších návodoch na našom blogu:

Príjemnú prácu!

author

Hark Labs

Autor · CloudSigma

Preslav Dobrev je kreatívny dizajnér v spoločnosti CloudSigma, ktorý sa zameriava na konzistentnú firemnú identitu prostredníctvom tradičných a inovatívnych marketingových kanálov. Dokáže brilantne spájať umeleckú víziu so strategickým marketingom, čím vytvára pôsobivé príbehy značky.

Komentáre

Zatiaľ žiadne komentáre. Buďte prvý.