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:
Výstup z 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: 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 A změňte tento řádek: K tomuto: Uložte soubor a spusťte: 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í $ sudo docker ps Všechny dostupné příkazy můžete zobrazit jednoduchým zadáním Když jsem běžel Úplný prohledávatelný seznam obrázků a úložišť je k dispozici v Docker Hubu. 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: Když jsem psal Všimněte si, že pokud jsem zadal: Já bych měl puledldu Všechno obrázky ( Stejná logika za repo operacemi a značkami platí pro další manipulace s obrázky. Pokud jste zatáhli 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 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í. 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ý. 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: Tím se vytvoří nový kontejner s jedinečným ID a názvem root @ d7c8f02c3c8c: / # apt-get nainstalovat apache2 Všimněte si, že nemusíte používat Normální 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í. 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: root @ d7c8f02c3c8c: / # apt-get install nano V souboru startapache.sh přidejte tyto řádky: . / etc / apache2 / envvars / usr / sbin / apache2 -D FOREGROUND Napište změny a uložte soubor. Pak jej proveďte: 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 Nyní musíte spáchat kontejner pro uložení provedených změn: Commit uloží váš kontejner jako nový obrázek a vrátí jedinečné ID. Argument Můžete to vidět spuštěním příkazu 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 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: 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 informace
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.stav $ sudo ufw
UPUSTIT
na AKCEPTOVAT
. Chcete-li to provést pomocí editoru Nano, zadejte následující:$ sudo nano / etc / default / ufw
DEFAULT_FORWARD_POLICY = "DROP"
DEFAULT_FORWARD_POLICY = "PŘIJMOUT"
$ sudo ufw znovu načíst
Pracujte s obrázky Dockeru a kontejnery Dockeru
docker ps
příkaz:# Tento příkaz zobrazí VŠECHNY kontejnery v systému
$ sudo docker ps -a
# Zobrazí se pouze BĚŽÍCÍ kontejnery
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.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
Docker obrázky vs. kontejnery
ubuntu: 16.04
, ubuntu: xenial-20171201
, ubuntu: xenial
, ubuntu: nejnovější
.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
. $ sudo docker pull -a ubuntu
-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.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
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.Vytvořte nový obrázek Dockeru z kontejneru
Začněte s novým kontejnerem Docker
$ sudo docker run -i -t --name apache_web ubuntu / bin / bash
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
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.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
Vytvořte spouštěcí skript pro kontejner Docker
# Možná budete muset nejprve nainstalovat Nano do kontejneru
root @ d7c8f02c3c8c: / # nano /usr/local/sbin/startapache.sh
#! / bin / bash
root @ d7c8f02c3c8c: / # chmod + x /usr/local/sbin/startapache.sh
výstup
. Když opustíte kontejner, kontejner se zastaví.Potvrďte kontejner a vytvořte nový image Dockeru
$ sudo docker spáchat apache_web local: apache_web
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
.sudo docker obrázky
:ID ÚLOŽNÉHO ZNAČKU VYTVOŘENO VIRTUÁLNÍ VELIKOST
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
$ sudo docker run -d -p 8080: 80 --name místní apache: apache_web /usr/local/sbin/startapache.sh