Voľne povedané, Docker sa čoraz viac stáva univerzálnym správcom balíkov, ktorý funguje na všetkých možných platformách Linux. Trvá to kontajnerom a používa ich na riešenie úplne iného problému, s ktorým sa vývojári stretávajú. Problém je v tom, že vývojári používajú na písanie aplikácií svoj desktopový operačný systém (ako Windows, macOS alebo Linux s tonou balíkov súvisiacich s desktopom). Aplikácia, ktorú píšu, často beží na úplne inom operačnom systéme na serveri niekde s nejakou distribúciou Linuxu, ktorá je úplne iná ako v prenosnom počítači vývojára.
V prípade Dockeru ide o to, že vaša aplikácia je zabalená ako obrázok Dockeru. Úlohou Dockera je urobiť tento obrázok a spustiť ho ako kontajnerovú aplikáciu. Byť kontajnerizovaný znamená, že aplikácia a jej závislosti budú bežať v izolovanom prostredí, ktoré sa môže úplne líšiť od prenosného počítača vývojára a dokonca aj od produkčného servera. Pokiaľ obaja podporujú Docker, môžu obaja spúšťať rovnakú aplikáciu úplne rovnakým spôsobom.
Anatómia obrázku Dockera
Ako už bolo spomenuté, aplikácia Docker bude fungovať v dohodnutom prostredí. Teraz je otázkou, ako vytvoríme toto prostredie? Väčšina obrázkov aplikácie by importovala základný obrázok Dockera a postavila na ňom svoju aplikáciu.
Aplikácie sú vytvárané z vrstiev softvéru. Obraz kontajnera wordpress je vytvorený pomocou obrazu kontajnera httpd, ktorý je zase postavený na obrázku Ubuntu. Obrázok, na ktorom je postavený novší obrázok, je v terminológii Docker známy ako RODIČSKÝ OBRAZ. V Dockerfile (k tomu, čo znamená Dockerfile, sa dostaneme o niečo neskôr) je tento rodičovský obrázok uvedený v hornej časti súboru, ako je uvedené nižšie:
Z Ubuntu: 18.04
## Zvyšok súboru Dockerfile
Tento súbor Docker po spustení prevedie vašu aplikáciu na obrázok Docker (binárny súbor), ktorý potom môžete odoslať do registra, odkiaľ ho môžete vytiahnuť a vytvoriť nové kontajnery inde. Všetci však budú mať ako základný obrázok Ubuntu: 18.04 a budú bežať, ako keby to bol systém Ubuntu, v ktorom bežia.
Možno ste si to všimli pri pokuse o vytiahnutie nového obrázku dockera.
Toto ukazuje, koľko vrstiev je vytiahnutých pred zavedením samotnej aplikácie (ktorá môže mať veľkosť iba niekoľko megabajtov).
Z tohto dôvodu by sme chceli vytvoriť to, čo je známe ako základný obrázok. Čo nie je postavené na ničom inom. Kľúčové slovo scratch slúži na označenie, že táto vrstva nie je postavená na ničom inom. Ako:
Od nuly## Zvyšok súboru Dcokerfile
Najprv vytvoríme jednoduchú aplikáciu vo svete a potom zistíme, aký bude zvyšok súboru Dockerfile. Hostiteľským systémom je Ubuntu: 18.04 LTS a na experiment používame Docker verzie 17.12.1-ce.
Vytvorenie statického binárneho súboru
Docker kontajnery sú zbierkou procesov, ktoré bežia izolovane od zvyšku operačného systému. Jediná vec, s ktorou je tento proces v kontakte, je jadro. Jadro je zodpovedné za plánovanie týchto procesov na CPU, správu pamäte a niekoľko ďalších základných úloh udržiavania rezervácie.
Väčšina aplikácií na vysokej úrovni však závisí od mnohých systémových knižníc (ako napr glibc, musl, klibc atď ) a veľa runtime závislostí ako Python alebo Node.js alebo Java Runtime. Binár aplikácie nemá v sebe všetky dostupné knižnice, ale keď sa spustí, zavolá tieto knižnice z hostiteľského operačného systému.
Pretože sa pokúšame vytvoriť obrázok od nuly, tieto drobnosti by sme nedostali. Naša aplikácia teda musí byť statický súbor alebo samostatný spustiteľný súbor.
Začnime vytvorením priečinka s názvom MyDockerImage a vytvorením súboru hello.cc v ňom.
$mkdirMyDockerImage$CDMyDockerImage
$dotýkať saahoj.cc
Otvorte hello.cc pomocou svojho obľúbeného textového editora a pridajte do neho nasledujúce riadky.
#zahrnúťpomocou priestoru názvov std;
intHlavná(){
náklady<< 'Ahoj! Táto správa pochádza z kontajnera n';
vrátiť sa 0;
}
Jedná sa o jednoduchý program v jazyku C ++, ktorý tlačí Hello! Táto správa …
Z dôvodov, o ktorých sme hovorili vyššie, to skomplikujeme pomocou statického príznaku. Použitý kompilátor je g ++ (Ubuntu 7.3.0-16ubuntu3) 7.3.0.
Na kompiláciu programu spustite v rovnakom adresári nasledujúci príkaz:
$ g++ -o ahoj-statickýAhoj.DCTo vytvorí binárny spustiteľný súbor ahoj v tom istom adresári. Toto je náš statický súbor. Otestujte, či beží podľa plánu, uvedením názvu súboru v termináli.
$./Ahoj
Teraz sme pripravení kontajnerovať tento jednoduchý program.
Súbor docker
Súbor Dockerfile pozostáva zo sady pravidiel, ktoré preberajú súbory vašej aplikácie (ako sú binárne súbory, zdrojové súbory atď.) Spolu s rôznymi konfiguračnými parametrami, ako je rozloženie systému súborov, odhalené porty atď., A mení ich na súbor s obrázkom Dockeru. Potom môžete zdieľať súbor s obrázkom s kýmkoľvek, kto chce spustiť túto aplikáciu.
Nebudeme sa zaoberať všetkými možnosťami, ktoré sú k dispozícii pre Dockerfile, namiesto toho napíšeme veľmi minimalistický súbor Dockerfile. V tom istom adresári, kde sa nachádza váš ahoj spustiteľný súbor, vytvorte prázdny súbor s názvom Súbor docker.
$dotýkať saSúbor dockerOtvorte ho vo svojom obľúbenom textovom editore a napíšte doň nasledujúce riadky:
OD začiatkuPRIDAŤ ahoj/
CMD['/Ahoj']
škrabanec nie je rodičovský obrázok. Docker skôr naznačuje, že obrázok nie je postavený na žiadnom inom obrázku. Je postavený od nuly. Príkaz ADD prevezme statický binárny súbor s názvom | _+_ | z aktuálneho adresára a pridá ho do koreňového adresára súboru s obrázkom. Keď by sme konečne spustili kontajner na základe tohto obrázku, spustiteľný súbor ahoj sa zobrazí v samotnom koreňovom adresári na | _+_ |
Nakoniec, riadok CMD má reťazec /Ahoj tento reťazec sa spustí ako príkaz shellu vždy, keď sa z tohto obrázku vytvorí kontajner, teda binárny súbor, ktorý sme pridali do nášho kontajnera, a vytlačí správu, ktorú sme napísali v našej aplikácii.
Vytvorme si imidž vyvolaním docker build príkaz, ktorý by prešiel obsahom Dockerfile a vygeneroval obrázok. Spustite nasledujúci príkaz v rovnakom adresári ako súbor Docker a spustiteľný binárny súbor.
$docker build-značkaAhoj .The - tag ahoj flag nastaví názov obrázku na Ahoj a bodka ( . ) na konci hovorí docker build nahliadnuť do aktuálneho adresára súboru Dockerfile a súvisiaceho obsahu.
Spustenie kontajnera Docker
Ak chcete skontrolovať, či sa obrázok, ktorý sme práve vytvorili, zobrazuje v zozname obrázkov, spustite:
$docker obrázky
Všimnite si, aký malý je obrázok ahoj v porovnaní s inými obrázkami. V každom prípade je pripravený na prevádzku ako kontajner,
$docker run ahoj
To je všetko! Vytvorili ste svoj prvý minimalistický kontajner od začiatku.
Ďalšie možnosti
Aj keď je vytváranie obrázkov od začiatku vždy možnosťou, ľudia často majú tendenciu vytvárať obrázky z iných ľahkých distribúcií Linuxu. Napríklad obrázky ako alpine a busybox sú skutočne odľahčené prostredia s menšími knižnicami, ako je musl, namiesto glibc.
Použite ich ako svoj rodičovský obrázok pomocou Z alpského: najnovšie výsledkom budú aj menšie obrázky. Pretože základné obrázky majú veľkosť iba 2 až 5 MB. Dajte nám vedieť, ak existuje ďalšia téma súvisiaca s Dockerom, ktorou by sme sa chceli zaoberať ďalej. Môžete nás kontaktovať na Twitter , Facebook alebo sa k nám prihláste na odber e -mailom.