Zaronimo u svet Docker arhitekture i njenih ključnih elemenata.
Pretpostavljam da već imate osnovno razumevanje Dockera. Ukoliko je to nije slučaj, možete pogledati ovaj prethodni članak kako biste se upoznali sa osnovama.
Verujem da shvatate značaj Dockera u DevOps okruženju. Iza ovog moćnog alata, mora postojati sofisticirana i dobro osmišljena arhitektura, zar ne?
Pre nego što detaljnije pričamo o tome, dozvolite mi da vam predstavim kako su izgledali sistemi virtuelizacije u prošlosti, i kako izgledaju danas.
Tradicionalna naspram nove generacije virtuelizacije
U prošlosti, kreirali smo virtuelne mašine, pri čemu je svaka VM imala svoj operativni sistem, što je zauzimalo mnogo prostora i opterećivalo sistem.
Sa Docker kontejnerima, sada imamo jedan operativni sistem čije resurse dele svi kontejneri. To ga čini laganim i omogućava brzo pokretanje, za svega nekoliko sekundi.
Docker Arhitektura
Ispod je prikazan jednostavan dijagram Docker arhitekture.
Dozvolite mi da objasnim komponente Docker arhitekture.
Docker Engine
Ovo je srž celog Docker sistema. Docker Engine je aplikacija koja prati klijent-server arhitekturu. Instalira se na host mašini. Postoje tri komponente unutar Docker Engine-a:
- Server: To je Docker demon, poznat kao dockerd. On kreira i upravlja Docker slikama, kontejnerima, mrežama, itd.
- REST API: Koristi se za davanje instrukcija Docker demonu, šta treba da uradi.
- Interfejs komandne linije (CLI): To je klijent koji se koristi za unošenje Docker komandi.
Docker Klijent
Korisnici Dockera komuniciraju sa njim preko klijenta. Kada se pokrene bilo koja Docker komanda, klijent je prosleđuje dockerd demonu, koji je izvršava. Docker API koriste Docker komande. Docker klijent može komunicirati sa više demona.
Docker Registri
To je lokacija na kojoj se čuvaju Docker slike. Može biti javni ili privatni Docker registar. Docker Hub je podrazumevana lokacija za Docker slike, javni registar u kojem se čuvaju. Takođe možete kreirati i pokrenuti sopstveni privatni registar.
Kada izvršite komande `docker pull` ili `docker run`, potrebna Docker slika se preuzima iz konfigurisanog registra. Kada izvršite komandu `docker push`, Docker slika se čuva u konfigurisanom registru.
Docker Objekti
Dok radite sa Dockerom, koristite slike, kontejnere, volumene, mreže; sve su to Docker objekti.
Slike
Docker slike su šabloni samo za čitanje, koji sadrže uputstva za kreiranje Docker kontejnera. Docker slika može se preuzeti sa Docker Hub-a i koristiti u datom obliku. Možete dodati dodatna uputstva osnovnoj slici i kreirati novu, modifikovanu Docker sliku. Takođe možete kreirati sopstvene Docker slike koristeći Dockerfile. Kreirajte Dockerfile sa svim uputstvima za kreiranje i pokretanje kontejnera. Tako ćete kreirati vašu prilagođenu Docker sliku.
Docker slika ima osnovni sloj koji je samo za čitanje, a gornji sloj je moguće menjati. Kada izmenite Dockerfile i ponovo ga kreirate, samo izmenjeni deo se ponovo kreira u gornjem sloju.
Kontejneri
Kada pokrenete Docker sliku, ona kreira Docker kontejner. Sve aplikacije i njihovo okruženje rade unutar tog kontejnera. Možete koristiti Docker API ili CLI da pokrenete, zaustavite ili izbrišete Docker kontejner.
Ispod je primer komande za pokretanje Ubuntu Docker kontejnera:
docker run -i -t ubuntu /bin/bash
Volumeni
Trajni podaci koje generiše Docker, i koje koriste Docker kontejneri, se čuvaju u volumenima. Njima u potpunosti upravlja Docker preko Docker CLI ili Docker API-ja. Volumeni rade i na Windows i na Linux kontejnerima. Umesto zadržavanja podataka u sloju kontejnera za pisanje, uvek je bolja opcija koristiti volume za te podatke. Sadržaj volumena postoji izvan životnog ciklusa kontejnera, pa korišćenje volumena ne povećava veličinu kontejnera.
Možete koristiti `-v` ili `–mount` zastavicu da pokrenete kontejner sa volumenom. U ovom primeru komande, koristimo `geekvolume` volumen sa `vdzvdz` kontejnerom.
docker run -d --name techblog.co.rs -v geekvolume:/app nginx:latest
Mreže
Docker mreža je prolaz kroz koji komuniciraju svi izolovani kontejneri. U Dockeru, postoji uglavnom pet mrežnih drajvera:
Bridge | Ovo je podrazumevani mrežni drajver za kontejnere. Ovu mrežu koristite kada vaša aplikacija radi na samostalnim kontejnerima, tj. više kontejnera komunicira sa istim Docker hostom. |
Host | Ovaj drajver uklanja mrežnu izolaciju između Docker kontejnera i Docker hosta. Koristi se kada vam nije potrebna mrežna izolacija između hosta i kontejnera. |
Overlay | Ova mreža omogućava servisima da međusobno komuniciraju. Koristi se kada se kontejneri pokreću na različitim Docker hostovima, ili kada se rojevi servisa formiraju od više aplikacija. |
None | Ovaj drajver onemogućava sve umrežavanje. |
macvlan | Ovaj drajver dodeljuje MAC adresu kontejnerima kako bi izgledali kao fizički uređaji. Saobraćaj se usmerava između kontejnera preko njihovih MAC adresa. Ova mreža se koristi kada želite da kontejneri izgledaju kao fizički uređaji, na primer dok migrirate VM setup. |
Zaključak
Nadam se da vam ovo daje ideju o Docker arhitekturi i njenim bitnim komponentama. Istražujte Docker kako biste saznali više, a ako ste zainteresovani za praktičnu obuku, pogledajte ovaj Docker Mastery kurs.
Da li ste uživali čitajući ovaj članak? Šta mislite o tome da ga podelite sa drugima?