Blog

Docker kontejneri – kako na postojeću infrastrukturu “ugurati” još aplikacija?

Kontejneri kao alternativni arhitekturalni pristup virtualizaciji omogućuju bolju iskoristivost novih, ali i postojećih resursa organizacije u odnosu na danas prevladavajuća virtualna računala.
, 18.04.2017.

Današnje organizacije imaju instaliran sve veći broj aplikacija koje imaju različite zahtjeve što se tiče okruženja u kojem se izvršavaju (verzija Jave, programskih biblioteka itd.). Stoga se javlja potreba za međusobnom izolacijom aplikacija, što se tradicionalno postiže instalacijom aplikacija u zasebna virtualna računala izrađena po mjeri pojedine aplikacije. Osnovna ideja kontejnera je da se izolacijom aplikacija na nivou kontejnera unutar istog operacijskog sustava instalira više međusobno nezavisnih aplikacija. Na taj način smanjuje se broj instanci operativnog sustava, a povećava broj korisnih poslovnih aplikacija na istoj infrastrukturi. Takvim smanjenjem postižu se uštede hardverskih resursa infrastrukture, koji se umjesto za održavanje operativnih sustava koriste za izvršavanje poslovnih aplikacija.

Docker kao najpopularnija implementacija kontejnerske tehnologije učinio je tehnologiju kontejnera jednostavnom za korištenje i primjenjivu širokom krugu ljudi. U svojoj osnovi Docker je Linux tehnologija koja pruža novu razinu apstrakcije i automatizacije virtualizacije na nivou operativog sustava koristeći već dostupne izolacijske funkcionalnosti kernela i union-capable datotečnog sustava.

docker kontenjeri

Usporedba arhitekture s virtualnim računalima i kontejnerima. Korištenje kontejnera smanjuje broj instanci operativnih sustava u okolini. (Izvor: www.docker.com)

Usporedimo li arhitekturu gdje izolaciju aplikacija postižemo korištenjem odvojenih virtualnih računala (slika 1 – lijevo) i arhitekturu gdje izolaciju postižemo Docker kontejnerima (slika 1 – desno) dolazimo do zaključka: ako na jedan poslužitelj želimo instalirati tri međusobno odvojene aplikacije, potrebne su nam minimalno četiri instalacije operativnog sustava. S druge strane, u slučaju korištenja kontejnera za izolaciju aplikacija potreban nam je samo jedan operativni sustav. Korištenjem kontejnera imamo tri operativna sustava manje, čime su oslobođeni resursi poslužitelja za instalaciju dodatnih aplikacija.

Što je zapravo kontejner?

Kontejner je slika datotečnog sustava koja definira sve potrebne runtime komponente neophodne aplikaciji da bi ona uspješno fukcionirala. Stoga možemo reći da je svako virtualno računalo “kontejner”. Svako virtualno računalo sa sobom donosi cijeli operativni sustav sa svim svojim servisima, koji troše puno hardverskih resursa i to je njihov glavni nedostatak. Docker kontejneri taj problem eliminiraju jer nam treba samo jedan operacijski sustav, a izolacija se odvija na razini datotečnog sustava i kernela OS-a. Izolacija na razini datotečnog sustava omogućena je korištenjem union-capable datotečnog sustava. Takvi datotečni sustavi grade kompletnu sliku (image) iz zasebno definiranih slojeva, čijom unijom dobivamo funkcionalno okruženje.

docker kontenjeri 2

Docker Engine koristi klijent-server arhitekturu u kojoj su klijent, servis i repozitorij neovisne komponente. Na taj način možemo arhitekturu rješenja prilagoditi vlastitom okruženju. Najčešće s jednim klijentom upravljamo s nekoliko Docker servisa, koji su svi spojeni na isti repozitorij slika. (Izvor: www.docker.com)

