Razumevanje Dockerja

Docker uporabljam že nekaj mesecev za strukturiranje procesa razvoja/dostave spletnih projektov. Bralcem Habrakhabra ponujam prevod uvodnega članka o dockerju - "Razumevanje dokerja".

Kaj je docker?

Docker je odprta platforma za razvoj, dostavo in delovanje aplikacij. Docker je zasnovan za hitrejšo dostavo vaših aplikacij. Z dockerjem lahko svojo aplikacijo ločite od infrastrukture in infrastrukturo obravnavate kot upravljano aplikacijo. Docker vam pomaga hitreje pošiljati kodo, hitreje testirati, hitreje pošiljati aplikacije in skrajšati čas med pisanjem in izvajanjem kode. Docker to počne prek lahke platforme za virtualizacijo vsebnikov z uporabo procesov in pripomočkov, ki vam pomagajo upravljati in gostiti vaše aplikacije.

Docker vam v svojem bistvu omogoča zagon skoraj vseh aplikacij, varno izoliranih v vsebniku. Varna izolacija vam omogoča, da na istem gostitelju hkrati izvajate več vsebnikov. Lahka narava vsebnika, ki deluje brez dodatnega bremena hipervizorja, vam omogoča, da iz strojne opreme izkoristite več.

Platforma in orodja za virtualizacijo vsebnikov so lahko uporabna v naslednjih primerih:

  • pakiranje vaše aplikacije (in komponent, ki jih uporabljate) v docker vsebnike;
  • distribucija in dostava teh vsebnikov vašim ekipam za razvoj in testiranje;
  • postavitev teh vsebnikov na vaših proizvodnih lokacijah, tako v podatkovnih centrih kot v oblaku.

Za kaj lahko uporabljam docker?

Hitro objavite svoje aplikacije

Docker je odličen za organizacijo razvojnega cikla. Docker razvijalcem omogoča zagon lokalnih vsebnikov z aplikacijami in storitvami. Kar vam nato omogoča integracijo s postopkom stalne integracije in potekom dela uvajanja.

Vaši razvijalci na primer pišejo kodo lokalno in delijo svoj razvojni sklad (nabor slik Docker) s sodelavci. Ko so pripravljeni, potisnejo kodo in vsebnike na testno mesto in izvedejo vse potrebne teste. S testnega mesta lahko pošljejo kodo in slike v proizvodnjo.

Lažje polaganje in razstavljanje

Platforma, ki temelji na docker vsebniku, olajša prenos tovora. Docker vsebniki se lahko izvajajo na vašem lokalnem računalniku, resničnem ali navideznem stroju v podatkovnem centru ali v oblaku.

Prenosljivost in lahka narava dockerja olajšata dinamično upravljanje vaše delovne obremenitve. Docker lahko uporabite za uvajanje ali zaustavitev vaše aplikacije ali storitev. Hitrost dockerja omogoča, da se to izvede skoraj v realnem času.

Večje obremenitve in več koristnih tovorov

Docker je lahek in hiter. Zagotavlja odporno in stroškovno učinkovito alternativo virtualnim strojem, ki temeljijo na hipervizorju. Še posebej je uporaben v visoko obremenjenih okoljih, na primer pri ustvarjanju lastnega oblaka ali platforme kot storitve. Uporaben pa je tudi za majhne in srednje velike aplikacije, ko želite več izkoristiti vire, ki jih imate.

Glavne komponente Dockerja

Docker je sestavljen iz dveh glavnih komponent:

  • Docker: odprtokodna platforma za virtualizacijo;
  • Docker Hub: naša platforma kot storitev za distribucijo in upravljanje vsebnikov Docker.

Opomba! Docker se distribuira pod licenco Apache 2.0.

Dockerjeva arhitektura

Docker uporablja arhitekturo odjemalec-strežnik. Odjemalec Docker komunicira z demonom Docker, ki prevzame breme ustvarjanja, izvajanja in distribucije vaših vsebnikov. Odjemalec in strežnik lahko delujeta v istem sistemu, odjemalca lahko povežete z oddaljenim demonom docker. Odjemalec in strežnik komunicirata prek vtičnice ali RESTful API-ja.

Razumevanje Dockerja

Docker demon

Kot je prikazano v diagramu, se demon izvaja na gostiteljskem računalniku. Uporabnik ne komunicira neposredno s strežnikom, ampak za to uporablja odjemalca.

Odjemalec Docker

Odjemalec Docker, program docker, je glavni vmesnik za Docker. Prejema ukaze od uporabnika in komunicira z demonom docker.

