Programovanie

Kontajnery 101: Základy Dockeru

Docker začínal v roku 2012 ako open source projekt s pôvodným názvom dotcloud, ktorý sa zameriava na stavanie kontajnerov pre jednu aplikáciu pre Linux. Od tej doby sa Docker stal nesmierne populárnym vývojovým nástrojom, ktorý sa čoraz viac využíva ako runtime prostredie. Len málo - ak nejaké - technológie sa chytili vývojárov tak rýchlo ako Docker.

Jedným z dôvodov, prečo je Docker taký populárny, je to, že prináša prísľub „vyvinúť sa raz, bežať kdekoľvek“. Docker ponúka jednoduchý spôsob, ako zbaliť aplikáciu a jej runtime závislosti do jedného kontajnera; poskytuje tiež abstrakciu za behu, ktorá umožňuje kontajneru bežať v rôznych verziách jadra Linuxu.

Pomocou Dockeru môže vývojár vytvoriť kontajnerovanú aplikáciu na svojej pracovnej stanici a potom ľahko nasadiť kontajner na akýkoľvek server s povoleným Dockerom. Nie je potrebné znova testovať alebo preladiť kontajner pre prostredie servera, či už v cloude alebo v priestoroch.

Docker navyše poskytuje mechanizmus zdieľania a distribúcie softvéru, ktorý umožňuje vývojárom a operačným tímom ľahko zdieľať a opakovane používať obsah kontajnera. Tento distribučný mechanizmus spojený s prenosnosťou naprieč strojmi pomáha zohľadniť popularitu Dockeru u operačných tímov a u vývojárov.

Komponenty Dockeru

Docker je vývojový nástroj aj runtime prostredie. Aby sme porozumeli Dockeru, musíme najskôr porozumieť konceptu obrazu kontajnera Dockeru. Kontajner vždy začína obrázkom a považuje sa za inštanciu tohto obrázka. Obrázok je statická špecifikácia toho, čo by malo byť v kontajneri za behu, vrátane kódu aplikácie vo vnútri kontajnera a nastavení konfigurácie za behu. Obrázky Dockeru obsahujú vrstvy iba na čítanie, čo znamená, že po vytvorení obrázka sa už nikdy neupravuje.

Obrázok 1 zobrazuje príklad obrázka kontajnera. Tento obrázok zobrazuje obraz Ubuntu s inštaláciou Apache. Obrázok je zložený z troch základných vrstiev Ubuntu a aktualizačnej vrstvy, na ktorej je vrstva Apache a vlastná vrstva súborov.

Spustený kontajner Docker je inštanciou obrázka. Kontajnery odvodené z rovnakého obrázka sú navzájom identické, pokiaľ ide o ich aplikačný kód a závislosti za behu. Ale na rozdiel od obrázkov, ktoré sú iba na čítanie, bežiace kontajnery obsahujú zapisovateľnú vrstvu (kontajnerovú vrstvu) navrchu obsahu iba na čítanie. Zmeny za behu, vrátane všetkých zápisov a aktualizácií údajov a súborov, sa ukladajú do kontajnerovej vrstvy. Viaceré súčasne bežiace kontajnery, ktoré zdieľajú rovnaký podkladový obrázok, teda môžu mať kontajnerové vrstvy, ktoré sa podstatne líšia.

Po odstránení bežiaceho kontajnera sa odstráni aj zapisovateľná kontajnerová vrstva, ktorá nebude pretrvávať. Jediným spôsobom, ako pretrvávať zmeny, je urobiť explicitné docker spáchať príkaz pred odstránením kontajnera. Keď urobíte a docker spáchať, bežiaci obsah kontajnera vrátane zapisovateľnej vrstvy sa zapíše do nového obrázka kontajnera a uloží sa na disk. Toto sa stane novým obrázkom odlišným od obrázka, ktorým bola inštancia vytvorená.

Pomocou tohto výslovného docker spáchať príkazom, je možné vytvoriť postupnú, diskrétnu sadu obrazov Dockeru, pričom každý je postavený nad predchádzajúcim obrázkom. Docker navyše používa stratégiu kopírovania a zápisu na minimalizáciu úložnej stopy kontajnerov a obrázkov, ktoré zdieľajú rovnaké základné komponenty. To pomáha optimalizovať úložný priestor a minimalizovať čas spustenia kontajnera.

Obrázok 2 zobrazuje rozdiel medzi obrázkom a bežiacim kontajnerom. Upozorňujeme, že každý bežiaci kontajner môže mať inú zapisovateľnú vrstvu.

