Programovanie

Čo je Docker? Iskra revolúcie v kontajneroch

Docker je softvérová platforma na vytváranie aplikácií založených na nádob - malé a ľahké prostredia na vykonávanie, ktoré spoločne využívajú jadro operačného systému, ale inak fungujú navzájom izolovane. Zatiaľ čo kontajnery ako koncept existujú už nejaký čas, Docker, projekt otvoreného zdroja spustený v roku 2013, pomohol popularizovať túto technológiu a pomohol riadiť trend smerom k kontajnerizácia a mikroslužby vo vývoji softvéru, ktorý sa stal známym ako vývoj v prostredí cloudu.

Čo sú to kontajnery?

Jedným z cieľov vývoja moderného softvéru je udržiavať aplikácie na rovnakom hostiteľovi alebo klastri izolované od seba, aby si navzájom neprimerane nezasahovali do prevádzky alebo údržby. To môže byť ťažké vďaka balíkom, knižniciam a ďalším softvérovým komponentom potrebným na ich spustenie. Jedným z riešení tohto problému bolo virtuálne stroje, ktoré udržujú aplikácie na rovnakom hardvéri úplne oddelené a na minimum znižujú konflikty medzi softvérovými komponentmi a konkurenciu o hardvérové ​​zdroje. Virtuálne stroje sú však objemné - každý vyžaduje svoj vlastný operačný systém, takže má obvykle veľkosť gigabajtov - a je ťažké ich udržiavať a inovovať.

Kontajnery, naopak, izolovať výkonné prostredia aplikácií od seba, ale zdieľať základné jadro OS. Spravidla sa merajú v megabajtoch, používajú oveľa menej zdrojov ako virtuálne počítače a spúšťajú sa takmer okamžite. Môžu byť zabalené oveľa hustejšie na rovnakom hardvéri a otáčať sa hore a dole hromadne s oveľa menšou námahou a režijnými nákladmi. Kontajnery poskytujú vysoko efektívny a vysoko granulárny mechanizmus na kombinovanie softvérových komponentov do druhov aplikácií a zásobníkov služieb potrebných v modernom podniku a na udržiavanie týchto softvérových komponentov aktualizovaných a udržiavaných.

Docker

Čo je Docker?

Docker je projekt otvoreného zdroja, ktorý uľahčuje vytváranie kontajnerov a aplikácií založených na kontajneroch. Pôvodne postavený pre Linux, Docker teraz funguje aj na Windows a MacOS. Aby sme pochopili, ako Docker funguje, pozrime sa na niektoré komponenty, ktoré by ste použili na vytvorenie aplikácií v kontajneroch Docker.

Dockerfile

Každý kontajner Docker začína na Dockerfile. Dockerfile je textový súbor napísaný v ľahko zrozumiteľnej syntaxi, ktorý obsahuje pokyny na zostavenie Dockeru obrázok (viac o tom za chvíľu). Súbor Docker určuje operačný systém, ktorý bude základom kontajnera, spolu s jazykmi, premennými prostredia, umiestnením súborov, sieťovými portami a ďalšími potrebnými komponentmi - a samozrejme, čo bude kontajner vlastne robiť, keď ho spustíme.

Paige Niedringhaus v ITNext má dobrý rozpis syntaxe súboru Dockerfile.

Dockerov obraz

Keď už máte svoj súbor Docker napísaný, vyvoláte ho stavať nástroj na vytvorenie súboru obrázok na základe toho Dockerfile. Zatiaľ čo súbor Docker je súbor pokynov, ktoré hovoria stavať Ako urobiť obrázok, Docker image je prenosný súbor obsahujúci špecifikácie, pre ktoré softvérové ​​komponenty bude kontajner bežať a ako. Pretože súbor Dockerfile bude pravdepodobne obsahovať pokyny na získanie niektorých softvérových balíkov z online úložísk, mali by ste dbať na to, aby ste výslovne určili správne verzie, inak môže súbor Dockerfile vytvárať nekonzistentné obrázky podľa toho, kedy je vyvolaný. Ale akonáhle je obrázok vytvorený, je statický. Codefresh ponúka pohľad na to, ako vytvoriť obraz podrobnejšie.