Notranji priklopnik

Če želite razumeti, iz česa je sestavljen docker, morate poznati tri komponente:

  • slike
  • register
  • posode

Slike

Slika Docker je predloga samo za branje. Na primer, slika lahko vsebuje operacijski sistem Ubuntu z Apache in aplikacijo na njem. Slike se uporabljajo za ustvarjanje vsebnikov. Docker olajša ustvarjanje novih slik, posodabljanje obstoječih ali pa lahko prenesete slike, ki so jih ustvarili drugi ljudje. Slike so komponente gradnje dockerja.

Registracija

Register Docker shranjuje slike. Obstajajo javni in zasebni registri, iz katerih lahko prenesete ali naložite slike. Javni register Docker je Dock pesto. Tam je shranjena ogromna zbirka slik. Kot veste, lahko slike ustvarite vi ali pa uporabite slike, ki so jih ustvarili drugi. Registri so distribucijska komponenta.

Zabojniki

Vsebniki so podobni imenikom. Vsebniki vsebujejo vse, kar aplikacija potrebuje za delovanje. Vsak vsebnik je ustvarjen iz slike. Vsebnike je mogoče ustvariti, zagnati, ustaviti, preseliti ali izbrisati. Vsak vsebnik je izoliran in zagotavlja varno platformo za aplikacijo. Zabojniki so sestavni deli dela.

Kako torej Docker deluje?

Zaenkrat vemo, da:

  • lahko ustvarimo slike, v katerih se nahajajo naše aplikacije;
  • iz slik lahko ustvarimo vsebnike za izvajanje aplikacij;
  • Slike lahko distribuiramo prek Docker Huba ali drugega registra slik.

Poglejmo, kako se te komponente ujemajo.

Kako deluje slika?

Vemo že, da je slika predloga samo za branje, iz katere je ustvarjen vsebnik. Vsaka slika je sestavljena iz niza ravni. Docker uporablja datotečni sistem unije združiti te ravni v eno sliko. Datotečni sistem Union omogoča, da se datoteke in imeniki iz različnih datotečnih sistemov (različne veje) pregledno prekrivajo in tako ustvarijo skladen datotečni sistem.

Eden od razlogov, zakaj je docker lahek, je ta, da uporablja takšne plasti. Ko spremenite sliko, na primer posodobite aplikacijo, se ustvari nova plast. Torej, brez zamenjave celotne slike ali njene ponovne izdelave, kot bi morda morali narediti pri virtualnem stroju, se doda ali posodobi samo plast. In ni vam treba distribuirati celotne nove slike, distribuira se samo posodobitev, zaradi česar je distribucija slik lažja in hitrejša.

V središču vsake slike je osnovna slika. Na primer ubuntu, osnovna slika Ubuntuja, ali fedora, osnovna slika distribucije Fedora. Slike lahko uporabite tudi kot osnovo za ustvarjanje novih slik. Na primer, če imate sliko apache, jo lahko uporabite kot osnovno sliko za svoje spletne aplikacije.

Opomba! Docker običajno črpa slike iz registra Docker Hub.

Slike Docker lahko ustvarite iz teh osnovnih slik; korake za ustvarjanje teh slik imenujemo navodila. Vsako navodilo ustvari novo sliko ali raven. Navodila bodo naslednja:

  • ukaz za zagon
  • dodajanje datoteke ali imenika
  • ustvarjanje spremenljivke okolja
  • navodila, kaj zagnati, ko se zažene vsebnik te slike

Ta navodila so shranjena v datoteki Dockerfile. Docker to bere Dockerfile, ko zgradite sliko, izvede ta navodila in vrne končno sliko.

Kako deluje register dockerjev?

Register je repozitorij za slike dockerjev. Ko je slika ustvarjena, jo lahko objavite v javnem registru Docker Hub ali v svojem osebnem registru.

Z odjemalcem docker lahko iščete že objavljene slike in jih prenesete na svoj docker stroj, da ustvarite vsebnike.

Docker Hub nudi javna in zasebna skladišča slik. Iskanje in prenos slik iz javnih skladišč je na voljo vsem. Vsebina zasebnih skladišč ni vključena v rezultate iskanja. In samo vi in ​​vaši uporabniki lahko prejmete te slike in iz njih ustvarite vsebnike.

Kako deluje posoda?

