Programování

Výukový program pro Docker: Začínáme s Dockerem

Kontejnery poskytují odlehčený způsob, jak přenášet pracovní zátěže aplikací, jako je virtuální stroj, ale bez režie a hromadné práce obvykle spojené s virtuálními počítači. S kontejnery lze aplikace a služby zabalit a volně pohybovat mezi fyzickým, virtuálním nebo cloudovým prostředím.

Docker, systém pro vytváření a správu kontejnerů vytvořený společností Docker Inc., přebírá nativní funkčnost kontejneru nalezenou v Linuxu a zpřístupňuje ji koncovým uživatelům prostřednictvím rozhraní příkazového řádku a sady API.

Mnoho běžných komponent aplikací je nyní k dispozici jako předbalené Docker kontejnery, což usnadňuje nasazení hromádek softwaru jako oddělené komponenty (model mikroslužeb). To znamená, že pomáhá vědět, jak jednotlivé kousky do sebe zapadají zevnitř ven.

V této příručce tedy nainstaluji webový server Apache do kontejneru Docker a prozkoumám, jak Docker funguje.

Nainstalujte Docker

Používám Ubuntu jako základ sestavení Dockeru. Ubuntu není jen populární a široce používaná distribuce, ale samotný tým Docker používá pro vývoj Ubuntu a Docker je podporován na serveru Ubuntu od verze 12.04 a vyšší. Kvůli jednoduchosti začínám s pokyny při použití nové instalace Ubuntu 16.04.

Připravte Ubuntu Linux pro Docker

První věcí, kterou musíte udělat, je získat správnou verzi jádra a jeho hlaviček:

$ sudo apt-get install --install-doporučuje linux-generic-hwe-16.04

Tento proces může nějakou dobu trvat a po dokončení bude vyžadovat restartování:

$ sudo restart

Poté možná budete muset upgradovat i další balíčky v systému:

$ sudo apt-get aktualizace

$ sudo apt-get upgrade

Nainstalujte Docker na Ubuntu

Instalace Dockeru na distribuce Linuxu CentOS, Fedora, Debian, Ubuntu a Raspbian je snadná pomocí shell skriptu, který si můžete stáhnout z //get.docker.com/. K tomu budete potřebovat kučera příkaz. Chcete-li získat nejnovější verzi kučera:

sudo apt-get install curl

Jakmile máš kučera nainstalován, načtěte instalační skript a nastavte jej spuštěný:

curl -s //get.docker.com | sudo sh

Po dokončení instalace skriptu se zobrazí následující poznámka s podrobnostmi instalace o verzi Dockeru, klientské i serverové součásti:

Všimněte si podrobností v dolní části o přidávání uživatelů bez oprávnění root do Dockeru. Je vhodné to udělat, ale pokud tak učiníte, doporučujeme vytvořit uživatele bez kořenového adresáře speciálně pro práci s Dockerem a pro žádnou jinou funkci. Kvůli tomuto tutoriálu se však držím používání sudo spustit Docker prostřednictvím neprivilegovaného uživatele.

Nyní můžete vyzkoušet základní kontejner Dockeru:

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

Tento příkaz stáhne obecný obraz Docker Ubuntu (podle ubuntu parametr) a spusťte / bin / bash příkaz v tomto kontejneru. The -i a -t možnosti otevírají standardní vstup a pseudo TTY.

Pokud je úspěšný, měli byste vidět název hostitele v příkazovém řádku změnit na něco jako root @ 216b04387924: / #, což označuje ID číslo (a název hostitele) vašeho nového běžícího kontejneru. Chcete-li odejít, zadejte výstup, stejně jako byste opustili jakoukoli relaci prostředí.

Nyní byste měli mít na svém serveru funkční instalaci Dockeru. Můžete to otestovat a získat základní informace pomocí docker informace příkaz:

$ sudo docker informace