Docker bežať

Docker’s bežať obslužný program je príkaz, ktorý skutočne spustí kontajner. Každá nádoba je inštancia obrázka. Kontajnery sú navrhnuté tak, aby boli prechodné a dočasné, ale je možné ich zastaviť a reštartovať, čím sa kontajner uvedie do rovnakého stavu, v akom bol zastavený. Ďalej je možné súčasne spustiť viac inštancií kontajnera s rovnakým obrázkom (pokiaľ má každý kontajner jedinečný názov). Kontrola kódu obsahuje veľké rozdelenie rôznych možností pre bežať príkaz, ktorý vám dá pocit, ako to funguje.

Docker Hub

Aj keď je vytváranie kontajnerov jednoduché, nenechajte si ujsť myšlienku, že budete musieť všetky svoje obrázky vytvoriť úplne od začiatku. Docker Hub je úložisko SaaS na zdieľanie a správu kontajnerov, kde nájdete oficiálne obrázky Dockeru od open-source projektov a dodávateľov softvéru a neoficiálne obrázky od širokej verejnosti. Môžete si stiahnuť obrázky kontajnerov obsahujúce užitočný kód alebo nahrať svoje vlastné, otvorene ich zdieľať alebo ich namiesto toho označiť ako súkromné. Ak chcete, môžete tiež vytvoriť miestny register Docker. (Docker Hub mal v minulosti problémy s obrázkami, ktoré sa nahrávali so zabudovanými zadnými vrátkami.)

Dockerov motor

Docker Engine je jadrom Dockeru, základnej technológie klient-server, ktorá vytvára a prevádzkuje kontajnery. Všeobecne povedané, keď niekto povie Docker všeobecne a nehovorí o spoločnosti alebo celkovom projekte, znamenajú Docker Engine. V ponuke sú dve rôzne verzie Docker Engine: Docker Engine Enterprise a Docker Engine Community.

Komunitné vydanie Docker

Docker vydal svoje Enterprise Edition v roku 2017, ale jej pôvodná ponuka, premenovaná na Docker Community Edition, zostáva open source a bezplatná a nestratila pri tom žiadne funkcie. Namiesto toho Enterprise Edition, ktorá stojí 1 500 dolárov za uzol ročne, pridala pokročilé funkcie správy vrátane ovládacích prvkov pre správu klastrov a obrazov a sledovanie zraniteľnosti. Blog BoxBoat obsahuje zhrnutie rozdielov medzi jednotlivými vydaniami.

Ako Docker dobyl kontajnerový svet

Myšlienka, že daný proces je možné spustiť s určitou mierou izolácie od zvyšku jeho operačného prostredia, bola zabudovaná do operačných systémov Unix, ako sú BSD a Solaris, už celé desaťročia. Pôvodná technológia kontajnera Linux, LXC, je virtualizačná metóda na úrovni OS na spustenie viacerých izolovaných systémov Linux na jednom hostiteľovi. Program LXC umožnili dve funkcie systému Linux: menné priestory, ktoré obaľujú sadu systémových prostriedkov a prezentujú ich procesu, aby vyzeral, že sú vyhradené pre tento proces; a skupiny, ktoré riadia izoláciu a využitie systémových prostriedkov, ako sú CPU a pamäť, pre skupinu procesov.

Kontajnery oddeľujú aplikácie od operačných systémov, čo znamená, že používatelia môžu mať čistý a minimálny operačný systém Linux a všetko ostatné môžu spúšťať v jednom alebo viacerých izolovaných kontajneroch. A pretože je operačný systém oddelený od kontajnerov, môžete kontajner presunúť cez akýkoľvek server Linux, ktorý podporuje prostredie runtime kontajnera.

