Spremnici 101: Osnove Dockera

Docker je započeo 2012. kao projekt otvorenog koda, izvorno nazvan dotcloud, za izgradnju Linux spremnika s jednom aplikacijom. Od tada je Docker postao izuzetno popularan razvojni alat, koji se sve više koristi kao runtime okruženje. Rijetke - ako ih uopće ima - tehnologije su se uhvatile s programerima tako brzo kao Docker.

Jedan od razloga zašto je Docker toliko popularan jest taj što pruža obećanje "jednom se razvijte, trčite bilo gdje". Docker nudi jednostavan način za pakiranje aplikacije i njezinih ovisnosti o izvođenju u jedan spremnik; ona također pruža apstrakciju vremena izvođenja koja omogućuje spremniku da radi na različitim verzijama Linux jezgre.

Koristeći Docker, programer može na svojoj radnoj stanici izraditi kontejneriziranu aplikaciju, a zatim lako rasporediti spremnik na bilo koji poslužitelj s omogućenim Dockerom. Nema potrebe za ponovnim testiranjem ili prenamjenom spremnika za poslužiteljsko okruženje, bilo u oblaku ili u prostoriji.

Uz to, Docker nudi mehanizam za dijeljenje i distribuciju softvera koji programerima i operativnim timovima omogućuje jednostavno dijeljenje i ponovnu upotrebu sadržaja spremnika. Ovaj mehanizam distribucije, zajedno s prenosivošću na strojevima, pomaže u objašnjenju Dockerove popularnosti kod operativnih timova i kod programera.  

Docker komponente

Docker je i razvojni alat i runtime okruženje. Da bismo razumjeli Docker, prvo moramo razumjeti koncept slike Dockerovog spremnika. Spremnik uvijek započinje slikom i smatra se instancijom te slike. Slika je statička specifikacija onoga što spremnik treba biti u vrijeme izvođenja, uključujući kod aplikacije unutar spremnika i postavke konfiguracije vremena izvođenja. Dockerove slike sadrže slojeve samo za čitanje, što znači da se jednom stvorena slika nikada ne mijenja.

Slika 1 prikazuje primjer slike spremnika. Ova slika prikazuje Ubuntu sliku s Apache instalacijom. Slika je sastavljena od tri osnovna Ubuntu sloja plus sloj za ažuriranje, s slojem Apache i prilagođenim slojem datoteke na vrhu.

Pokrenuti Docker spremnik instancija je slike. Spremnici izvedeni iz iste slike međusobno su identični u smislu svog aplikacijskog koda i ovisnosti o runtu. No, za razliku od slika koje su samo za čitanje, izvodni spremnici uključuju sloj za pisanje (sloj spremnika) povrh sadržaja samo za čitanje. Izmjene vremena izvođenja, uključujući svako upisivanje i ažuriranje podataka i datoteka, spremaju se u sloj spremnika. Dakle, više istodobno pokrenutih spremnika koji dijele istu osnovnu sliku mogu imati slojeve spremnika koji se bitno razlikuju.

Kada se izbriše spremnik koji se izvodi, sloj spremnika za pisanje također se briše i neće trajati. Jedini način da se nastave promjene jest izvršiti eksplicitnu docker commitnaredbu prije brisanja spremnika. Kada to učinite docker commit, sadržaj spremnika koji se izvodi, uključujući sloj za pisanje, zapisuje se u novu sliku spremnika i pohranjuje na disk. Ovo postaje nova slika koja se razlikuje od slike kojom je spremnik instanciran.

Korištenjem ove eksplicitne docker commitnaredbe može se stvoriti uzastopni, diskretni skup Dockerovih slika, svaki izgrađen na vrhu prethodne slike. Uz to, Docker koristi strategiju kopiranja i pisanja kako bi umanjio otisak spremnika i slika koji dijele iste osnovne komponente. To pomaže optimizirati prostor za pohranu i smanjiti vrijeme pokretanja spremnika.

Slika 2 prikazuje razliku između slike i spremnika koji radi. Imajte na umu da svaki tekući spremnik može imati različit sloj za pisanje.