Výstup z docker informace příkaz mimo jiné zobrazuje počet kontejnerů a obrázků. Všimněte si, že to může být docela zdlouhavé; tento příklad ukazuje pouze poslední ze dvou stránek.

Jedna poslední změna, kterou budete muset provést, pokud používáte firewall UFW Ubuntu, je povolit přeposílání paketů. Můžete zkontrolovat, zda UFW běží, zadáním následujícího:

stav $ sudo ufw

Pokud příkaz vrátí stav neaktivní, můžete tento další krok přeskočit. Jinak budete muset upravit konfigurační soubor UFW / etc / default / ufw a změnit zásadu pro přeposílání z UPUSTIT na AKCEPTOVAT. Chcete-li to provést pomocí editoru Nano, zadejte následující:

$ sudo nano / etc / default / ufw

A změňte tento řádek:

DEFAULT_FORWARD_POLICY = "DROP"

K tomuto:

DEFAULT_FORWARD_POLICY = "PŘIJMOUT"

Uložte soubor a spusťte:

$ sudo ufw znovu načíst

Pracujte s obrázky Dockeru a kontejnery Dockeru

Kontejnery Docker jsou mnohem efektivnější než virtuální stroje. Když kontejner nespouští proces, je zcela neaktivní. Kontejnery Docker si můžete představit jako samostatné procesy - pokud nejsou aktivně spuštěné, kromě úložiště nespotřebovávají žádné prostředky.

Aktivní a neaktivní kontejnery můžete zobrazit pomocí docker ps příkaz:

# Tento příkaz zobrazí VŠECHNY kontejnery v systému

$ sudo docker ps -a

# Zobrazí se pouze BĚŽÍCÍ kontejnery

$ sudo docker ps

Všechny dostupné příkazy můžete zobrazit jednoduchým zadáním přístavní dělník. Aktuální shrnutí všech příkazů, jejich možností a úplné popisy najdete v oficiální dokumentaci klienta příkazového řádku.

Když jsem běžel docker run dříve, tento příkaz automaticky vytáhl obrázek kontejneru Ubuntu ze služby registru Docker Hub. Většinu času však budete chtít obrázky kontejnerů do místní mezipaměti vytáhnout předem, spíše než na vyžádání. Chcete-li tak učinit, použijte ukotvení doku, takhle:

$ sudo docker vytáhnout ubuntu

Úplný prohledávatelný seznam obrázků a úložišť je k dispozici v Docker Hubu.

Docker obrázky vs. kontejnery

Něco, co v tomto okamžiku stojí za to vysvětlit, je to, jak obrázky, kontejnery a proces vytažení / tlačení fungují společně.

Docker kontejnery jsou postaveny z snímky, což jsou v podstatě skořápky operačních systémů, které obsahují potřebné binární soubory a knihovny pro spuštění aplikací v kontejneru.

Obrázky jsou označenyznačky, v podstatě metadata, která usnadňují ukládání a načítání různých verzí obrázku. Jediný obrázek lze přirozeně spojit s více značkami: ubuntu: 16.04, ubuntu: xenial-20171201, ubuntu: xenial, ubuntu: nejnovější.

Když jsem psal docker vytáhnout ubuntu dříve jsem vytáhl výchozí obrázek Ubuntu z úložiště Ubuntu, což je obrázek označený nejnovější. Jinými slovy, příkaz docker vytáhnout ubuntu je ekvivalentní k docker pull ubuntu: nejnovější a (v době psaní tohoto článku) docker pull ubuntu: xenial

Všimněte si, že pokud jsem zadal:

$ sudo docker pull -a ubuntu

Já bych měl puledldu Všechno obrázky ( -A flag) v úložišti Ubuntu do mého lokálního systému. Většinou však budete chtít buď výchozí obrázek, nebo konkrétní verzi. Například pokud chcete obrázek pro Ubuntu Saucy Salamander, použili byste docker pull -a ubuntu: vychytralý načíst obrázek s touto konkrétní značkou z daného repo.

