Razumijevanje Dockera

Već nekoliko mjeseci koristim Docker za strukturiranje procesa razvoja/isporuke web projekata. Čitateljima Habrakhabra nudim prijevod uvodnog članka o dockeru - "Razumijevanje dokera".

Što je docker?

Docker je otvorena platforma za razvoj, isporuku i rad aplikacija. Docker je dizajniran za bržu isporuku vaših aplikacija. Pomoću dockera možete odvojiti svoju aplikaciju od infrastrukture i tretirati infrastrukturu kao upravljanu aplikaciju. Docker vam pomaže brže slati kod, brže testirati, brže slati aplikacije i smanjiti vrijeme između pisanja koda i pokretanja koda. Docker to čini putem lagane platforme za virtualizaciju spremnika, koristeći procese i uslužne programe koji vam pomažu u upravljanju i hostiranju vaših aplikacija.

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

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

  • pakiranje vaše aplikacije (i komponenti koje koristite) u docker spremnike;
  • distribucija i isporuka ovih spremnika vašim timovima za razvoj i testiranje;
  • postavljanje ovih spremnika na vaša proizvodna mjesta, kako u podatkovnim centrima tako iu oblacima.

Za što mogu koristiti docker?

Brzo objavite svoje aplikacije

Docker je odličan za organiziranje razvojnog ciklusa. Docker omogućuje programerima pokretanje lokalnih spremnika s aplikacijama i uslugama. Što vam naknadno omogućuje integraciju s procesom kontinuirane integracije i tijek rada implementacije.

Na primjer, vaši programeri pišu kod lokalno i dijele svoj razvojni skup (skup Docker slika) s kolegama. Kad su spremni, šalju kod i spremnike na mjesto testiranja i pokreću sve potrebne testove. S mjesta testiranja mogu poslati kod i slike u proizvodnju.

Lakše postavljanje i rasklapanje

Platforma temeljena na docker kontejneru olakšava prijenos vašeg tereta. Docker spremnici mogu se izvoditi na vašem lokalnom računalu, bilo stvarnom ili virtualnom računalu u podatkovnom centru ili u oblaku.

Prenosivost i lagana priroda dockera olakšava dinamičko upravljanje vašim radnim opterećenjem. Docker možete koristiti za implementaciju ili isključivanje svoje aplikacije ili usluga. Brzina dockera omogućuje da se to učini u gotovo stvarnom vremenu.

Veća opterećenja i više nosivosti

Docker je lagan i brz. Pruža otpornu, isplativu alternativu virtualnim strojevima koji se temelje na hipervizoru. Posebno je koristan u okruženjima s velikim opterećenjem, na primjer, kada stvarate vlastiti oblak ili platformu kao uslugu. Ali također je koristan za male i srednje aplikacije kada želite izvući više iz resursa koje imate.

Glavne Docker komponente

Docker se sastoji od dvije glavne komponente:

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

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

Docker arhitektura

Docker koristi arhitekturu klijent-poslužitelj. Docker klijent komunicira s Docker demonom, koji preuzima teret stvaranja, pokretanja i distribucije vaših spremnika. I klijent i poslužitelj mogu raditi na istom sustavu, možete povezati klijenta s udaljenim docker demonom. Klijent i poslužitelj komuniciraju putem utičnice ili RESTful API-ja.

Razumijevanje Dockera

Docker demon

Kao što je prikazano na dijagramu, demon radi na glavnom računalu. Korisnik ne komunicira izravno s poslužiteljem, već za to koristi klijenta.

Docker klijent

Docker klijent, docker program, glavno je sučelje za Docker. Prima naredbe od korisnika i komunicira s docker demonom.

Unutar dokera

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

  • slike
  • registar
  • spremnici

lik

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

registra

Docker registar pohranjuje slike. Postoje javni i privatni registri iz kojih možete preuzimati ili postavljati slike. Javni Docker registar je Docker čvorište. Tamo je pohranjena ogromna zbirka slika. Kao što znate, slike možete izraditi sami ili možete koristiti slike koje su izradili drugi. Registri su distribucijska komponenta.

spremnici

Kontejneri su slični imenicima. Spremnici sadrže sve što je aplikaciji potrebno za rad. Svaki spremnik kreiran je iz slike. Kontejneri se mogu stvarati, pokretati, zaustavljati, migrirati ili brisati. Svaki spremnik je izoliran i pruža sigurnu platformu za aplikaciju. Kontejneri su komponente posla.

Dakle, kako Docker radi?

Za sada znamo da:

  • možemo kreirati slike u kojima se nalaze naše aplikacije;
  • možemo stvoriti spremnike od slika za pokretanje aplikacija;
  • Slike možemo distribuirati putem Docker Huba ili drugog registra slika.

Pogledajmo kako se ove komponente slažu.

Kako radi slika?

Već znamo da je slika predložak samo za čitanje iz kojeg se kreira spremnik. Svaka slika sastoji se od niza razina. Docker koristi union datotečni sustav za kombiniranje tih razina u jednu sliku. Ujedinjeni datotečni sustav omogućuje transparentno preklapanje datoteka i direktorija iz različitih datotečnih sustava (različitih grana), stvarajući koherentan datotečni sustav.