Osim koncepta slike, Docker ima nekoliko specifičnih komponenata koje se razlikuju od onih u tradicionalnim Linux spremnicima.

  • Docker demon. Također poznat kao Docker Engine, Docker demon je tanki sloj između spremnika i Linux jezgre. Docker demon je trajno okruženje za izvršavanje koje upravlja spremnicima aplikacija. Bilo koji Docker spremnik može se izvoditi na bilo kojem poslužitelju na kojem je omogućen Docker-demon, bez obzira na osnovni operativni sustav.
  • Dockerfile. Programeri koriste Dockerfiles za izradu slika spremnika, koje potom postaju osnova pokrenutih spremnika. Dockerfile je tekstualni dokument koji sadrži sve podatke o konfiguraciji i naredbe potrebne za sastavljanje slike spremnika. Uz Dockerfile, demon Docker može automatski izgraditi sliku spremnika. Ovaj postupak uvelike pojednostavljuje korake za stvaranje spremnika.

Točnije, u Dockerfileu prvo odredite osnovnu sliku od koje započinje postupak gradnje. Zatim odredite niz naredbi, nakon čega se može izgraditi nova slika spremnika.

  • Alati za sučelje naredbenog retka Docker. Docker nudi skup CLI naredbi za upravljanje životnim ciklusom spremnika temeljenih na slikama. Naredbe Dockera obuhvaćaju razvojne funkcije poput gradnje, izvoza i označavanja, kao i runtime funkcije poput izvođenja, brisanja, pokretanja i zaustavljanja spremnika i još mnogo toga.

Možete izvršiti Dockerove naredbe protiv određenog Dockerovog demona ili registra. Na primjer, ako izvršite docker -psnaredbu, Docker će vratiti popis spremnika koji se izvode na demonu.

Distribucija sadržaja s Dockerom

Uz runtime okruženje i formate spremnika, Docker nudi mehanizam za distribuciju softvera, poznat kao registar, koji olakšava otkrivanje i distribuciju sadržaja spremnika.

Koncept registra je presudan za uspjeh Dockera, jer pruža skup uslužnih programa za pakiranje, isporuku, spremanje, otkrivanje i ponovnu upotrebu sadržaja spremnika. Docker tvrtka vodi javni besplatni registar nazvan Docker Hub.

  • Registar. Docker registar je mjesto na kojem se objavljuju i pohranjuju slike spremnika. Registar može biti udaljen ili lokalno. Može biti javni, pa ga svi mogu koristiti ili privatni, ograničen na organizaciju ili skup korisnika. Docker registar dolazi s nizom uobičajenih API-ja koji korisnicima omogućuju izgradnju, objavljivanje, pretraživanje, preuzimanje i upravljanje slikama spremnika.
  • Docker Hub. Docker Hub je javni registar spremnika zasnovan na oblaku kojim upravlja Docker. Docker Hub pruža podršku za otkrivanje, distribuciju i suradnju u tijeku rada. Uz to, Docker Hub ima i niz službenih slika koje je certificirao Docker. Riječ je o slikama poznatih izdavača softvera kao što su Canonical, Red Hat i MongoDB. Ove službene slike možete koristiti kao osnovu za izradu vlastitih slika ili aplikacija.

Slika 3 prikazuje tijek rada u kojem korisnik konstruira sliku i prebacuje je u registar. Drugi korisnici mogu izvući sliku iz registra kako bi napravili proizvodne spremnike i rasporediti ih na Dockerove hostove, gdje god se nalazili.

Nepromjenjivost Dockerovih spremnika

Jedno od najzanimljivijih svojstava Dockerovih spremnika je njihova nepromjenjivost i rezultirajuće apatričnost spremnika.

Kao što smo opisali u prethodnom odjeljku, Dockerova slika, jednom stvorena, ne mijenja se. Pokrenuti spremnik izveden iz slike ima sloj za pisanje koji može privremeno pohraniti promjene vremena izvođenja. Ako je spremnik urezan prije brisanja s docker commit, promjene u sloju za pisanje spremit će se u novu sliku koja se razlikuje od prethodne.