Stejná logika za repo operacemi a značkami platí pro další manipulace s obrázky. Pokud jste zatáhli drzost podle výše uvedeného příkladu byste jej spustili zadáním sudo docker run -i -t ubuntu: saucy / bin / bash. Pokud píšetesudo docker image rm ubuntu, k odstranění ubuntu obrázek, odstraní pouze označený obrázek nejnovější . Chcete-li odstranit jiné než výchozí obrázky, například Ubuntu Saucy, musíte zahrnout příslušnou značku:

sudo docker image rm ubuntu: pochmurný

Pracovní tok obrazu a pracovního postupu kontejneru

Zpět k práci s obrázky. Jakmile vytáhnete obrázek, ať už je jakýkoli, vytvoříte z něj živý kontejner (jak jsem ukázal) provedením docker run příkaz. Poté, co jste přidali software a změnili všechna nastavení uvnitř kontejneru, můžete z těchto změn vytvořit nový obrázek pomocí docker commit příkaz.

Je důležité si uvědomit, že Docker ukládá pouze delty nebo změny v obrázcích vytvořených z jiných obrázků. Při vytváření vlastních obrazů se v novém obraze ukládají pouze změny, které provedete v základním obrazu, který odkazuje na základní obraz pro všechny jeho závislosti. Můžete tedy vytvářet obrázky, které mají virtuální velikost 266 MB, ale na disku kvůli této efektivitě zabírají jen několik megabajtů.

Plně nakonfigurované kontejnery lze poté posunout nahoru do centrálního úložiště, které lze použít kdekoli v organizaci nebo dokonce veřejně sdílet. Tímto způsobem může vývojář aplikace publikovat veřejný kontejner pro aplikaci, nebo můžete vytvořit soukromá úložiště pro uložení všech kontejnerů používaných interně vaší organizací.

Vytvořte nový obrázek Dockeru z kontejneru

Nyní, když lépe rozumíte tomu, jak obrázky a kontejnery fungují, pojďme nastavit kontejner webového serveru Apache a nastavit jej jako trvalý.

Začněte s novým kontejnerem Docker

Nejprve musíte postavit nový kontejner. Existuje několik způsobů, jak to provést, ale protože máte několik příkazů ke spuštění, spusťte kořenový shell v novém kontejneru:

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

Tím se vytvoří nový kontejner s jedinečným ID a názvem apache_web. Poskytne vám také kořenový shell, protože jste zadali / bin / bash jako příkaz ke spuštění. Nyní nainstalujte webový server Apache pomocí apt-get:

root @ d7c8f02c3c8c: / # aktualizace apt-get

root @ d7c8f02c3c8c: / # apt-get nainstalovat apache2

Všimněte si, že nemusíte používat sudo, protože běžíte jako root uvnitř kontejneru. Všimněte si, že vy dělat třeba běžet aktualizace apt-get, protože opět seznam balíků uvnitř kontejneru není stejný jako ten mimo něj.

Normální apt-get zobrazí se výstup a balíček Apache2 je nainstalován ve vašem novém kontejneru. Po dokončení instalace spusťte Apache, nainstalujte curl a otestujte instalaci, vše z vašeho kontejneru:

root @ d7c8f02c3c8c: / # služba apache2 start

root @ d7c8f02c3c8c: / # apt-get install curl

root @ d7c8f02c3c8c: / # curl // localhost

Po posledním příkazu byste měli vidět v konzole nezpracovaný HTML výchozí stránky Apache. To znamená, že náš server Apache je nainstalován a běží ve vašem kontejneru.

Pokud jste to dělali v produkčním prostředí, nakonfigurovali byste Apache podle svých požadavků a nainstalovali aplikaci, která bude sloužit. Docker nechal adresáře mimo kontejner mapovat na cesty uvnitř, takže jedním z přístupů je uložit vaši webovou aplikaci do adresáře na hostiteli a zviditelnit ji pro kontejner prostřednictvím mapování.