Docker predstavil niekoľko významných zmien v LXC, vďaka ktorým sú kontajnery prenosnejšie a flexibilnejšie na použitie. Pomocou kontajnerov Docker môžete nasadiť, replikovať, presunúť a zálohovať pracovnú záťaž ešte rýchlejšie a ľahšie, ako to môžete urobiť pomocou virtuálnych strojov. Docker prináša flexibilitu podobnú cloudu pre každú infraštruktúru schopnú prevádzkovať kontajnery. Nástroje Dockerovho kontajnera boli tiež pokrokom oproti LXC, čo vývojárovi umožnilo vytvárať knižnice obrázkov, skladať aplikácie z viacerých obrázkov a spúšťať tieto kontajnery a aplikácie na lokálnej alebo vzdialenej infraštruktúre.

Docker Compose, Docker Swarm a Kubernetes

Docker tiež uľahčuje koordináciu správania medzi kontajnery, a tak vytvárať zásobníky aplikácií spojením kontajnerov. Docker Compose vytvoril Docker s cieľom zjednodušiť proces vývoja a testovania aplikácií s viacerými kontajnermi. Je to nástroj príkazového riadku, ktorý pripomína klienta Docker a ktorý využíva špeciálne naformátovaný súbor deskriptorov na zostavenie aplikácií z viacerých kontajnerov a ich spoločné spustenie na jednom hostiteľovi. (Ďalšie informácie nájdete v príručke Docker Compose.)

Pokročilejšie verzie tohto správania - ako sa nazýva orchestrácia kontajnera- sú ponúkané inými produktmi, napríklad Docker Swarm a Kubernetes. Ale Docker poskytuje základné informácie. Aj keď Swarm vyrástol z projektu Docker, Kubernetes sa stal de facto Orchestračná platforma Docker podľa výberu.

Výhody Dockera

Kontajnery Docker poskytujú spôsob, ako budovať podnikové a podnikové aplikácie, ktoré sa ľahšie zhromažďujú, udržiavajú a pohybujú sa ako ich bežné náprotivky. 

Kontajnery Docker umožňujú izoláciu a obmedzenie

Kontajnery Docker udržujú aplikácie izolované nielen od seba, ale aj od základného systému. To umožňuje nielen čistejší softvérový zásobník, ale aj uľahčuje diktovanie toho, ako daná kontajnerovaná aplikácia využíva systémové prostriedky - CPU, GPU, pamäť, I / O, sieťové pripojenie atď. Tiež to uľahčuje zabezpečenie toho, aby sa údaje a kód uchovávali oddelene. (Pozri „Kontajnery Docker sú bez štátnej príslušnosti a nemenné“ nižšie.)

Kontajnery Docker umožňujú prenosnosť

Kontajner Docker beží na akomkoľvek počítači, ktorý podporuje behové prostredie kontajnera. Aplikácie nemusia byť viazané na hostiteľský operačný systém, takže prostredie aplikácie aj základné operačné prostredie je možné udržiavať čisté a minimálne.

Napríklad kontajner MySQL pre Linux bude fungovať na väčšine systémov Linux, ktoré kontajnery podporujú. Všetky závislosti pre aplikáciu sa zvyčajne dodávajú v rovnakom kontajneri.

Aplikácie založené na kontajneroch je možné ľahko presunúť z on-prem systémov do cloudových prostredí alebo z notebookov vývojárov na servery, pokiaľ cieľový systém podporuje Docker a akýkoľvek z nástrojov tretích strán, ktoré by sa s ním mohli používať, ako napr. Kubernetes (pozrite si časť „Kontejnery Docker uľahčujú orchestráciu a zmenu mierky“ nižšie).

Za normálnych okolností musia byť obrázky kontajnera Docker vytvorené pre konkrétnu platformu. Napríklad kontajner Windows nebude fungovať v systéme Linux a naopak. Predtým bolo jedným obmedzením tohto obmedzenia spustenie virtuálneho stroja, na ktorom bola spustená inštancia potrebného operačného systému, a spustenie kontajnera vo virtuálnom stroji.