Zašto je nepromjenjivost dobra? Nepromjenjive slike i spremnici vode do nepromjenjive infrastrukture, a nepromjenjiva infrastruktura ima mnogo zanimljivih blagodati koje se ne mogu postići tradicionalnim sustavima. Te pogodnosti uključuju sljedeće:

  • Kontrola verzija. Zahtijevajući eksplicitne predaje koji generiraju nove slike, Docker vas prisiljava na kontrolu verzija. Možete pratiti uzastopne verzije slike; vraćanje na prethodnu sliku (dakle na prethodnu komponentu sustava) potpuno je moguće, jer se prethodne slike čuvaju i nikad se ne mijenjaju.
  • Čistija ažuriranja i više promjenjivih stanja kojima se može upravljati. S nepromjenjivom infrastrukturom više ne morate nadograđivati ​​svoju poslužiteljsku infrastrukturu, što znači da nema potrebe za promjenom konfiguracijskih datoteka, bez ažuriranja softvera, nadogradnje operativnog sustava itd. Kad su potrebne promjene, jednostavno napravite nove spremnike i istisnete ih kako biste zamijenili stare. Ovo je puno diskretnija i upravljivija metoda za promjenu stanja.
  • Minimalizirani zanos. Da biste izbjegli zanošenje, povremeno i proaktivno možete osvježiti sve komponente u sustavu kako biste bili sigurni da su najnovije verzije. Ova je praksa puno lakša s spremnicima koji sadrže male dijelove sustava nego s tradicionalnim glomaznim softverom.

Dockerova razlika

Dockerov format slike, opsežni API-ji za upravljanje spremnicima i inovativni mehanizam distribucije softvera učinili su ga popularnom platformom za razvojne i operativne timove. Docker donosi ove značajne blagodati organizaciji.

  • Minimalni, deklarativni sustavi. Docker kontejneri su u najboljem slučaju ako se radi o malim jednonamjenskim aplikacijama. To dovodi do spremnika minimalne veličine, koji zauzvrat podržavaju brzu isporuku, kontinuiranu integraciju i kontinuirano postavljanje.
  • Predvidljive operacije. Najveća glavobolja rada sustava uvijek je bila naizgled nasumično ponašanje infrastrukture ili aplikacija. Prisiljavajući vas na manja ažuriranja kojima se lakše može upravljati i pružajući mehanizam za minimiziranje zamaha sustava, Docker vam pomaže u izgradnji predvidljivijih sustava. Kad se uklone nanosi, imate sigurnost da će se softver uvijek ponašati na identičan način, bez obzira koliko ga puta primijenili.
  • Opsežna ponovna upotreba softvera. Docker spremnici ponovno koriste slojeve s drugih slika, što prirodno promiče ponovnu upotrebu softvera. Dijeljenje Dockerovih slika putem registara još je jedan sjajan primjer ponovne upotrebe komponenti, u velikom opsegu.
  • Istinska prenosivost više glasova. Docker omogućuje istinsku neovisnost o platformi, dopuštajući spremnicima da slobodno migriraju između različitih platformi u oblaku, lokalnih infrastruktura i razvojnih radnih stanica.

Docker već mijenja način na koji organizacije grade sustave i pružaju usluge. Počinje preoblikovati način na koji razmišljamo o dizajnu softvera i ekonomiji isporuke softvera. Prije nego što se ove promjene uistinu ukorijene, organizacije moraju bolje razumjeti kako upravljati sigurnošću i politikama za Docker okruženje. Ali to je tema za drugi članak.

Chenxi Wang glavni je strateški direktor tvrtke za zaštitu kontejnera Twistlock.

New Tech Forum pruža mjesto za istraživanje i raspravu o novonastaloj tehnologiji poduzeća u neviđenoj dubini i širini. Izbor je subjektivan, zasnovan na našem odabiru tehnologija za koje vjerujemo da su važne i da najviše zanimaju čitatelje. ne prihvaća marketinške kolaterale za objavljivanje i zadržava pravo uređivanja cjelokupnog sadržaja. Pošaljite sve upite na [email protected]