Pochopenie Dockeru

Už niekoľko mesiacov používam Docker na štruktúrovanie procesu vývoja/dodávky webových projektov. Navrhujem čitateľom "Habr" preklad úvodného článku o Dockeri — "Understanding Docker".

Čo je Docker?

Docker je otvorená platforma na vývoj, dodávku a prevádzku aplikácií. Docker je navrhnutý na rýchlejšie nasadenie vašich aplikácií. S Dockerom môžete oddeliť vašu aplikáciu od vašej infraštruktúry a zaobchádzať s infraštruktúrou ako s riadenou aplikáciou. Docker pomáha nasadiť váš kód rýchlejšie, rýchlejšie testovať a znížiť čas medzi písaním kódu a jeho nasadením. Docker to dosahuje pomocou ľahkej platformy kontajnerovej virtualizácie, ktorá využíva procesy a nástroje na správu a dodanie vašich aplikácií.

V svojom jadre Docker umožňuje spustiť takmer akúkoľvek aplikáciu, bezpečne izolovanú v kontajneri. Bezpečná izolácia vám umožňuje spustiť na jednom hostiteľovi veľa kontajnerov súčasne. Ľahká povaha kontajnera, ktorý sa spúšťa bez dodatočnej záťaže hypervízora, vám umožňuje dosiahnuť viac z vašich zariadení.

Platforma a prostriedky kontajnerovej virtualizácie môžu byť užitočné v nasledujúcich prípadoch:

  • balenie vašej aplikácie (a taktiež používaných komponentov) do Docker kontajnerov;
  • distribúcia a dodávka týchto kontajnerov vašim tímom na vývoj a testovanie;
  • nasadenie týchto kontajnerov na vaše produkčné prostredia, ako do dátových centier, tak aj do cloudu.

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

Rýchle nasadenie vašich aplikácií

Docker je skvelý na organizovanie vývojového cyklu. Docker umožňuje vývojárom používať lokálne kontajnery s aplikáciami a službami. To následne umožňuje integráciu s procesom kontinuálnej integrácie a dodávky (continuous integration and deployment workflow).

Napríklad vaši vývojári píšu kód lokálne a zdieľajú svoj vývojový stack (súbor Docker obrazov) s kolegami. Keď sú pripravení, odosielajú kód a kontajnery na testovaciu platformu a spúšťajú všetky potrebné testy. Z testovacej platformy môžu odoslať kód a obrazy na produkciu.

Jednoduchšie nasadenie a rozdelenie

Platforma založená na kontajneroch Docker umožňuje ľahké prenášanie vašich záťaží. Kontajnery Docker môžu fungovať na vašej lokálnej mašine, rovnako ako na virtuálnej mašine v dátovom centre alebo v cloude.

Prenositeľnosť a ľahká povaha Dockeru umožňuje jednoduché dynamické spravovanie vašej záťaže. Môžete použiť Docker na nasadenie alebo zastavenie vašej aplikácie alebo služieb. Rýchlosť Dockeru to umožňuje takmer v reálnom čase.

Vysoké záťaže a viac užitočných zaťažení

Docker je ľahký a rýchly. Poskytuje udržateľnú, nákladovo efektívnu alternatívu virtuálnym strojom založeným na hypervízoroch. Je obzvlášť užitočný za podmienok vysokých záťaží, napríklad pri vytváraní vlastného cloudu alebo platformy ako služba (platform-as-service). Ale je tiež užitočný pre malé a stredné aplikácie, keď chcete získať viac z existujúcich zdrojov.

Hlavné komponenty Dockeru

Docker sa skladá z dvoch hlavných komponentov:

  • Docker: platforma virtualizácie s otvoreným zdrojom;
  • 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.

Architektúra Dockeru

Docker používa architektúru klient-server. Klient Dockeru komunikuje s démonom Docker, ktorý prevziať náročnosť vytvárania, spúšťania a distribuovania vašich kontajnerov. Obe, klient a server môžu fungovať na jednom systéme; môžete pripojiť klienta k vzdialenému démonu Docker. Klient a server komunikujú cez soket alebo cez RESTful API.

Pochopenie Dockeru

Démon Docker

Ako je znázornené na diagrame, démon beží na hostiteľskej mašine. Používateľ neinteraguje so serverom priamo, ale využíva klienta na to.

Klient Docker

Klient Docker, program Docker — je hlavným rozhraním pre Docker. Získava príkazy od používateľa a interaguje s démonom Docker.