Jedan od razloga zašto je docker lagan je zato što koristi ovakve slojeve. Kada promijenite sliku, kao što je ažuriranje aplikacije, stvara se novi sloj. Dakle, bez zamjene cijele slike ili njezine ponovne izgradnje, kao što biste možda morali učiniti s virtualnim strojem, samo se sloj dodaje ili ažurira. I ne morate distribuirati cijelu novu sliku, samo se ažuriranje distribuira, što olakšava i ubrzava distribuciju slika.

U srcu svake slike je osnovna slika. Na primjer, ubuntu, osnovna slika Ubuntua ili fedora, osnovna slika distribucije Fedora. Također možete koristiti slike kao osnovu za stvaranje 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 registra Docker Huba.

Docker slike mogu se stvoriti iz ovih osnovnih slika; korake za izradu ovih slika nazivamo uputama. Svaka uputa stvara novu sliku ili razinu. Upute će biti sljedeće:

  • naredba za pokretanje
  • dodavanje datoteke ili direktorija
  • stvaranje varijable okoline
  • upute o tome što pokrenuti kada se spremnik ove slike pokrene

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

Kako radi docker registar?

Registar je spremište za docker slike. Nakon što je slika stvorena, možete je objaviti u javnom registru Docker Huba ili u svom osobnom registru.

S docker klijentom možete pretraživati ​​već objavljene slike i preuzimati ih na svoj docker stroj za izradu spremnika.

Docker Hub pruža javna i privatna spremišta slika. Pretraživanje i preuzimanje slika iz javnih repozitorija 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 te slike i iz njih stvarati spremnike.

Kako radi spremnik?

Spremnik se sastoji od operativnog sustava, korisničkih datoteka i metapodataka. Kao što znamo, svaki spremnik je stvoren od slike. Ova slika govori dockeru što se nalazi u spremniku, koji proces pokrenuti, kada se spremnik pokreće i druge konfiguracijske podatke. Docker slika je samo za čitanje. Kada docker pokrene spremnik, on stvara sloj za čitanje/pisanje na vrhu slike (koristeći union datotečni sustav kao što je prethodno navedeno) u kojem se aplikacija može pokrenuti.

Što se događa kada se spremnik pokrene?

Ili pomoću programa docker, ili korištenjem RESTful API-ja, docker klijent govori docker demonu da pokrene spremnik.

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

Pogledajmo ovu naredbu. Klijent se pokreće pomoću naredbe docker, s opcijom run, što kaže da će se pokrenuti novi kontejner. Minimalni zahtjevi za pokretanje spremnika su sljedeći atributi:

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

Što se događa ispod haube kada pokrenemo ovu naredbu?

Docker radi sljedeće:

  • preuzima ubuntu sliku: docker provjerava dostupnost slike ubuntu na lokalnom računalu, a ako ga nema, preuzmite ga s Docker čvorište. Ako postoji slika, koristi je za stvaranje spremnika;
  • stvara spremnik: kada se slika primi, docker je koristi za stvaranje spremnika;
  • inicijalizira datotečni sustav i montira razinu samo za čitanje: spremnik se stvara u datotečnom sustavu i slika se dodaje na razinu samo za čitanje;
  • inicijalizira mrežu/most: stvara mrežno sučelje koje dockeru omogućuje komunikaciju s glavnim strojem;
  • 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 pogrešaka vaše aplikacije tako da možete pratiti kako vaša aplikacija radi.

Sada imate spremnik koji radi. Možete upravljati svojim spremnikom, komunicirati sa svojom aplikacijom. Kada odlučite zaustaviti aplikaciju, izbrišite spremnik.

Korištene tehnologije

Docker je napisan u Go i koristi neke značajke Linux kernela za implementaciju gore navedene funkcije.

Imenski prostori

Docker koristi tehnologiju namespaces za organiziranje izoliranih radnih prostora, koje nazivamo kontejnerima. Kada pokrenemo spremnik, docker stvara skup prostora imena za taj spremnik.

Ovo stvara izolirani sloj, pri čemu svaki aspekt spremnika radi u vlastitom prostoru imena i nema pristup vanjskom sustavu.

Popis nekih imenskih prostora koje docker koristi:

  • pid: izolirati proces;
  • neto: za upravljanje mrežnim sučeljima;
  • ipc: za upravljanje IPC resursima. (ICP: Međuprocesna komunikacija);
  • mnt: za upravljanje točkama montiranja;
  • utc: za izolaciju kernela i kontrolu generiranja verzije (UTC: Unix sustav dijeljenja vremena).

Kontrolne skupine

Docker također koristi tehnologiju cgroups ili kontrolne skupine. Ključ za pokretanje aplikacije u izolaciji je osigurati aplikaciji samo one resurse koje želite pružiti. To osigurava da će kontejneri biti dobri susjedi. Kontrolne grupe omogućuju vam dijeljenje dostupnih hardverskih resursa i, ako je potrebno, postavljanje 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 datotečni sustav koji radi stvaranjem slojeva, što ga čini vrlo laganim i brzim. Docker koristi UnionFS za stvaranje blokova od kojih je izgrađen spremnik. Docker može koristiti nekoliko varijanti UnionFS-a uključujući: AUFS, btrfs, vfs i DeviceMapper.

Formati kontejnera

Docker kombinira te komponente u omotač koji nazivamo format spremnika. Poziva se zadani format libcontainer. Docker također podržava tradicionalni format spremnika na Linuxu LXC. U budućnosti bi Docker mogao podržavati druge formate spremnika. Na primjer, integracija s BSD Jails ili Solaris Zones.

Izvor: www.habr.com

Dodajte komentar