Vytvořte spouštěcí skript pro kontejner Docker

Nezapomeňte, že kontejner Docker běží pouze tak dlouho, dokud je aktivní jeho proces nebo procesy. Takže pokud se proces, který spustíte při prvním spuštění kontejneru, přesune na pozadí, jako systémový démon, Docker kontejner zastaví. Při spuštění kontejneru proto musíte spustit Apache v popředí, aby se kontejner neopustil, jakmile se spustí.

Vytvořte skript startapache.sh v / usr / local / sbin:

# Možná budete muset nejprve nainstalovat Nano do kontejneru

root @ d7c8f02c3c8c: / # apt-get install nano

root @ d7c8f02c3c8c: / # nano /usr/local/sbin/startapache.sh

V souboru startapache.sh přidejte tyto řádky:

#! / bin / bash

. / etc / apache2 / envvars

/ usr / sbin / apache2 -D FOREGROUND

Napište změny a uložte soubor. Pak jej proveďte:

root @ d7c8f02c3c8c: / # chmod + x /usr/local/sbin/startapache.sh

Tento malý skript přináší pouze příslušné proměnné prostředí pro Apache a spustí proces Apache v popředí.

Úpravy obsahu kontejneru jsou hotové, takže můžete kontejner opustit zadáním výstup. Když opustíte kontejner, kontejner se zastaví.

Potvrďte kontejner a vytvořte nový image Dockeru

Nyní musíte spáchat kontejner pro uložení provedených změn:

$ sudo docker spáchat apache_web local: apache_web

Commit uloží váš kontejner jako nový obrázek a vrátí jedinečné ID. Argument místní: apache_web způsobí, že potvrzení bude umístěno do místního úložiště s názvem místní se štítkem apache_web.

Můžete to vidět spuštěním příkazu sudo docker obrázky:

ID ÚLOŽNÉHO ZNAČKU VYTVOŘENO VIRTUÁLNÍ VELIKOST

místní apache_web d95238078ab0 před 4 minutami 284,1 MB

Všimněte si, že přesné podrobnosti vašeho obrázku - ID obrázku, velikost kontejneru - se budou od mého příkladu lišit.

Kontejnery Docker jsou navrženy tak, aby bylyneměnný. Kdykoli provedete změny v kontejneru, výsledky se zapíší do zcela nového kontejneru, nikdy do původního. Pokud chcete vyměnit Apache například za Nginx, měli byste začít s originálem ubuntu: nejnovější kontejner, přidejte k tomu Nginx a uložte výsledky jako zcela nový kontejner s názvem něco jako místní: nginx.

Pochopte základy Docker networking

Nyní, když máte náš obrázek, můžete spustit náš kontejner a začít zobrazovat stránky. Než to uděláte, dovolte mi však chvíli vysvětlit, jak Docker pracuje se sítí.

Když je Docker nainstalován, vytvoří tři virtuální sítě, které mohou být použity kontejnery Dockeru:

  • most: Toto je síť, ke které se kontejnery standardně připojují. Síť mostu umožňuje kontejnerům mluvit mezi sebou přímo, ale ne s hostitelským systémem.
  • hostitel: Tato síť umožňuje hostitelům zobrazit kontejnery přímo, jako by všechny aplikace v nich běžely jako služby místní sítě.
  • žádný: Jedná se v zásadě o nulovou nebo smyčkovou síť. Kontejner připojený k žádnému nevidí nic jiného než sebe.

Pokud chcete spustit kontejner a nechat ho komunikovat s ostatními kontejnery i s vnějším světem, musíte porty z tohoto kontejneru na hostitele ručně namapovat. V zájmu mého příkladu to můžete provést na příkazovém řádku při spuštění nově vytvořeného kontejneru:

$ sudo docker run -d -p 8080: 80 --name místní apache: apache_web /usr/local/sbin/startapache.sh

Copyright cs.verticalshadows.com 2022