Razumijevanje Dockera

Koristim Docker već nekoliko mjeseci da strukturiram proces razvoja/isporuke web projekata. Čitaocima Habrakhabra nudim prijevod uvodnog članka o dockeru - "Razumijevanje dockera".

Šta je docker?

Docker je otvorena platforma za razvoj, isporuku i rad aplikacija. Docker je dizajniran za bržu isporuku vaših aplikacija. Uz docker, možete odvojiti svoju aplikaciju od svoje infrastrukture i tretirati infrastrukturu kao upravljanu aplikaciju. Docker vam pomaže da brže pošaljete svoj kod, brže testirate, brže otpremate aplikacije i smanjite vrijeme između pisanja koda i pokretanja koda. Docker to radi kroz laganu platformu za virtuelizaciju kontejnera, koristeći procese i uslužne programe koji vam pomažu da upravljate i hostujete svoje aplikacije.

U svojoj srži, docker vam omogućava pokretanje gotovo svake aplikacije, sigurno izolirane u kontejneru. Sigurna izolacija vam omogućava da pokrenete više kontejnera na istom hostu u isto vrijeme. Lagana priroda kontejnera, koji radi bez dodatnog opterećenja hipervizora, omogućava vam da izvučete više od svog hardvera.

Platforma i alati za virtualizaciju kontejnera mogu biti korisni u sljedećim slučajevima:

  • pakovanje vaše aplikacije (i komponenti koje koristite) u docker kontejnere;
  • distribuciju i isporuku ovih kontejnera vašim timovima za razvoj i testiranje;
  • postavljanje ovih kontejnera na vaše proizvodne lokacije, kako u podatkovnim centrima tako iu oblacima.

Za šta mogu koristiti docker?

Brzo objavite svoje aplikacije

Docker je odličan za organizaciju razvojnog ciklusa. Docker omogućava programerima da pokreću lokalne kontejnere s aplikacijama i uslugama. Što vam naknadno omogućava integraciju s procesom kontinuirane integracije i tijeka rada.

Na primjer, vaši programeri pišu kod lokalno i dijele svoj razvojni stog (skup Docker slika) sa kolegama. Kada budu spremni, guraju kod i kontejnere na mjesto za testiranje i izvode sve potrebne testove. Sa mjesta za testiranje mogu poslati kod i slike u proizvodnju.

Lakše polaganje i rasklapanje

Platforma bazirana na docker kontejnerima olakšava prijenos vašeg tereta. Docker kontejneri mogu raditi na vašoj lokalnoj mašini, bilo stvarnoj ili virtuelnoj mašini u data centru, ili u oblaku.

Prenosivost i lagana priroda docker-a olakšavaju dinamičko upravljanje vašim radnim opterećenjem. Docker možete koristiti za postavljanje ili gašenje vaše aplikacije ili usluga. Brzina Docker-a omogućava da se to uradi u skoro realnom vremenu.

Veća opterećenja i veća nosivost

Docker je lagan i brz. Pruža otpornu, isplativu alternativu virtualnim mašinama baziranim na hipervizoru. Posebno je korisno u okruženjima sa visokim opterećenjem, na primjer, kada kreirate vlastiti oblak ili platformu kao uslugu. Ali također je koristan za male i srednje aplikacije kada želite više iskoristiti resurse koje imate.

Glavne Docker komponente

Docker se sastoji od dvije glavne komponente:

  • Docker: platforma za virtuelizaciju otvorenog koda;
  • Docker Hub: Naša platforma-kao-usluga za distribuciju i upravljanje Docker kontejnerima.

Bilješka! Docker se distribuira pod licencom Apache 2.0.

Docker arhitektura

Docker koristi arhitekturu klijent-server. Docker klijent komunicira s Docker demonom, koji preuzima teret kreiranja, pokretanja i distribucije vaših kontejnera. I klijent i server mogu raditi na istom sistemu, možete povezati klijenta na udaljeni docker demon. Klijent i server komuniciraju preko utičnice ili RESTful API-ja.

Razumijevanje Dockera

Docker daemon

Kao što je prikazano na dijagramu, demon radi na host mašini. Korisnik ne komunicira direktno sa serverom, već za to koristi klijenta.

Docker klijent

Docker klijent, docker program, je glavni interfejs za Docker. Prima komande od korisnika i stupa u interakciju sa docker demonom.

Unutrašnji docker