Tím Docker však odvtedy vymyslel elegantnejšie riešenie, tzvprejavuje, ktoré umožňujú zbaliť obrázky pre viac operačných systémov vedľa seba do jedného obrázka. Manifesty sa stále považujú za experimentálne, ale naznačujú, ako by sa kontajnery mohli stať riešením pre rôzne platformy aj pre rôzne prostredia. 

Kontajnery Docker umožňujú skladateľnosť

Väčšina podnikových aplikácií pozostáva z niekoľkých samostatných komponentov usporiadaných do stohu - webový server, databáza, vyrovnávacia pamäť v pamäti. Kontajnery umožňujú skladať tieto kúsky do funkčného celku s ľahko vymeniteľnými časťami. Každý kus je poskytovaný v inom kontajneri a je možné ho nezávisle na ostatných udržiavať, aktualizovať, vymieňať a upravovať.

Toto je v podstate model mikroslužieb dizajnu aplikácií. Rozdelením funkčnosti aplikácií na samostatné samostatné služby ponúka model mikroslužieb protilátku na spomalenie tradičných vývojových procesov a nepružných monolitických aplikácií. Ľahké a prenosné kontajnery uľahčujú vytváranie a údržbu aplikácií založených na mikroslužbách.

Kontajnery Docker uľahčujú orchestráciu a zmenu mierky

Pretože kontajnery sú ľahké a vyžadujú malú réžiu, je možné v danom systéme spustiť oveľa viac z nich. Kontajnery sa však dajú použiť aj na škálovanie aplikácií naprieč klastrami systémov a na zvyšovanie alebo znižovanie počtu služieb, aby sa uspokojil vysoký dopyt alebo aby sa šetrili zdroje.

Najpodnikateľnejšie verzie nástrojov na nasadenie, správu a zmenu veľkosti kontajnerov sa poskytujú prostredníctvom projektov tretích strán. Hlavným z nich je Kubernetes spoločnosti Google, systém na automatizáciu spôsobu nasadenia a škálovania kontajnerov, ale aj toho, ako sú navzájom prepojené, vyvážené a spravované. Kubernetes tiež poskytuje spôsoby, ako vytvoriť a opätovne použiť definície aplikácií s viacerými kontajnermi alebo „Helmove grafy“, aby bolo možné na požiadanie vytvoriť a spravovať komplexné zásobníky aplikácií.

Docker obsahuje aj vlastný vstavaný orchestračný systém, režim Swarm, ktorý sa stále používa pre prípady, ktoré sú menej náročné. Kubernetes sa stal predvolenou voľbou; v skutočnosti je Kubernetes dodávaný s Docker Enterprise Edition.

Docker varuje

Kontajnery riešia veľmi veľa problémov, ale nie sú liekom na všetko. Niektoré z ich nedostatkov sú zámerné, iné sú vedľajším produktom ich dizajnu.

Kontajnery Docker nie sú virtuálne stroje

Najbežnejšou koncepčnou chybou, ktorú ľudia robia s kontajnermi, je porovnávanie s virtuálnymi strojmi. Pretože však kontajnery a virtuálne stroje používajú rôzne izolačné mechanizmy, majú zreteľne odlišné výhody a nevýhody.

Virtuálne stroje poskytujú procesom vysoký stupeň izolácie, pretože sú prevádzkované vo vlastnej inštancii operačného systému. Tento operačný systém nemusí byť rovnaký ako operačný systém spustený na hostiteľovi. Virtuálny stroj Windows môže bežať na hypervízore Linuxu a naopak.

Kontajnery naopak využívajú kontrolované časti zdrojov hostiteľského operačného systému; veľa aplikácií zdieľa rovnaké jadro OS, a to vysoko spravovaným spôsobom. Výsledkom je, že kontajnerované aplikácie nie sú tak dôkladne izolované ako virtuálne stroje, ale poskytujú dostatočnú izoláciu pre veľkú väčšinu pracovných zaťažení.

Kontajnery Docker neposkytujú rýchlosť iba z kovu

$config[zx-auto] not found$config[zx-overlay] not found