Onion Information
Kontejnerizacija alatom Docker - GASERI
Razvoj aplikacija danas zahtijeva mnogo više od samog pisanja koda. Višestruki jezici, okviri, arhitekture i diskontinuirana sučelja između alata stvaraju ogromnu složenost. Docker pojednostavljuje i ubrzava tijek rada i daje razvojnim prog...
Onion Details
Page Clicks: 1
First Seen: 03/15/2024
Last Indexed: 09/18/2024
Onion Content
Kontejnerizacija alatom Docker - Razvoj aplikacija danas zahtijeva mnogo više od samog pisanja koda. Višestruki jezici, okviri, arhitekture i diskontinuirana sučelja između alata stvaraju ogromnu složenost. Docker pojednostavljuje i ubrzava tijek rada i daje razvojnim programerima slobodu za inovacije svojim izborom alata, aplikacija i okruženja za implementaciju za svaki projekt. Docker je otvorena platforma za razvoj, implementaciju i pokretanje aplikacija. Pruža mogućnost pakiranja i pokretanja aplikacije u izoliranom okruženju koje se naziva spremnik ili kontejner (engl. container ). Kontejneri sadrže sve što je potrebno za pokretanje aplikacije, tako da se ne morate oslanjati na ono što je trenutno instalirano na nekom računalu. Na taj način se mogu jednostavno dijeliti i možemo biti sigurni da će svi s kojima ih podijelimo dobiti isti kontejner koji radi na isti način. Ukratko, Docker omogućuje da se aplikacija izolira od svog okruženja, što omogućuje brzu implementaciju softvera i rješava problem ali radi na mom računalu koji se nekad javlja kod postavljanja aplikacije. Hint - Za više informacija proučite službenu dokumentaciju . Formalno, možemo reći da je Docker skup alata za kontejnerizaciju (poznatu još i pod nazivom kontejnerska virtualizacija ili virtualizacija na razini operacijskog sustava , engl. operating-system-level virtualization ) i dijeljenje aplikacija putem interneta (gdje mu je princip rada vrlo sličan Gitu). Sve je popularniji u svijetu, koristi ga vrlo veliki broj poslovnih subjekata i danas je dostupan kao paket u gotovo svim distribucijama Linuxa. Osnovni pojmovi i svojstva - Arhitektura - Docker koristi arhitekturu klijent-poslužitelj. Docker klijent je alat naredbenog retka koji korisniku omogućuje interakciju s Docker demonom (engl. daemon ). Docker klijent i demon mogu se izvoditi na istom sustavu ili se Docker klijent može povezati s udaljenim Docker demonom, međusobno komunicirajući putem REST API-ja. Drugi Docker klijent je Docker Compose, koji omogućuje rad s aplikacijama koje se sastoje od skupa kontejnera. O tome će biti više riječi u drugoj lekciji. Docker demon je pozadinska usluga koja radi na vašem operacijskom sustavu i upravlja izgradnjom, pokretanjem i distribucijom Docker objektata kao što su primjerice slike, kontejneri, mreže i volumeni. Docker demon čeka zahtjeve iz REST API-ja i u skladu s tim izvodi niz operacija. Daemon također može komunicirati s drugim demonima za upravljanje Docker uslugama. Objekti - Kada koristite Docker, stvarate i koristite slike, kontejnere, mreže, volumene, dodatke i druge objekte. Ovaj odjeljak je kratak pregled nekih od tih objekata. Kontejneri pružaju mogućnost pakiranja i pokretanja aplikacija u izoliranom okruženju koje sadrži sve što je potrebno na njihovo pokretanje: konfiguracije, skripte, biblioteke itd. Na ovaj način programeri mogu stvoriti predvidljiva okruženja izolirana od drugih aplikacija koja se mogu izvoditi bilo gdje i služiti kao jedinica za distribuciju i testiranje aplikacije. Virtualni stroj, često i virtualna mašina (engl. virtual machine , kraće VM), je softversko okruženje koje simulira stvarni hardver i u kojem se može pokrenuti određeni operacijski sustav. Svaki VM sadrži kompletnu kopiju operacijskog sustava, aplikacije, potrebne binarne datoteke i biblioteke, koje zauzimaju desetke GB. Stoga su računalni troškovi potrošeni na hardversku virtualizaciju za korištenje gostujućeg OS-a značajni. Kontejneri imaju drugačiji pristup jer virtualiziraju operacijski sustav, a ne hardver. Kontejneri su apstrakcija na razini aplikacije koja pakira kod i ovisnosti zajedno. Više kontejnera može se izvoditi na istom računalu i dijeliti jezgru OS-a s drugim kontejnerima, a svaki se izvodi kao izolirani proces u korisničkom prostoru. Kontejneri zauzimaju mnogo manje prostora od virtualnih strojeva, slike kontejnera obično imaju nekoliko desetaka MB, te su prenosivije i učinkovitije. Kada se kontejner pokrene, on koristi izolirani datotečni sustav. Ovaj prilagođeni datotečni sustav predstavlja sliku kontejnera. Budući da slika sadrži datotečni sustav kontejnera, mora sadržavati sve što je potrebno za pokretanje aplikacije - sve ovisnosti, konfiguracije, skripte, binarne datoteke i sl. Slika također sadrži druge konfiguracije za kontejner, kao što su varijable okruženja, zadana naredba za pokretanje i drugi metapodaci. Dakle, slika je predložak za čitanje koja sadrži skup uputa za stvaranje kntejnera, a kontejner je tada pokrenuta instanca slike. Docker registar je spremište za Docker slike. Docker klijenti povezuju se s registrima za preuzimanje slika za korištenje ili učitavanje slika koje su izradili. Registri mogu biti javni ili privatni. Glavni javni registar je Docker Hub , web sjedište na kojem se dijele slike kontejnera. Na njemu je moguće pronaći brojne gotove slike, što je i jedan od razloga popularnosti Dockera. Posebna vrsta slika na Docker Hubu su službene slike (engl. official images ), čiji razvoj i održavanje financira sam Docker. Osim slike hello-world kojom se testira ispravnost instalacije Dockera, u službene slike spadaju httpd , python , php , node , haproxy , mariadb , mongo , postgres , redis , nextcloud , memcached , docker (da, Docker može pokrenuti drugi Docker u kontejneru koji onda može pokretati Docker kontejnere ) i brojne druge . Na stranici svake od službenih slika dane su detaljne upute za njezino korištenje. Docker volumeni (engl. volumes ) široko su korišten i koristan alat za osiguravanje postojanosti podataka tijekom rada unutar kontejnera. Volumeni su datotečni sustavi postavljeni na kontejnere za očuvanje podataka koje generira kontejner koji radi. Volumeni se pohranjuju na domaćinu i omogućuju jednostavno sigurnosno kopiranje te dijeljenje datotečnog sustava između kontejnera. Tip - U nastavku koristimo službene Dockerove alate naredbenog retka, ali moguće je koristiti i Visual Studio Code koji nudi službeno proširenje za Docker ( pregled značajki ). Dodatno, korištenjem službenih proširenja za udaljeni rad moguće je razvijati softver unutar Docker kontejnera . Za one koji žele znati više o razvoju softvera u kontejnerima, dobro mjesto za započeti je Microsoftov službeni tečaj za Docker početnike . Rad s kontejnerima aplikacija i usluga - U ovom dijelu naučit ćete kako preuzeti slike i pokrenuti kontejnere, ali i o izlolaciji samih kontejnera. Možete provjeriti je li Docker instaliran i prikupiti neke informacije o trenutnoj verziji pomoću sljedeće naredbe: Također postoji brz i jednostavan način da vidite koliko je Docker kontejnera trenutno pokrenuto i vidite neke od Dockerovih konfiguriranih opcija: Korištenje docker sastoji se od prosljeđivanja niza opcija, naredbi i praćenih argumentima. Sintaksa ima ovaj oblik: Da biste vidjeli sve dostupne podnaredbe, upišite: Pokretanje kontejnera hello-world - Kao i sa svim tehničkim stvarima, hello world dobro je mjesto za početak. Upišite donju naredbu da preuzmete sliku iz Docker huba koja će kreirati kontejner hello-world : Izlaz pokretanja kontejnera temeljenog na slici hello-world govori što se upravo dogodilo. Docker koji radi na vašem terminalu pokušao je pronaći sliku pod nazivom hello-world . Budući da ste tek započeli, nema slika pohranjenih lokalno ( Unable to find image 'hello-world:latest' locally ) pa Docker odlazi u svoj zadani Docker registar, Docker Hub, i traži sliku pod nazivom hello-world . Tamo pronalazi sliku, povlači je i zatim pokreće u kontejneru. Jedina funkcija hello-world -a je ispisati tekst koji vidite na vašem terminalu, nakon čega kontejner izlazi. Zadatak - Pokrenite kontejner zasnovan na slici Alpine Linuxa . Alpine Linux je lagana distribucija Linuxa pa se brzo skida i pokreće. Docker ima mogućnost pokretanja naredbe unutar kontejnera u interaktivnom terminalu korištenjem parametara -i i -t . Pokrenite naredbu /bin/sh unutar kontejnera Alpine Linuxa. Kada ste unutar kontejnera koji pokrenuli ljusku, možete isprobati nekoliko naredbi poput ls -l , uname -a i drugih, isprobajte ih. Imajte na umu da je Alpine Linux malena distribucija pa bi moglo nedostajati nekoliko naredbi. Izađite iz ljuske i kontejnera upisivanjem naredbe exit . Upravljanje Dockerovim slikama - Sada ste spremni za instaliranje slika s Dockerom. Ako trebate tražiti željeni softver putem Dockera, možete koristiti sljedeću sintaksu naredbe: Na primjer, pokušajmo pretražiti python, koji je popularan programski jezik opće namjene: Kao što vidite, postoji jedna službena slika za python, jednostavno nazvana python. Dostupna su i druga izdanja. Tada je potrebno pročitati njihove opise da vidite što rade drugačije od službene slike. Nakon što znate koju sliku želite preuzeti, možete upotrijebiti sljedeću sintaksu kako biste uputili Docker za preuzimanje željenog softvera: Na primjer, preuzmimo python: Izlaz na gornjoj snimci zaslona pokazuje da je Docker uspio pronaći i preuzeti sliku koju smo naveli. Popis svih instaliranih Docker slika možemo dobiti naredbom: Upravljanje Dockerovim kontejnerima - Kada je slika preuzeta Docker kontejner pokrećemo koristeći sljedeću sintaksu naredbe: Pokrenimo Docker kontejner na temelju prethodne slike. Prethodnoj naredbi možemo dodati nastavke ls -l . Obratite tada pozornost na izlaz narebe. Upravljanje kontejnerima vršimo naredbom docker container . Za provjeru kontejnera u stanju rada, koristite sljedeću naredbu: Možemo koristiti i naredbu docker ps za istu stvar ili ls umjesto list . Vidimo da nema aktivnih kontejnera. Dodamo li parametar -a ( --all ), bit će prikazani svi kontejneri: Primijetite da STATUS stupac pokazuje da su prikazani kontejneri izašli prije nekog vremena. Za prikaz posljednjeg kontejnera kojeg ste stvorili, dodajte mu parametar -l: Ponovo upišimo naredbu: Sada možemo vidjeti da imamo dva kontejnera i dvije slike. Za pokretanje zaustavljenog kontejnera upotrijebite docker start , nakon čega slijedi ID kontejnera ili naziv kontejnera. Pokrenimo kontejner s ID-om 415b131fe935: Za zaustavljanje kontejnera koji radi upotrijebite docker stop , nakon čega slijedi ID ili njegov naziv. Ovaj put ćemo koristiti naziv koji je Docker dodijelio kontejneru, a to je intelligent_babbage : Nakon što odlučite da vam kontejner više ne treba, uklonite ga pomoću naredbe docker rm , opet koristeći ID kontejnera ili ime. Izolacija Docker kontejnera - Pokrenite nekoliko naredbi docker container run za Alpine kontejner. Naredba docker container ls -a nam pokazuje da je na popisu nekoliko kontejnera. Zašto je navedeno toliko kontejnera ako su svi s alpine slike? Ovo je ključni sigurnosni koncept u svijetu Docker kontejnera! Iako je svaka docker container run naredba koristila istu alpine sliku, svako izvršenje bilo je zaseban, izoliran kontejner. Svaki kontejner ima zaseban datotečni su...