Pochopenie Dockera

Docker používam už niekoľko mesiacov na štruktúrovanie procesu vývoja/doručovania webových projektov. Čitateľom Habrakhabra ponúkam preklad úvodného článku o dockerovi - "Porozumenie dockeru".

čo je docker?

Docker je otvorená platforma pre vývoj, poskytovanie a prevádzku aplikácií. Docker je navrhnutý tak, aby doručoval vaše aplikácie rýchlejšie. Pomocou dockeru môžete oddeliť svoju aplikáciu od infraštruktúry a považovať ju za riadenú aplikáciu. Docker vám pomáha rýchlejšie odosielať kód, testovať rýchlejšie, odosielať aplikácie rýchlejšie a skrátiť čas medzi napísaním kódu a spustením kódu. Docker to robí prostredníctvom ľahkej platformy na virtualizáciu kontajnerov pomocou procesov a nástrojov, ktoré vám pomôžu spravovať a hostiť vaše aplikácie.

Vo svojom jadre vám docker umožňuje spustiť takmer akúkoľvek aplikáciu, bezpečne izolovanú v kontajneri. Bezpečná izolácia vám umožňuje súčasne spúšťať veľa kontajnerov na rovnakom hostiteľovi. Ľahká povaha kontajnera, ktorý beží bez ďalšej záťaže hypervízora, vám umožňuje vyťažiť z vášho hardvéru viac.

Platforma a nástroje na virtualizáciu kontajnerov môžu byť užitočné v nasledujúcich prípadoch:

  • balenie vašej aplikácie (a komponentov, ktoré používate) do kontajnerov dokovacích zariadení;
  • distribúcia a dodávka týchto kontajnerov vašim tímom na vývoj a testovanie;
  • rozmiestnenie týchto kontajnerov na vašich výrobných miestach, v dátových centrách aj v cloude.

Na čo môžem použiť docker?

Rýchlo publikujte svoje aplikácie

Docker je skvelý na organizáciu vývojového cyklu. Docker umožňuje vývojárom spúšťať lokálne kontajnery s aplikáciami a službami. Čo vám následne umožní integrovať sa s procesom kontinuálnej integrácie a workflow nasadenia.

Vaši vývojári napríklad píšu kód lokálne a zdieľajú svoj vývojový balík (súbor obrázkov Docker) s kolegami. Keď sú pripravené, prenesú kód a kontajnery na testovacie miesto a spustia všetky potrebné testy. Z testovacej lokality môžu posielať kód a obrázky do výroby.

Jednoduchšie rozloženie a rozloženie

Platforma založená na dokovacích kontajneroch uľahčuje prenos vášho užitočného zaťaženia. Kontajnery Docker môžu bežať na vašom lokálnom počítači, či už skutočnom alebo virtuálnom v dátovom centre, alebo v cloude.

Prenosnosť a ľahká povaha dockeru uľahčuje dynamickú správu pracovného zaťaženia. Docker môžete použiť na nasadenie alebo vypnutie aplikácie alebo služieb. Rýchlosť dockeru to umožňuje takmer v reálnom čase.

Vyššie zaťaženie a väčšie užitočné zaťaženie

Docker je ľahký a rýchly. Poskytuje odolnú, nákladovo efektívnu alternatívu k virtuálnym počítačom založeným na hypervízore. Je to užitočné najmä v prostrediach s vysokou záťažou, napríklad pri vytváraní vlastného cloudu alebo platformy ako služby. Je to však užitočné aj pre malé a stredne veľké aplikácie, keď chcete zo zdrojov, ktoré máte, vyťažiť viac.

Hlavné komponenty Docker

Docker pozostáva z dvoch hlavných komponentov:

  • Docker: open source virtualizačná platforma;
  • Docker Hub: Naša platforma ako služba na distribúciu a správu kontajnerov Docker.

Poznámka! Docker je distribuovaný pod licenciou Apache 2.0.

Docker architektúra

Docker používa architektúru klient-server. Klient Docker komunikuje s démonom Docker, ktorý preberá bremeno vytvárania, spúšťania a distribúcie vašich kontajnerov. Klient aj server môžu bežať na rovnakom systéme, klienta môžete pripojiť k vzdialenému démonovi dockeru. Klient a server komunikujú cez soket alebo RESTful API.

Pochopenie Dockera

Démon Docker

Ako je znázornené na diagrame, démon beží na hostiteľskom počítači. Používateľ nekomunikuje priamo so serverom, ale používa na to klienta.

Docker klient

Klient Docker, program docker, je hlavným rozhraním pre Docker. Prijíma príkazy od používateľa a komunikuje s démonom docker.

Vnútri prístaviska