Glavna komponenta Dockera, Docker Engine sastoji se od servisa koji je pokrenut na host operacijskom sustavu, Rest API-ja koji definira sučelje preko kojeg se upravlja Docker servisom te komandnolinijskog klijenta za API preko kojeg izdajemo naredbe. Docker servis zadužen je za upravljanje životnim ciklusima svakog pojedinog kontejnera, brine se o njihovoj međusobnoj izolaciji, dodjeli resursa operativnog sustava i izgradnji slika datotečnog sustava svakog kontejnera. Kreiranje slika radi se pomoću tzv. Docker datoteke (Dockerfile), koja sadrži popis Docker naredbi preko kojih Docker servis zna kako izgraditi novu sliku. Kreirane slike pohranjuju se na poslužitelj na kojem su izrađene. Docker dolazi s ugrađenom podrškom za upravljanje slikama preko centralnog repozitorija slika. Postoji nekoliko javno dostupnih repozitorija Docker slika. Docker servis je inicijalno postavljen tako da koristi DockerHub repozitorij u kojem se nalazi već čitav niz gotovih slika. One u sebi sadrže instalacije popularnih aplikacija u kontejnerskom obliku, poput baza podataka, servlet kontejnera, Java okruženja i sl. Budući da se svaka slika može koristiti kao baza za novu sliku, u pravilu kreiranje naše vlastite slike započinjemo na nekoj već gotovoj slici.

Potrebno je naglasiti da su sve kreirane slike uvijek dostupne samo za čitanje. Aplikacije koje imaju potrebu trajno pohranjivati podatke moraju ih spremati na neku lokaciju koja nije sastavni dio slike. Ako se podaci spremaju na lokaciju koja je dio slike, oni će se obrisati u trenutku brisanja kontejnera.

Takav koncept datoteke koja jedinstveno opisuje pojedinu sliku znači da se instalacija aplikacije, koja je namijenjena izvršavanju unutar kontejnera, radi slanjem Docker datoteke ili preuzimanjem već gotove slike iz centralnog repozitorija na server na kojem se izvršava Docker servis.

Što to znači za svakodnevni rad?

Osim poboljšanja vezanih uz bolju iskoristivost infrastrukture, tehnologija kontejnera se primjenjuje od samog početka razvojnog ciklusa. Time omogućuje razvojnim inženjerima i testerima brže stvaranje novih okolina. Istovremeno nudi garanciju istovjetnosti okoline od razvojne stanice kroz testna, pretprodukcijska i produkcijska okruženja. Zbog tog svojstva kontejneri su posebno pogodni za isporuku u oblak. S druge strane, razvojni inženjeri uz dosadašnja znanja moraju steći i kompetencije upravljanja okolinom aplikacije, a sistemski inženjeri moraju naučiti kako upravljati novom infrastrukturom. Samim time jasne granice između tih poslovnih uloga sve više nestaju i stvara se jedna zajednička uloga (DevOps). Također, Docker kontejneri predstavljaju dobru osnovu za izgradnju aplikacija temeljenih na mikroservisnoj arhitekturi o kojoj možete više čitati u ostalim člancima ovog broja.

I CROZ je prepoznao kontejnere kao tehnologiju koja je korisna u svakodnevnom radu pa neki timovi već koriste Docker kontejnere tijekom razvojnog procesa za potrebe razvoja i testiranja aplikacija. Također, cilj je za sve nove aplikacije koristiti Docker kontejnere od samog početka razvoja pa do produkcije. Docker kontejneri su tehnologija koja tek treba zaživjeti i kod korisnika. U skladu s time donesena je odluka da se sve CROZ-ove interne aplikacije razvijaju na Dockeru kako bismo stekli i praktično iskustvo razvoja aplikacija i upravljanja kontejnerskom infrastrukturom.

Zaključno, tehnologija kontejnera je sljedeći korak u pristupu virtualizaciji infrastrukture. Mijenja ustaljene paradigme razvoja arhitekture aplikacija primarno u smjeru mikroservisa, a Docker sa svojom jednostavnošću i širokim spektrom alata, koji se svakodnevno nadograđuju i proširuju funkcionalnostima, predstavlja najbolji izbor za uvođenje tehnologije kontejnera unutar organizacije.

Tagovi:
Povratak