Vsebnik je sestavljen iz operacijskega sistema, uporabniških datotek in metapodatkov. Kot vemo, je vsak vsebnik ustvarjen iz slike. Ta slika pove dockerju, kaj je v vsebniku, kateri proces zagnati, kdaj se zažene vsebnik in druge konfiguracijske podatke. Slika Docker je samo za branje. Ko docker zažene vsebnik, ustvari plast za branje/pisanje na vrhu slike (z uporabo datotečnega sistema unije, kot je navedeno prej), v kateri je mogoče zagnati aplikacijo.

Kaj se zgodi, ko se posoda zažene?

Ali z uporabo programa docker, ali z uporabo API-ja RESTful odjemalec docker pove demonu docker, naj zažene vsebnik.

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

Oglejmo si ta ukaz. Odjemalec se zažene z ukazom docker, z možnostjo run, ki pravi, da bo zagnan nov kontejner. Minimalne zahteve za zagon vsebnika so naslednji atributi:

  • katero sliko uporabiti za ustvarjanje vsebnika. V našem primeru ubuntu
  • ukaz, ki ga želite zagnati ob zagonu vsebnika. V našem primeru /bin/bash

Kaj se zgodi pod pokrovom, ko zaženemo ta ukaz?

Docker naredi naslednje:

  • prenese sliko ubuntu: docker preveri razpoložljivost slike ubuntu na lokalnem računalniku, in če ga ni, ga prenesite iz Dock pesto. Če obstaja slika, jo uporabi za ustvarjanje vsebnika;
  • ustvari vsebnik: ko je slika sprejeta, jo docker uporabi za ustvarjanje vsebnika;
  • inicializira datotečni sistem in priklopi raven samo za branje: vsebnik se ustvari v datotečnem sistemu in slika se doda na raven samo za branje;
  • inicializira omrežje/most: ustvari omrežni vmesnik, ki dockerju omogoča komunikacijo z gostiteljskim strojem;
  • Nastavitev naslova IP: poišče in nastavi naslov;
  • Zažene navedeni postopek: zažene vašo aplikacijo;
  • Obdela in ustvari izhod iz vaše aplikacije: povezuje in beleži standardni vhod, izhod in tok napak vaše aplikacije, tako da lahko spremljate, kako deluje vaša aplikacija.

Zdaj imate delujočo posodo. Lahko upravljate svoj vsebnik, komunicirate s svojo aplikacijo. Ko se odločite ustaviti aplikacijo, izbrišite vsebnik.

Uporabljene tehnologije

Docker je napisan v Go in uporablja nekatere funkcije jedra Linuxa za izvajanje zgornje funkcije.

Imenski prostori

Docker uporablja tehnologijo namespaces organizirati izolirane delovne prostore, ki jih imenujemo kontejnerji. Ko zaženemo vsebnik, docker ustvari niz imenskih prostorov za ta vsebnik.

To ustvari izolirano plast, pri čemer vsak vidik vsebnika deluje v svojem imenskem prostoru in nima dostopa do zunanjega sistema.

Seznam nekaterih imenskih prostorov, ki jih uporablja docker:

  • pid: izolirati proces;
  • mreža: za upravljanje omrežnih vmesnikov;
  • ipc: za upravljanje virov IPC. (ICP: medprocesna komunikacija);
  • mnt: za upravljanje točk pritrditve;
  • utc: za izolacijo jedra in generiranje različice nadzora (UTC: sistem časovne delitve Unix).

Kontrolne skupine

Docker uporablja tudi tehnologijo cgroups ali kontrolne skupine. Ključ do izvajanja aplikacije v izolaciji je, da aplikaciji zagotovite samo tiste vire, ki jih želite zagotoviti. To zagotavlja, da bodo zabojniki dobri sosedje. Nadzorne skupine vam omogočajo skupno rabo razpoložljivih virov strojne opreme in po potrebi nastavitev meja in omejitev. Na primer, omejite možno količino pomnilnika za vsebnik.

Datotečni sistem Union

Union File System ali UnionFS je datotečni sistem, ki deluje tako, da ustvarja plasti, zaradi česar je zelo lahek in hiter. Docker uporablja UnionFS za ustvarjanje blokov, iz katerih je zgrajen vsebnik. Docker lahko uporablja več različic UnionFS, vključno z: AUFS, btrfs, vfs in DeviceMapper.

Formati vsebnikov

Docker združi te komponente v ovoj, ki ga imenujemo format vsebnika. Pokliče se privzeti format libcontainer. Docker podpira tudi tradicionalno obliko vsebnika v Linuxu z uporabo LXC. V prihodnosti bo Docker morda podpiral druge formate vsebnikov. Na primer integracija z BSD Jails ali Solaris Zones.

Vir: www.habr.com

Dodaj komentar