Okrem konceptu obrazu má Docker niekoľko špecifických komponentov, ktoré sa líšia od tých v tradičných kontajneroch s Linuxom.

  • Dockerov démon. Démon Docker, tiež známy ako Docker Engine, je tenká vrstva medzi kontajnermi a jadrom Linuxu. Démon Docker je trvalé runtime prostredie, ktoré spravuje aplikačné kontajnery. Akýkoľvek kontajner Docker môže bežať na ľubovoľnom serveri, ktorý má povolený Docker-daemon, bez ohľadu na operačný systém, ktorý ho vlastní.
  • Dockerfile. Vývojári používajú súbory Dockerfiles na vytváranie obrázkov kontajnerov, ktoré sa potom stávajú základom fungovania kontajnerov. Dockerfile je textový dokument, ktorý obsahuje všetky informácie o konfigurácii a príkazy potrebné na zostavenie obrázka kontajnera. Pomocou súboru Dockerfile dokáže démon Docker automaticky vytvoriť obraz kontajnera. Tento proces výrazne zjednodušuje kroky na vytvorenie kontajnera.

Konkrétnejšie v súbore Docker najskôr zadáte základný obraz, z ktorého sa začína proces zostavovania. Potom určíte postupnosť príkazov, po ktorých je možné vytvoriť nový obrázok kontajnera.

  • Nástroje rozhrania príkazového riadku Docker. Docker poskytuje sadu príkazov CLI na správu životného cyklu kontajnerov založených na obrázkoch. Príkazy Dockeru zahŕňajú vývojové funkcie, ako sú zostavovanie, export a označovanie, ako aj behové funkcie, ako je spustenie, odstránenie, spustenie a zastavenie kontajnera a ďalšie.

Príkazy Dockera môžete vykonávať proti konkrétnemu démonovi Dockera alebo registru. Napríklad ak vykonáte príkaz docker -ps príkaz, Docker vráti zoznam kontajnerov bežiacich na démonovi.

Distribúcia obsahu pomocou Dockeru

Okrem runtime prostredia a formátov kontajnerov poskytuje Docker mechanizmus distribúcie softvéru, bežne známy ako register, ktorý uľahčuje zisťovanie a distribúciu obsahu kontajnera.

Koncept registra je pre úspech Dockeru rozhodujúci, pretože poskytuje sadu nástrojov na zabalenie, odoslanie, uloženie, objavenie a opätovné použitie obsahu kontajnera. Spoločnosť Docker prevádzkuje verejný bezplatný register s názvom Docker Hub.

  • Register. Register Docker je miesto, kde sa zverejňujú a ukladajú obrázky kontajnerov. Register môže byť vzdialený alebo lokálny. Môže to byť verejné, takže ho môže používať každý, alebo súkromné, obmedzené na organizáciu alebo skupinu používateľov. Register Docker je dodávaný so sadou bežných rozhraní API, ktoré umožňujú používateľom vytvárať, publikovať, vyhľadávať, sťahovať a spravovať obrázky kontajnerov.
  • Docker Hub. Docker Hub je verejný cloudový register kontajnerov spravovaný spoločnosťou Docker. Docker Hub poskytuje podporu pracovných tokov pri objavovaní, distribúcii a spolupráci obrázkov. Docker Hub má navyše sadu oficiálnych obrázkov, ktoré sú certifikované spoločnosťou Docker. Toto sú obrázky od známych vydavateľov softvéru, ako sú Canonical, Red Hat a MongoDB. Tieto oficiálne obrázky môžete použiť ako základ pre vytváranie vlastných obrázkov alebo aplikácií.

Obrázok 3 zobrazuje pracovný tok, v ktorom používateľ vytvorí obrázok a nahrá ho do registra. Ostatní používatelia môžu vytiahnuť obrázok z registra, vyrobiť produkčné kontajnery a nasadiť ich na hostiteľov Dockeru, nech sú kdekoľvek.

Nemennosť kontajnerov Docker

Jednou z najzaujímavejších vlastností kontajnerov Docker je ich nemennosť a z nich vyplývajúca bezstavovosť kontajnerov.

Ako sme už opísali v predchádzajúcej časti, obrázok Dockeru, akonáhle je vytvorený, sa nemení. Bežiaci kontajner odvodený z obrázka má zapisovateľnú vrstvu, ktorá dokáže dočasne uložiť zmeny za behu. Ak je kontajner potvrdený pred odstránením pomocou docker spáchať, zmeny v zapisovateľnej vrstve sa uložia do nového obrázka, ktorý sa líši od predchádzajúceho.