Aby ste pochopili, z čoho sa skladá docker, potrebujete vedieť o troch komponentoch:

  • snímky
  • registra
  • Kontajnery

obraznosť

Obrázok Docker je šablóna iba na čítanie. Obrázok môže napríklad obsahovať operačný systém Ubuntu s Apache a aplikáciou na ňom. Obrázky sa používajú na vytváranie kontajnerov. Docker uľahčuje vytváranie nových obrázkov, aktualizáciu existujúcich alebo si môžete stiahnuť obrázky vytvorené inými ľuďmi. Obrázky sú súčasťami zostavy doku.

Registratúra

Register Docker ukladá obrázky. Existujú verejné a súkromné ​​registre, z ktorých si môžete stiahnuť alebo nahrať obrázky. Verejný register Docker je Docker hub. Je tam uložená obrovská zbierka obrázkov. Ako viete, obrázky môžete vytvoriť vy alebo môžete použiť obrázky vytvorené inými. Registre sú distribučný komponent.

kontajnery

Kontajnery sú podobné ako adresáre. Kontajnery obsahujú všetko, čo aplikácia potrebuje na spustenie. Každý kontajner je vytvorený z obrázka. Kontajnery je možné vytvárať, spúšťať, zastavovať, migrovať alebo mazať. Každý kontajner je izolovaný a poskytuje bezpečnú platformu pre aplikáciu. Kontajnery sú súčasťou diela.

Ako teda Docker funguje?

Zatiaľ vieme, že:

  • môžeme vytvárať obrázky, v ktorých sú umiestnené naše aplikácie;
  • môžeme vytvárať kontajnery z obrázkov na spustenie aplikácií;
  • Obrázky môžeme distribuovať cez Docker Hub alebo iný register obrázkov.

Pozrime sa, ako tieto komponenty do seba zapadajú.

Ako funguje obrázok?

Už vieme, že obrázok je šablóna určená len na čítanie, z ktorej sa vytvorí kontajner. Každý obrázok pozostáva zo sady úrovní. Docker používa zväzový súborový systém spojiť tieto úrovne do jedného obrázka. Union file system umožňuje, aby sa súbory a adresáre z rôznych súborových systémov (rôznych vetiev) transparentne prekrývali, čím sa vytvoril koherentný súborový systém.

Jedným z dôvodov, prečo je docker ľahký, je to, že používa takéto vrstvy. Keď zmeníte obrázok, napríklad aktualizujete aplikáciu, vytvorí sa nová vrstva. Takže bez nahradenia celého obrazu alebo jeho prestavby, ako to možno budete musieť urobiť s virtuálnym počítačom, sa pridá alebo aktualizuje iba vrstva. A nemusíte distribuovať celý nový obrázok, distribuuje sa iba aktualizácia, vďaka čomu je distribúcia obrázkov jednoduchšia a rýchlejšia.

V srdci každého obrázku je základný obrázok. Napríklad ubuntu, základný obraz Ubuntu, alebo fedora, základný obraz distribúcie Fedora. Obrázky môžete použiť aj ako základ pre vytváranie nových obrázkov. Napríklad, ak máte obrázok Apache, môžete ho použiť ako základný obrázok pre vaše webové aplikácie.

Poznámka! Docker zvyčajne sťahuje obrázky z registra Docker Hub.

Z týchto základných obrázkov je možné vytvoriť obrázky Docker; kroky na vytvorenie týchto obrázkov nazývame pokyny. Každý pokyn vytvorí nový obrázok alebo úroveň. Pokyny budú nasledovné:

  • spustiť príkaz
  • pridanie súboru alebo adresára
  • vytvorenie premennej prostredia
  • pokyny, čo sa má spustiť pri spustení kontajnera tohto obrázka

Tieto pokyny sú uložené v súbore Dockerfile. Docker to číta Dockerfile, keď vytvoríte obrázok, vykoná tieto pokyny a vráti konečný obrázok.

Ako funguje register dockerov?

Register je úložisko pre obrázky dockerov. Po vytvorení obrázka ho môžete zverejniť vo verejnom registri Docker Hub alebo vo svojom osobnom registri.

Pomocou dokovacieho klienta môžete vyhľadávať už zverejnené obrázky a sťahovať ich do svojho dokovacieho počítača, aby ste vytvorili kontajnery.

Docker Hub poskytuje verejné a súkromné ​​úložiská obrázkov. Vyhľadávanie a sťahovanie obrázkov z verejných úložísk je dostupné pre každého. Obsah súkromných úložísk nie je zahrnutý vo výsledkoch vyhľadávania. A iba vy a vaši používatelia môžete prijímať tieto obrázky a vytvárať z nich kontajnery.

Ako funguje kontajner?