Da biste razumjeli od čega se sastoji docker, morate znati o tri komponente:

  • slike
  • registar
  • kontejneri

Slike

Docker slika je predložak samo za čitanje. Na primjer, slika može sadržavati Ubuntu operativni sistem sa Apacheom i aplikacijom na njemu. Slike se koriste za kreiranje kontejnera. Docker olakšava kreiranje novih slika, ažuriranje postojećih ili možete preuzeti slike koje su kreirali drugi ljudi. Slike su komponente docker build-a.

Registar

Docker registar pohranjuje slike. Postoje javni i privatni registri iz kojih možete preuzeti ili otpremiti slike. Javni Docker registar je Docker čvorište. Tu je pohranjena ogromna zbirka slika. Kao što znate, slike možete kreirati vi ili možete koristiti slike koje su kreirali drugi. Registri su komponenta distribucije.

Kontejneri

Kontejneri su slični imenicima. Kontejneri sadrže sve što je aplikacija potrebno za pokretanje. Svaki kontejner je kreiran od slike. Kontejneri se mogu kreirati, pokretati, zaustavljati, migrirati ili brisati. Svaki kontejner je izoliran i pruža sigurnu platformu za aplikaciju. Kontejneri su sastavni dio posla.

Dakle, kako Docker funkcionira?

Za sada znamo da:

  • možemo kreirati slike u kojima se nalaze naše aplikacije;
  • možemo kreirati kontejnere od slika za pokretanje aplikacija;
  • Slike možemo distribuirati preko Docker Hub-a ili drugog registra slika.

Pogledajmo kako se ove komponente uklapaju.

Kako slika funkcionira?

Već znamo da je slika predložak samo za čitanje iz kojeg se kreira kontejner. Svaka slika se sastoji od skupa nivoa. Docker koristi union fajl sistem da kombinujete ove nivoe u jednu sliku. Sistem datoteka Union dozvoljava da se datoteke i direktoriji iz različitih sistema datoteka (različite grane) transparentno preklapaju, stvarajući koherentan sistem datoteka.

Jedan od razloga zašto je docker lagan je taj što koristi ovakve slojeve. Kada promijenite sliku, kao što je ažuriranje aplikacije, kreira se novi sloj. Dakle, bez zamjene cijele slike ili ponovnog sastavljanja, kao što to možda morate učiniti s virtualnom mašinom, samo se sloj dodaje ili ažurira. I ne morate distribuirati cijelu novu sliku, distribuira se samo ažuriranje, što olakšava i brže distribuira slike.

U srcu svake slike je osnovna slika. Na primjer, ubuntu, osnovna slika Ubuntua, ili fedora, osnovna slika Fedora distribucije. Slike možete koristiti i kao osnovu za kreiranje novih slika. Na primjer, ako imate apache sliku, možete je koristiti kao osnovnu sliku za svoje web aplikacije.

Bilješka! Docker obično povlači slike iz Docker Hub registra.

Docker slike se mogu kreirati od ovih osnovnih slika; korake za kreiranje ovih slika nazivamo uputstvima. Svaka instrukcija stvara novu sliku ili nivo. Upute će biti sljedeće:

  • run command
  • dodavanje datoteke ili direktorija
  • kreiranje varijable okruženja
  • upute o tome što pokrenuti kada se pokrene spremnik ove slike

Ove upute su pohranjene u datoteci Dockerfile. Docker ovo čita Dockerfile, kada izgradite sliku, izvršava ove upute i vraća konačnu sliku.

Kako radi docker registar?

Registar je spremište za docker slike. Kada se slika kreira, možete je objaviti u javnom Docker Hub registru ili u svom ličnom registru.

Pomoću docker klijenta možete tražiti već objavljene slike i preuzeti ih na svoju docker mašinu kako biste kreirali kontejnere.

Docker Hub pruža javna i privatna spremišta slika. Pretraživanje i preuzimanje slika iz javnih spremišta dostupno je svima. Sadržaj privatnih skladišta nije uključen u rezultate pretraživanja. I samo vi i vaši korisnici možete primati ove slike i kreirati kontejnere od njih.

Kako radi kontejner?

Kontejner se sastoji od operativnog sistema, korisničkih datoteka i metapodataka. Kao što znamo, svaki kontejner je kreiran od slike. Ova slika govori Docker-u šta je u kontejneru, koji proces da pokrene, kada se kontejner pokreće i druge konfiguracione podatke. Docker slika je samo za čitanje. Kada docker pokrene kontejner, on kreira sloj za čitanje/pisanje na vrhu slike (koristeći union sistem datoteka kao što je ranije navedeno) u kojem se aplikacija može pokrenuti.

