Vytvorenie obrázku dockera od začiatku

Creating Docker Image From Scratch



Hlavnou výhodou Dockera oproti akejkoľvek inej technológii kontajnerizácie je, že Docker je zameraný na vývojárov a ich aplikácie, ktoré sú k dispozícii. Aj keď sa správnym technológiám kontajnerizácie páči LXC , Zóny a Väznice sú zamerané z prevádzkového hľadiska, alebo zjednodušene povedané, tieto platformy sú náhradou za virtuálne počítače bežiace v cloude. Kde ako, Docker je náhradou za balíky a spustiteľné binárne súbory.

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.



Vytvorenie obrázku Dockera od začiatku

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.DC

To 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 docker

Otvorte ho vo svojom obľúbenom textovom editore a napíšte doň nasledujúce riadky:

OD začiatku
PRIDAŤ 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.