Kontajner pozostáva z operačného systému, používateľských súborov a metadát. Ako vieme, každý kontajner je vytvorený z obrázku. Tento obrázok informuje docker, čo je v kontajneri, aký proces sa má spustiť, kedy sa kontajner spustí a ďalšie konfiguračné údaje. Obrázok Docker je len na čítanie. Keď docker spustí kontajner, vytvorí vrstvu na čítanie/zápis v hornej časti obrázka (pomocou systému súborov únie, ako bolo uvedené vyššie), v ktorej môže byť aplikácia spustená.

Čo sa stane, keď sa kontajner spustí?

Alebo pomocou programu docker, alebo pomocou RESTful API, klient docker povie démonovi dockeru, aby spustil kontajner.

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

Poďme sa pozrieť na tento príkaz. Klient sa spustí pomocou príkazu docker, s opciou run, ktorá hovorí, že bude spustený nový kontajner. Minimálne požiadavky na spustenie kontajnera sú nasledujúce atribúty:

  • ktorý obrázok použiť na vytvorenie kontajnera. V našom prípade ubuntu
  • príkaz, ktorý chcete spustiť pri spustení kontajnera. V našom prípade /bin/bash

Čo sa stane pod kapotou, keď spustíme tento príkaz?

Docker v poradí robí nasledovné:

  • stiahne obrázok ubuntu: docker skontroluje dostupnosť obrázka ubuntu na lokálnom počítači, a ak tam nie je, stiahnite si ho z Docker hub. Ak existuje obrázok, použije ho na vytvorenie kontajnera;
  • vytvorí kontajner: keď je obrázok prijatý, docker ho použije na vytvorenie kontajnera;
  • inicializuje súborový systém a pripojí úroveň len na čítanie: kontajner sa vytvorí v súborovom systéme a obrázok sa pridá do úrovne len na čítanie;
  • inicializuje sieť/most: vytvára sieťové rozhranie, ktoré umožňuje dockeru komunikovať s hostiteľským počítačom;
  • Nastavenie IP adresy: nájde a nastaví adresu;
  • Spustí zadaný proces: spustí vašu aplikáciu;
  • Spracováva a vytvára výstup z vašej aplikácie: pripája a zaznamenáva štandardný vstup, výstup a chybový tok vašej aplikácie, takže môžete sledovať, ako vaša aplikácia funguje.

Teraz máte funkčný kontajner. Môžete spravovať svoj kontajner, komunikovať so svojou aplikáciou. Keď sa rozhodnete zastaviť aplikáciu, odstráňte kontajner.

Použité technológie

Docker je napísaný v Go a používa niektoré z jadra Linuxu na implementáciu vyššie uvedených funkcií.

Menné priestory

Docker využíva technológiu namespaces organizovať izolované pracovné priestory, ktoré nazývame kontajnery. Keď spustíme kontajner, docker vytvorí množinu menných priestorov pre tento kontajner.

To vytvára izolovanú vrstvu, pričom každý aspekt kontajnera beží vo svojom vlastnom mennom priestore a nemá prístup k externému systému.

Zoznam niektorých menných priestorov, ktoré docker používa:

  • pid: izolovať proces;
  • net: na správu sieťových rozhraní;
  • ipc: na správu zdrojov IPC. (ICP: InterProccess Communication);
  • mnt: spravovať body pripojenia;
  • UTC: na izoláciu generovania jadra a riadiacej verzie (UTC: Unixový systém zdieľania času).

Kontrolné skupiny

Technológiu využíva aj Docker cgroups alebo kontrolné skupiny. Kľúčom k izolovanému spusteniu aplikácie je poskytnúť aplikácii iba prostriedky, ktoré chcete poskytnúť. To zaisťuje, že kontajnery budú dobrými susedmi. Kontrolné skupiny vám umožňujú zdieľať dostupné hardvérové ​​prostriedky a v prípade potreby nastaviť limity a obmedzenia. Napríklad obmedziť možné množstvo pamäte pre kontajner.

Systém súborov Union

Union File Sysem alebo UnionFS je súborový systém, ktorý funguje tak, že vytvára vrstvy, vďaka čomu je veľmi ľahký a rýchly. Docker používa UnionFS na vytvorenie blokov, z ktorých je kontajner zostavený. Docker môže používať niekoľko variantov UnionFS vrátane: AUFS, btrfs, vfs a DeviceMapper.

Formáty kontajnerov

Docker kombinuje tieto komponenty do obalu, ktorý nazývame formát kontajnera. Predvolený formát je tzv libcontainer. Docker tiež podporuje tradičný formát kontajnera v systéme Linux LXC. V budúcnosti môže Docker podporovať ďalšie formáty kontajnerov. Napríklad integrácia s väznicami BSD alebo Solaris Zones.

Zdroj: hab.com

Pridať komentár