Tehnologija kontejnerizacije je uvelike napredovala u tehnološkom prostoru razvoja softvera kao najprihvaćenija metoda pakiranja i isporuke aplikacija u oblačnim okruženjima. To je postalo nužno zbog potrebe za kontinuiranom integracijom (CI) i kontinuiranom isporukom (CD) koje su definirajući aspekti DevOps. Razvojni programeri i inženjeri softvera koriste kontejnere kako bi postigli CI/CD aspekt softverske arhitekture. Kontejner je u biti potpuno pakirana, prijenosna i samostalna računalna platforma. Iako na webu postoji nekoliko platformi za kontejnere, Docker je najčešći.
Docker je platforma za kontejnere otvorenog koda koja razvoj čini učinkovitim i predvidljivim. Docker nudi javno spremište Docker slika dostupno na Docker Hub. Sadrži mnoge Docker slike otvorenog koda za najčešće implementacije koje možete preuzeti i koristiti. Budući da se radi o javnom spremištu, također možete slobodno dodati vlastite Docker slike kako biste ih podijelili s javnošću. Međutim, ako imate privatni/vlasnički kod, možda ćete morati platiti privatno spremište slika ili izgraditi vlastitu uslugu spremišta slika. Tu na scenu stupa GitLab.
GitLab je web-bazirano Git spremište koje je više od samog alata za kontrolu verzija. Pruža DevOps alate za kontinuiranu integraciju i isporuku, praćenje problema, registre Docker slika i još mnogo toga. Nudi tri opcije: GitLab Community Edition (CE), GitLab Enterprise Edition (EE) i GitLab SaaS. GitLab CE and GitLab EE su samoupravljiva rješenja koja vam omogućuju da sami preuzmete, instalirate i upravljate GitLab instancom. GitLab SaaS je udomljen od strane GitLab inc, i ne morate brinuti o instaliranju bilo čega da biste ga koristili.
U prethodnom vodiču pokazali smo vam kako postaviti GitLab instancu na CloudSigma poslužitelju i ugostiti vlastito Git spremište. Također smo vam pokazali kako implementirati cjevovode kontinuirane integracije s GitLab runnerom za automatsku izgradnju i pokretanje vaših testova kad god postoji novi commit. Ako niste prošli kroz navedene vodiče, učinite to jer su oni temeljni blokovi za ovaj vodič.
U ovom vodiču demonstrirat ćemo kako izgraditi jednostavnu Docker sliku i ugostiti je na vlastitoj GitLab instanci (bilo da koristite Community Edition ili Enterprise Edition – tijek koraka je isti).
Preduvjeti
Kako biste pratili svaki korak ovog vodiča, provjerite imate li GitLab CI runner i vlastiti GitLab poslužitelj kao što je objašnjeno u nastavku.
1. Siguran GitLab poslužitelj
Koristit ćemo ga za pohranu izvornog koda, pokretanje CI/CD zadataka i udomljavanje registra Docker slika. Trebali biste imati poslužitelj s najmanje 2 CPU jezgre i 4GB of RAM-a kao što preporučuje GitLab za instalaciju samoupravljive GitLab instance. Također će vam trebati registrirani naziv domene koji upućuje na poslužitelj jer ćemo ga koristiti za dobivanje SSL certifikata od Let’s Encrypt kako biste osigurali poslužitelj. U nastavku su neke poveznice koje možete pratiti kako biste postavili vlastitu GitLab instancu.
- Registrirajte naziv domene kod bilo kojeg registrara domena po vašem izboru i usmjerite ga na CloudSigma.
- Pratite ovaj vodič za početno postavljanje Ubuntu poslužitelja, dodavanje ne-root korisnika, i omogućavanje Ubuntuovog UFW vatrozida.
- Na kraju, pratite ovaj vodič za instalaciju i konfiguraciju vlastite GitLab instance.
2. GitLab CI runner
GitLab CI runner je neophodan za pokretanje automatiziranih zadataka nad vašim testnim slučajevima. Vodič o kako postaviti GitLab cjevovode kontinuirane integracije na Ubuntu 20.04 daje vam pregled GitLab CI poslužitelja i pokazuje vam kako pokrenuti zadatke. Slijedite korake u vodiču kako biste postavili uslugu GitLab CI runner ako već niste. Vodič sadrži Node.js demo aplikaciju s testnim slučajevima – koristit ćemo je u ovom vodiču.
Sada, počnimo!
Korak 1: Konfiguriranje privilegiranog GitLab CI Runnera
U vodiču o tome kako postaviti GitLab CI Runner, konfigurirali smo GitLab runner pomoću sudo gitlab-runner register naredba koja nam je omogućila interaktivno dodavanje potrebnih parametara. Iako je ovo radilo za naš prethodni slučaj upotrebe, a to je bilo pokretanje buildova i testova u izoliranim Docker kontejnerima, možda neće moći upravljati izgradnjom Docker slika. Izgradnja Docker slika zahtijeva da runner ima potpuni pristup Docker usluzi. Ovu konfiguraciju možete postići korištenjem službene docker-in-docker slike za pokretanje poslova. Takva konfiguracija uključuje dodjeljivanje runneru privilegiranog načina izvršavanja.
Iako je dodjeljivanje privilegiranog načina izvršavanja nužno za izgradnju Docker slika, ono donosi sigurnosne probleme. To je zato što uključuje odbacivanje sigurnosnih prednosti kontejnera. Možda mislite da su ostali Docker runneri sigurni, ali ispostavlja se da imaju iste probleme kao što je objašnjeno u službenoj Docker dokumentaciji.
Stvorit ćemo još jedan runner s privilegiranim načinom izvršavanja. Ovo će biti runner specifičan za projekt zbog gore spomenutih sigurnosnih implikacija. Prihvaćat će poslove iz projekta Node Pipeline koji smo stvorili u vodiču o kako postaviti kontinuirane CI cjevovode s GitLabom.
Prvo što biste trebali učiniti jest provjeriti jesu li Shared Runners onemogućeni na projektu. Na stranici projekta Node Pipeline kliknite na Settings u izborniku dolje lijevo i odaberite CI/CD u podizborniku:
Pronađite gumb Expand u odjeljku Runners i kliknite ga kako biste otkrili pojedinosti o dostupnim runnerima:
Kliknite prekidač za Disable Shared Runners za ovaj projekt. Ako ste u prethodnom odjeljku dodali runner specifičan za projekt, također ga onemogućite. Dodat ćemo privilegirani runner specifičan za projekt za pokretanje poslova za ovaj projekt. To jamči da nećemo završiti s pogreškama pri izgradnji u slučaju da GitLab nasumično dodijeli poslove runnerima koji nisu registrirani s privilegiranim načinom izvršavanja. Na gornjoj snimci zaslona, pod karticom Specific runners, trebali biste vidjeti registracijski token vašeg projekta. Zabilježite ga jer ćete ga koristiti u nastavku.
| Napomena: Runner specifičan za projekt može se također dodijeliti drugim projektima iz odjeljka Admin panel > Runners. Kada odaberete runner s popisa runnera, dolazite na stranicu za konfiguraciju runnera. Pomaknite se prema dolje da biste vidjeli odjeljak Restrict projects for this runner: |
Vrijeme je da pokrenete svoj terminal. Ako niste izvršili korake u vodiču o kako postaviti GitLab cjevovode kontinuirane integracije na Ubuntu 20.04, napravite pauzu od ovog vodiča i slijedite korake kako biste imali poslužitelj s GitLab CI uslugom runnera. U suprotnom, povežite se putem SSH-a na GitLab CI runner poslužitelj sa svojim sudo korisnikom za sljedeće korake.
Za postavljanje privilegiranog runnera specifičnog za projekt, unesite sljedeću naredbu u svoj terminal, zamjenjujući naziv svoje domene i registracijski token kopiran iznad:
|
1 2 3 4 5 6 7 |
sudo gitlab-runner register -n \ --url https://your-gitlab-instance-domain.com/ \ --registration-token your-project-specifc-registration-token \ --executor docker \ --description "docker-privileged-builder" \ --docker-image "docker:latest" \ --docker-privilegedh |
Ovaj izlaz prikazuje uspješnu registraciju:
To verify that your GitLab instance picked up the runner, go back to the browser, and refresh the Settings > CI/CD page. Expand the Runners section and you should see your runner under Specific Runners:
Optionally, if you go to the Admin Panel (by clicking the Menu button in the top bar and selecting Admin), then select Runners in the menu options:
You should land on this page showing all the available runners connected to your GitLab instance, both shared and project-specific runners:
Do ove točke uspješno ste postavili runner koji može graditi Docker slike.
Korak 2: Konfiguriranje GitLabovog Docker registra
Neki ključni tijekovi rada zahtijevaju neovisnost o vanjskim uslugama. Tu na scenu stupa GitLabov samoupravljani Docker Registry. On je ne samo siguran, već i osigurava fleksibilnost za prilagodbu vaših poslova i cjevovoda prema vašim potrebama. Kako biste postavili Docker Registry, mijenjat ćete GitLabovu konfiguracijsku datoteku. Prvo se povežite putem SSH-a na GitLab instancu, a zatim otvorite datoteku sljedećom naredbom:
|
1 |
sudo nano /etc/gitlab/gitlab.rb |
Pomaknite se prema dolje dok ne vidite Container Registry Settings:
Uklonite komentar s retka s registry_external_url i postavite ga na naziv domene vaše GitLab instance, navodeći port 8888 na kraju:
|
1 |
registry_external_url 'https://your-gitlab-domain.com:8888' |
Zatim moramo odrediti gdje će registar pronaći Let’s Encrypt certifikate dodavanjem sljedećih redaka. Ne zaboravite unijeti stvarni naziv domene vaše GitLab instance:
|
1 2 |
registry_nginx['ssl_certificate'] = "/etc/letsencrypt/live/your-gitlab-domain.com/fullchain.pem" registry_nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/your-gitlab-domain.com/privkey.pem" |
Kada završite, spremite i zatvorite datoteku. Unesite sljedeću naredbu u svoj terminal kako biste ponovno konfigurirali GitLab:
|
1 |
sudo gitlab-ctl reconfigure |
Zatim pričekajte nekoliko sekundi da se izvršavanje naredbe završi. Ako je uspješno, trebali biste vidjeti sljedeći izlaz:
Zatim moramo osigurati da vatrozid (ufw) dopušta promet prema portu registra koji smo dodijelili pomoću naredbe:
|
1 |
sudo ufw allow 8888 |
Zatim trebate testirati radi li Docker Registry tako da se u njega prijavite s drugog računala koje ima instaliran Docker pomoću naredbe docker login. Ako niste postavili Docker u svom lokalnom okruženju, možete se povezati putem SSH-a na poslužitelj GitLab CI runnera jer on već ima instaliran Docker. Zatim izvršite sljedeću naredbu, naravno navodeći naziv domene vaše GitLab instance:
|
1 |
docker login your-gitlab-domain.com:8888 |
Vaš izlaz će prikazati poruku Login Succeeded poput ove:
To znači da je registar uspješno konfiguriran i da radi. Kada izradite slike, one će biti pohranjene lokalno u datotečnom sustavu GitLab poslužitelja. To je u redu za privatni registar tvrtke. Međutim, ako planirate ostaviti svoj registar otvorenim za javnost, možda će vam trebati veći prostor za pohranu. Srećom, GitLab nudi opcije za povezivanje s bucketima za pohranu. Više možete pročitati u službenoj GitLab container registry docs kako biste vidjeli kako možete konfigurirati bucket za pohranu za svoju GitLab instancu.
Korak 3: Izmijenite datoteku gitlab-ci.yml i izradite Docker sliku
Za nastavak ovog koraka trebali biste imati projekt Node Pipeline na svojoj GitLab instanci. Evo prikaza projekta na GitLabu:
Govorili smo o datoteci gitlab-ci.yml kao datoteci koju GitLab CI runner čita kada se pokrene kako bi znao kako izgraditi vašu aplikaciju i izvršiti automatizirane testove. Moramo izmijeniti ovu datoteku kako bismo dodali upute za izgradnju Docker slika. Možete odabrati uređivanje ove datoteke izravno unutar GitLab sučelja. Također je možete klonirati na svoje lokalno računalo i urediti je u svom omiljenom uređivaču teksta, a zatim napraviti commit i git push natrag na GitLab. Radi kratkoće, koristit ćemo GitLab sučelje.
Kliknite na datoteku da biste je otvorili, a zatim kliknite na gumb Uredi:
Ovo otvara datoteku spremnu za uređivanje. Obrišite sve iz datoteke i dodajte sljedeći kod:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
image: docker:20-dind services: - name: docker:20-dind alias: docker command: ["--tls=false"] stages: - build - test - release variables: TEST_IMAGE: gitlab-domain.com:8888/hackins/node_pipeline:$CI_COMMIT_REF_NAME RELEASE_IMAGE: gitlab-domain.com:8888/hackins/node_pipeline:latest DOCKER_HOST: tcp://docker:2375 DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" before_script: - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN gitlab-domain.com:8888 build: stage: build script: - docker build --pull -t $TEST_IMAGE . - docker push $TEST_IMAGE test: stage: test script: - docker pull $TEST_IMAGE - docker run $TEST_IMAGE npm test release: stage: release script: - docker pull $TEST_IMAGE - docker tag $TEST_IMAGE $RELEASE_IMAGE - docker push $RELEASE_IMAGE only: - master |
Dok dodajete gornji isječak koda, ne zaboravite ažurirati istaknuti dio svojim stvarnim podacima. Kada završite, spremite promjene pritiskom na gumb Commit changes. Ako ste radili izvan GitLaba, commitajte i pushajte svoje promjene.
Shvatimo što radi kod koji smo dodali u .gitlab-ci.yml datoteku. Prvi redak govori GitLabu da koristi službenu Docker-in-Docker sliku i povezuje je s docker-in-docker uslugom (docker:dind). Zatim definiramo faze za build, test i release. Faza build gradi sliku koristeći upute u Dockerfile i zatim je prenosi u Docker Registry koji smo postavili u prethodnom koraku.
Kada faza build uspije, faza test preuzima sliku, pokreće je kao kontejner i izvršava naredbu npm test kako bi izvršila automatizirane testove unutar nje. Ako faza test uspije, faza release preuzima kontrolu. U fazi release, slika se preuzima i označava kao node_pipeline:latest. Zatim se šalje natrag u registar.
Ovo je samo osnovna konfiguracija za demo projekt. Za vaše stvarne projekte mogli biste imati druge faze, na primjer staging, production, itd. Kada spremite datoteku nakon uređivanja, pokreće se cjevovod (pipeline). Zatim počinje izvršavati poslove. Vratite se na stranicu Node Pipeline. Trebali biste vidjeti da se posao trenutno izvodi:
Kliknite na ikonu indikatora CI kako biste vidjeli različite faze posla:
Kao što možete vidjeti na gornjoj snimci zaslona, sve su faze bile uspješne prema zelenim kvačicama. Možete kliknuti na svaku fazu kako biste vidjeli izlaz posla:
U izborniku s lijeve strane kliknite na Packages & Registries i odaberite Container Registry:
Ovo otvara stranicu s popisom dostupnih Docker slika za odabrani projekt. Slika koju smo izgradili i objavili trebala bi se pojaviti na popisu s dodijeljenom oznakom assigned:
Kliknite da biste otkrili različite oznake za sliku:
Ako imate instaliran Docker u svom lokalnom okruženju, možete preuzeti (pull) sliku i testirati radi li očekivano. Kliknite na ikonu Copy pokraj naziva oznake slike. Kopirat će u vaš međuspremnik puni naziv slike koji možete koristiti s naredbom docker pull:
|
1 2 |
docker pull feetspark.com:8888/hackins/node_pipeline:latest docker run -it --rm -p 8090:8090 feetspark.com:8888/hackins/node_pipeline:latest |
Gornje naredbe će preuzeti sliku i pokrenuti je unutar kontejnera:
Aplikacija se sada poslužuje na portu 8090. Ako otvorite svoj preglednik i odete na vaša-IP-adresa:8090 trebali biste vidjeti prikazanu stranicu:
Ako možete vidjeti takvu stranicu u svom pregledniku, onda ste uspješno izgradili Docker sliku i podijelili je na privatnom Docker Registry. U budućnosti, ako napravite bilo kakve promjene na master grani, faze definirane u .gitlab-ci.yml datoteci će se pokrenuti, a ako uspiju, nova Docker slika s oznakom latest će se ponovno izgraditi i poslati u registar.
Zaključak
U ovom projektu naučili ste kako dodati privileged GitLab runner na svoju vlastitu GitLab instancu kako biste mogli graditi Docker slike. Također ste konfigurirali privatni registar Docker slika za smještaj svojih slika. Koristeći Node pipeline projekt, uspjeli ste testirati svaku komponentu postavljanja i osigurati da se povezuju i komuniciraju kako je očekivano. Nakon što je vaša slika bila dostupna u registru, mogli ste je povući i potvrditi da se izvodi unutar spremnika.
Ovo je uvodni vodič koji vam daje osnove na kojima možete graditi. Pratite službenu GitLab dokumentaciju kako biste saznali više o GitLabu. Ova poveznica može pružiti informacije o GitLab Container Registry.
Za daljnje resurse o korištenju Dockera, možda biste željeli pogledati više vodiča na našem blogu:
- Dijeljenje podataka između Docker spremnika
- Postavljanje privatnog Docker registra na Ubuntu 18.04
- Kako dijeliti podatke između Docker spremnika i domaćina
- Čišćenje Docker resursa – slike, spremnici i volumeni
Sretno s radom!

















Komentari
Još nema komentara. Budite prvi.