Vo vnútri Dockeru

Aby ste pochopili, z čoho sa Docker skladá, musíte vedieť o troch komponentoch:

  • obrázky (images)
  • registry (registries)
  • kontajnery

Obrázky

Docker obraz je read-only šablóna. Napríklad, obraz môže obsahovať operačný systém Ubuntu s Apache a aplikáciu na ňom. Obrazy sa používajú na vytváranie kontajnerov. Docker umožňuje ľahko vytvárať nové obrazy, aktualizovať existujúce, alebo si môžete stiahnuť obrazy vytvorené inými. Obrazy sú komponentom zostavenia dockeru.

Registrovňa

Docker registrovňa uchováva obrazy. Existujú verejné a súkromné registrá, z ktorých si môžete stiahnuť alebo nahrať obrazy. Verejná Docker registrovňa je Docker Hub. Tam sa nachádza obrovská kolekcia obrazov. Ako už viete, obrazy môžu byť vytvorené vami alebo môžete použiť obrazy vytvorené inými. Registrá sú komponentom distribúcie.

Kontajnery

Kontajnery sú podobné adresárom. V kontajneroch sa nachádza všetko, čo potrebujete na prevádzku aplikácie. Každý kontajner je vytvorený z obrazu. Kontajnery môžu byť vytvorené, spustené, zastavené, presunuté alebo odstránené. Každý kontajner je izolovaný a predstavuje bezpečnú platformu pre aplikáciu. Kontajnery sú komponentom práce.

Ako teda funguje Docker?

Doteraz vieme, že:

  • môžeme vytvárať obrazy, v ktorých sú naše aplikácie;
  • môžeme vytvárať kontajnery z obrazov na spúšťanie aplikácií;
  • môžeme distribuovať obrazy prostredníctvom Docker Hub alebo iného registra obrazov.

Pozrime sa, ako sa tieto komponenty kombinujú.

Ako funguje obraz?

Už vieme, že obraz je read-only šablóna, z ktorej sa vytvára kontajner. Každý obraz pozostáva z množstva úrovní. Docker používa union file system na spojenie týchto úrovní do jedného obrazu. Union file system umožňuje súborom a adresárom z rôznych súborových systémov (rôznych vetiev) transparentne sa prekryť a vytvoriť koherentný súborový systém.

Jedným z dôvodov, prečo je docker ľahký, je použitie týchto úrovní. Keď upravíte obraz, napríklad aktualizujete aplikáciu, vytvorí sa nová úroveň. Takto, bez nahradenia celého obrazu alebo jeho prekompilácie, ako by ste to možno museli urobiť s virtuálnym strojom, sa iba úroveň pridá alebo aktualizuje. A nemusíte distribuovať celý nový obraz, distribuuje sa iba aktualizácia, čo umožňuje rýchlejšie a jednoduchšie šírenie obrazov.

V základe každého obrazu sa nachádza základný obraz. Napríklad, ubuntu, základný obraz Ubuntu alebo fedora, základný obraz distribúcie Fedora. Môžete tiež použiť obrazy ako základ pre vytváranie nových obrazov. Napríklad, ak máte obraz apache, môžete ho použiť ako základný obraz pre vaše webové aplikácie.

Poznámka! Docker zvyčajne berie obrazy z registra Docker Hub.

Docker obrazy môžu byť vytvorené z týchto základných obrazov, kroky popisujúce vytvorenie týchto obrazov nazývame inštrukciami. Každá inštrukcia vytvára nový obraz alebo úroveň. Inštrukciami budú nasledujúce akcie:

  • spustenie príkazu
  • pridanie súboru alebo adresára
  • vytvorenie premennej prostredia
  • určenie toho, čo sa má spustiť, keď sa spúšťa kontajner tohto obrazu

Tieto inštrukcie sú uložené v súbore Dockerfile. Docker to číta, Dockerfilekeď zostavujete obraz, vykonáva tieto inštrukcie a vráti konečný obraz.

Ako funguje docker register?

Register je úložisko docker obrazov. Po vytvorení obrazu ho môžete publikovať na verejnom registri Docker Hub alebo vo vašom osobnom registri.

S pomocou docker klienta môžete vyhľadávať už publikované obrazy a sťahovať ich na vašu mašinu s dockerom na vytváranie kontajnerov.