Prečo je nemennosť dobrá? Nezmeniteľné obrázky a kontajnery vedú k nemennej infraštruktúre a nemenná infraštruktúra má veľa zaujímavých výhod, ktoré nie je možné dosiahnuť tradičnými systémami. Medzi tieto výhody patrí:

  • Kontrola verzie. Vyžadovaním explicitných záväzkov, ktoré generujú nové obrázky, vás Docker núti vykonávať kontrolu verzie. Môžete sledovať následné verzie obrázka; Vrátenie späť na predchádzajúci obrázok (teda na predchádzajúci komponent systému) je úplne možné, pretože predchádzajúce obrázky sa uchovávajú a nikdy sa nemenia.
  • Čistšie aktualizácie a lepšie zvládnuteľné zmeny stavu. Vďaka nemennej infraštruktúre už nemusíte inovovať serverovú infraštruktúru, čo znamená, že nie je potrebné meniť konfiguračné súbory, žiadne aktualizácie softvéru, žiadne aktualizácie operačného systému atď. Ak sú potrebné zmeny, jednoducho urobíte nové kontajnery a vytlačíte ich, aby ste nahradili staré. Toto je oveľa diskrétnejšia a zvládnuteľnejšia metóda zmeny stavu.
  • Minimalizovaný drift. Aby ste sa vyhli posunu, môžete pravidelne a proaktívne obnovovať všetky komponenty vo vašom systéme, aby ste sa uistili, že sú najnovšími verziami. Táto prax je oveľa jednoduchšia pri kontajneroch, ktoré zapuzdrujú menšie komponenty systému, ako je to pri tradičnom objemnom softvéri.

Rozdiel Dockera

Formát obrazu Dockeru, rozsiahle API pre správu kontajnerov a inovatívny mechanizmus distribúcie softvéru z neho urobili obľúbenú platformu pre vývojové aj prevádzkové tímy. Docker prináša organizácii tieto významné výhody.

  • Minimálne deklaratívne systémy. Kontajnery Docker sú v najlepšom prípade, ak ide o malé a jednoúčelové aplikácie. Tak vzniknú kontajnery, ktoré majú minimálnu veľkosť a ktoré zase podporujú rýchle dodanie, nepretržitú integráciu a nepretržité nasadenie.
  • Predvídateľné operácie. Najväčšou bolesťou v systémových operáciách vždy bolo zdanlivo náhodné chovanie infraštruktúry alebo aplikácií. Tým, že vás Docker núti robiť menšie a lepšie spravovateľné aktualizácie, a poskytnutím mechanizmu na minimalizáciu driftu systému, vám pomôže vytvoriť predvídateľnejšie systémy. Po odstránení driftov máte istotu, že softvér sa bude správať vždy rovnakým spôsobom, bez ohľadu na to, koľkokrát ho nasadíte.
  • Rozsiahle opätovné použitie softvéru. Kontajnery Docker opätovne používajú vrstvy z iných obrázkov, čo prirodzene podporuje opätovné použitie softvéru. Zdieľanie obrázkov Dockeru prostredníctvom registrov je ďalším skvelým príkladom opätovného použitia komponentov vo veľkom meradle.
  • Skutočná prenosnosť vo viacerých jazykoch. Docker umožňuje skutočnú nezávislosť na platforme tým, že umožňuje kontajnerom voľne migrovať medzi rôznymi cloudovými platformami, lokálnymi infraštruktúrami a vývojovými pracovnými stanicami.

Docker už mení spôsob, akým organizácie budujú systémy a poskytujú služby. Začína sa to pretvárať v našom uvažovaní o dizajne softvéru a ekonomike dodávania softvéru. Predtým, ako sa tieto zmeny skutočne zakorenia, musia organizácie lepšie pochopiť, ako spravovať zabezpečenie a zásady pre prostredie Docker. Ale to je téma pre ďalší článok.

Chenxi Wang je vedúcim stratégie pre firmu Twistlock zameranú na zabezpečenie kontajnerov.

Nové technologické fórum poskytuje miesto na preskúmanie a diskusiu o vznikajúcich podnikových technológiách v nebývalej hĺbke a šírke. Výber je subjektívny, založený na našom výbere technológií, ktoré považujeme za dôležité a pre čitateľov najväčší záujem. neprijíma marketingové záruky na zverejnenie a vyhradzuje si právo upravovať všetok prispievaný obsah. Všetky otázky posielajte na adresu [email protected].

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