Šta se dešava kada se kontejner pokrene?

Ili korištenjem programa docker, ili koristeći RESTful API, docker klijent govori demonu docker-a da pokrene kontejner.

$ sudo docker run -i -t ubuntu /bin/bash

Pogledajmo ovu naredbu. Klijent se pokreće pomoću naredbe docker, sa opcijom run, koji kaže da će biti pušten novi kontejner. Minimalni zahtjevi za pokretanje kontejnera su sljedeći atributi:

  • koju sliku koristiti za kreiranje kontejnera. U našem slučaju ubuntu
  • naredbu koju želite pokrenuti kada se kontejner pokrene. U našem slučaju /bin/bash

Šta se dešava ispod haube kada pokrenemo ovu komandu?

Docker, po redu, radi sljedeće:

  • preuzima ubuntu sliku: docker provjerava dostupnost slike ubuntu na lokalnom računaru, a ako ga nema, preuzmite ga sa Docker čvorište. Ako postoji slika, ona je koristi za kreiranje kontejnera;
  • kreira kontejner: kada je slika primljena, docker je koristi za kreiranje kontejnera;
  • inicijalizira sistem datoteka i montira nivo samo za čitanje: kontejner se kreira u sistemu datoteka i slika se dodaje na nivo samo za čitanje;
  • inicijalizira mrežu/most: kreira mrežno sučelje koje omogućava Docker-u da komunicira sa host mašinom;
  • Postavljanje IP adrese: pronalazi i postavlja adresu;
  • Pokreće navedeni proces: pokreće vašu aplikaciju;
  • Obrađuje i proizvodi izlaz iz vaše aplikacije: povezuje i bilježi standardni ulaz, izlaz i tok grešaka vaše aplikacije tako da možete pratiti kako vaša aplikacija radi.

Sada imate ispravan kontejner. Možete upravljati svojim kontejnerom, komunicirati sa svojom aplikacijom. Kada odlučite da zaustavite aplikaciju, izbrišite kontejner.

Korištene tehnologije

Docker je napisan u Go i koristi neke karakteristike Linux kernela za implementaciju gore navedenih funkcionalnosti.

Imenski prostori

Docker koristi tehnologiju namespaces organizirati izolovane radne prostore, koje nazivamo kontejnerima. Kada pokrenemo kontejner, docker kreira skup imenskih prostora za taj kontejner.

Ovo stvara izolovani sloj, sa svakim aspektom kontejnera koji radi u sopstvenom imenskom prostoru i nema pristup spoljnom sistemu.

Lista nekih imenskih prostora koje docker koristi:

  • pid: izolovati proces;
  • net: za upravljanje mrežnim sučeljima;
  • ipc: za upravljanje IPC resursima. (ICP: InterProccess Communication);
  • mnt: za upravljanje tačkama montiranja;
  • UTC: za izolaciju kernela i generiranje kontrolne verzije (UTC: Unix sistem dijeljenja vremena).

Kontrolne grupe

Docker također koristi tehnologiju cgroups ili kontrolne grupe. Ključ za izolovano pokretanje aplikacije je da aplikaciji obezbedite samo resurse koje želite da obezbedite. Ovo osigurava da će kontejneri biti dobri susjedi. Kontrolne grupe vam omogućavaju da dijelite dostupne hardverske resurse i, ako je potrebno, postavite ograničenja i ograničenja. Na primjer, ograničite moguću količinu memorije za spremnik.

Union File System

Union File Sysem ili UnionFS je sistem datoteka koji radi kreiranjem slojeva, što ga čini vrlo laganim i brzim. Docker koristi UnionFS za kreiranje blokova od kojih je kontejner izgrađen. Docker može koristiti nekoliko varijanti UnionFS-a uključujući: AUFS, btrfs, vfs i DeviceMapper.

Formati kontejnera

Docker kombinuje ove komponente u omotač koji nazivamo format kontejnera. Zadani format se zove libcontainer. Docker također podržava tradicionalni format kontejnera na Linuxu LXC. U budućnosti, Docker može podržavati druge formate kontejnera. Na primjer, integracija sa BSD Jails ili Solaris zonama.

izvor: www.habr.com

Dodajte komentar