Docker Hub poskytuje verejné a privátne úložiská obrazov. Vyhľadávanie a sťahovanie obrazov z verejných úložísk je dostupné pre všetkých. Obsah privátnych úložísk sa nezobrazuje vo výsledkoch vyhľadávania. Iba vy a vaši používatelia môžu získať tieto obrazy a vytvárať z nich kontajnery.

Ako funguje kontajner?

Kontajner sa skladá z operačného systému, používateľských súborov a metadát. Ako vieme, každý kontajner je vytvorený z obrazu. Tento obraz hovorí dockeru, čo sa nachádza v kontajneri, aký proces spustiť, keď sa kontajner spúšťa, a ďalšie konfiguračné údaje. Docker obraz je dostupný iba na čítanie. Keď docker spúša kontajner, vytvára úroveň na zapisovanie nad obrazom (použitím unie systému súborov, ako bolo uvedené skôr), v ktorom môže byť spustená aplikácia.

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

Buď pomocou programu docker, alebo pomocou RESTful API, docker klient hovorí docker démonu, aby spustil kontajner.

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

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

  • aký obraz použiť na vytvorenie kontajnera. V našom prípade ubuntu
  • príkaz, ktorý chcete spustiť, keď bude kontajner spustený. V našom prípade /bin/bash

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

Docker v poradí vykoná nasledujúce kroky:

  • stiahne obraz ubuntu: docker kontroluje, či je obraz ubuntu na lokálnom počítači, a ak nie je – stiahne ho z Docker Hub. Ak je obraz dostupný, použije ho na vytvorenie kontajnera;
  • vytvorí kontajner: keď je obraz získaný, docker ho používa na vytvorenie kontajnera;
  • inicializuje súborový systém a montuje read-only úroveň: kontajner je vytvorený v súborovom systéme a read-only úroveň bola pridaná z obrazu;
  • inicializuje sieť/most: vytvorí sieťové rozhranie, ktoré umožňuje dockeru komunikovať s hostiteľským strojom;
  • Nastavenie IP adresy: nájde a nastaví adresu;
  • Spúšťa zadaný proces: spúšťa vašu aplikáciu;
  • Spracováva a vydáva výstup vašej aplikácie: pripojuje sa a zaznamenáva štandardný vstup, výstup a chybový tok vašej aplikácie, aby ste mohli sledovať, ako vaša aplikácia funguje.

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

Používané technológie

Docker je napísaný v Go a využíva niektoré funkcie jadra Linuxu na implementáciu uvedenej funkcionality.

Priestorové mená (namespaces)

Docker používa technológiu namespaces na organizovanie izolovaných pracovných priestorov, ktoré nazývame kontajnery. Keď spustíme kontajner, docker vytvorí súbor priestorov názvov pre tento kontajner.

Týmto sa vytvára izolovaná úroveň, každý aspekt kontajnera beží vo svojom vlastnom priestore názvov a nemá prístup k vonkajšiemu systému.

Zoznam niektorých priestorov názvov, ktoré docker používa:

  • pid: na izoláciu procesov;
  • net: na správu sieťových rozhraní;
  • ipc: na správu IPC prostriedkov. (ICP: InterProccess Communication);
  • mnt: na správu pripojovacích bodov;
  • utc: na izoláciu jadra a riadenie generácie verzií (UTC: Unix timesharing system).

Control groups (kontrolné skupiny)

Docker tiež používa technológiu cgroups alebo kontrolné skupiny. Kľúčom k práci aplikácie v izolácii je poskytovanie aplikácii iba tých zdrojov, ktoré chcete poskytnúť. To zaručuje, že kontajnery budú dobrými susedmi. Kontrolné skupiny umožňujú rozdeliť dostupné hardvérové zdroje a ak je to potrebné, nastaviť limity a obmedzenia. Napríklad obmedziť maximálny možný počet pamäte pre kontajner.

Union File System

Union File System alebo UnionFS — to je súborový systém, ktorý funguje vytváraním vrstiev, čo ho robí veľmi ľahkým a rýchlym. Docker používa UnionFS na vytváranie blokov, z ktorých sa stavajú kontajnery. 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. Formát, ktorý sa používa predvolene, sa nazýva libcontainer. Takisto docker podporuje tradičný formát kontajnerov v Linuxe pomocou LXC. V budúcnosti Docker možno podporí aj iné formáty kontajnerov. Napríklad integráciou s BSD Jails alebo Solaris Zones.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster