Programování

Shlukování s Docker Swarm

Tento výukový program seznamuje vývojáře jazyka Java s Docker Swarm. Dozvíte se, proč tolik podnikových obchodů přijalo vývoj spravovaný pomocí kontejnerů prostřednictvím Dockeru a proč je shlukování důležitou technikou pro práci s kontejnery Dockeru. Zjistíte také, jak si dvě populární Docker clusteringové technologie - Amazon ECS a Docker Swarm - porovnávají, a získáte rychlého průvodce výběrem správného řešení pro váš obchod nebo projekt. Tutoriál je zakončen ukázkou používání Docker Swarm k vývoji a správě dvouuzlového podnikového klastru.

Přečtěte si nyní: Vývoj spravovaný kontejnerem pomocí Dockeru

Než se ponoříte do Docker Swarm, je dobré se seznámit s vývojem řízeným kontejnerem a základy Dockeru. Níže je uveden přehled, ale viz můj úvod do Dockeru pro podrobnější diskusi. Vývojáři obeznámení s těmito základy by měli přejít na další část.

Jaká je dohoda s Dockerem?

Docker je otevřená platforma pro vytváření, odesílání a provoz distribuovaných aplikací. Dockerized aplikace mohou běžet lokálně na stroji vývojáře a lze je nasadit do výroby v cloudové infrastruktuře. Docker se hodí k rychlému vývoji a umožňuje nepřetržitou integraci a nepřetržité nasazení jako téměř žádná jiná technologie. Kvůli těmto funkcím je to platforma, kterou by měl každý vývojář vědět, jak ji používat.

Je důležité si uvědomit, že Docker je kontejnerizace technologie, ne a virtualizace technologie. Zatímco virtuální stroj obsahuje kompletní operační systém a je spravován těžkým procesem zvaným hypervisor, kontejner je navržen tak, aby byl velmi lehký a samostatný. Každý server spouští proces démona nazývaný Dockerův stroj, který spouští kontejnery a překládá volání operačního systému uvnitř kontejneru na nativní volání v hostitelském operačním systému. Kontejner, který je obdobou virtuálního počítače, jen mnohem menší, je hostitelem vaší aplikace, běhového prostředí a operačního systému barebone. Kontejnery obvykle běží na virtuálních počítačích. Zatímco spuštění virtuálního počítače může trvat několik minut, kontejner to zvládne během několika sekund.

Obrázek 1 ilustruje rozdíl mezi kontejnerem a virtuálním strojem.

Kontejnery Docker jsou samostatné, což znamená, že obsahují vše, co potřebují ke spuštění vaší aplikace. Například pro webovou aplikaci spuštěnou v Tomcatu by kontejner zahrnoval:

  • Soubor WAR
  • Kocour
  • JVM
  • Základní operační systém

Obrázek 2 ukazuje architekturu webové aplikace uvnitř kontejneru Docker.

V případě Dockeru každý virtuální stroj spouští proces démona s názvem Dockerův motor. Sestavíte svou aplikaci, například soubor WAR, a poté vytvoříte odpovídající Dockerfile. Dockerfile je textový soubor, který popisuje, jak vytvořit Docker obrázek, což je binární soubor obsahující vše potřebné pro spuštění aplikace. Jako příklad můžete sestavit Dockerfile ze základního obrazu Tomcat obsahujícího základní operační systém Linux, runtime Java a Tomcat. Po pokynu Dockeru, aby zkopíroval soubor WAR do adresáře webcatů Tomcatu, byl soubor Dockerfile zkompilován do obrazu Dockeru skládajícího se ze základního OS, JVM, Tomcat a vašeho souboru WAR. Obraz Dockeru můžete spustit lokálně, ale nakonec ho publikujete do a Úložiště Docker, jako DockerHub.

Zatímco Docker Image je binární verze vašeho kontejneru, runtime instance Docker Image se nazývá a Docker kontejner. Docker kontejnery jsou provozovány vaším Dockerův motor. Stroj, který spouští váš Docker engine, se nazývá Hostitel Docker; může to být váš místní notebook nebo cloudová platforma, v závislosti na rozsahu vaší aplikace.

Základní informace v této části poskytují základ pro pochopení toho, proč je klastrování důležitým doplňkem vaší sady nástrojů Docker. Další informace najdete v mém úvodu do Dockeru.

Shlukování Dockeru

Většina vývojářů, kteří začínají s Dockerem, vytvoří soubor Docker a spustí ho lokálně na notebooku. Ale vývoj správy kontejnerů má víc, než místní spouštění jednotlivých kontejnerů Docker. Dockerova supervelmoc je schopnost dynamicky škálovat kontejnery nahoru nebo dolů. Ve výrobě to znamená spuštění Dockeru v clusteru napříč řadou strojů nebo virtuálních počítačů.

K dispozici jsou různé technologie shlukování Docker, ale dvě nejoblíbenější jsou Amazon EC2 Container Service (ECS) a Docker Swarm.

Amazon ECS

Technologie clusteringu Docker společnosti Amazon využívá Amazon Web Services (AWS) k vytvoření clusteru virtuálních strojů, které mohou spouštět kontejnery Docker. Klastr ECS se skládá ze spravovaného Instance ECS, což jsou instance EC2 s modulem Docker a agentem ECS. ECS používá skupinu automatického škálování k rozšíření a uzavření kontraktu na počet instancí na základě zásad CloudWatch. Například když je průměrné využití CPU instancí ECS příliš vysoké, můžete požádat ECS, aby spustil více instancí, až do maximálního počtu instancí definovaných ve skupině automatického škálování.

Docker kontejnery jsou spravovány pomocí Služba ECS a nakonfigurován podle množství výpočetní kapacity (CPU) a RAM, které kontejner potřebuje ke spuštění. Služba ECS má přidružený Elastic Load Balancer (ELB). Jak spouští a zastavuje kontejnery Docker, služba ECS tyto kontejnery zaregistruje a zruší registraci pomocí ELB. Jakmile nastavíte pravidla pro svůj klastr, Amazon ECS zajistí, že máte spuštěný požadovaný počet kontejnerů a všechny tyto kontejnery jsou přístupné prostřednictvím ELB. Obrázek 3 ukazuje pohled na vysokou úroveň Amazon ECS.

Je důležité rozlišovat mezi ECS instance a úkoly. Klastr ECS spravuje vaše instance ECS, což jsou speciální instance EC2, které běží ve skupině automatického škálování. Služba ECS spravuje úkoly, které mohou obsahovat jeden nebo více kontejnerů Docker a které běží v clusteru. ELB sedí před instancemi ECS, které spouští vaše Docker kontejnery a distribuují zátěž do vašich Docker kontejnerů. Vztah mezi úkoly ECS a kontejnery Docker spočívá v tom, že definice úlohy říká službě ECS, které kontejnery Docker mají být spuštěny, a konfiguraci těchto kontejnerů. Služba ECS spustí úlohu, která spustí kontejnery Dockeru.

Podívejte se na můj úvod do Amazon ECS na VMTurbo.com.

Docker Swarm

Docker's native clustering technology, Docker Swarm allows you to run multiple Docker containers across a cluster of virtual machines. Docker Swarm definuje a manažer kontejner, který běží na virtuálním počítači, který spravuje prostředí, nasazuje kontejnery k různým agentům a hlásí stav kontejneru a informace o nasazení pro cluster.

Při spuštění Docker Swarm je správce primárním rozhraním do Dockeru. Agenti jsou „docker machines“ běžící na virtuálních strojích, které se zaregistrují u správce a spouštějí Docker kontejnery. Když klient pošle manažerovi požadavek na spuštění kontejneru, manažer najde dostupného agenta pro jeho spuštění. Používá nejméně využívaný algoritmus, aby zajistil, že agent provozující nejmenší počet kontejnerů spustí nově požadovaný kontejner. Obrázek 4 ukazuje ukázkovou konfiguraci Docker Swarm, kterou rozvinete v další části.

Proces správce ví o všech aktivních agentech a kontejnerech spuštěných na těchto agentech. Když se virtuální počítače agenta spustí, zaregistrují se u správce a poté jsou k dispozici ke spuštění kontejnerů Docker. Příklad na obrázku 4 má dva agenty (Agent1 a Agent2), kteří jsou registrováni u správce. Každý agent používá dva kontejnery Nginx.

Docker Swarm vs Amazon ECS

Tento článek obsahuje Docker Swarm, ale je užitečné porovnávat kontejnerové technologie. Zatímco Amazon ECS nabízí dobře vyvinuté řešení na klíč, Docker Swarm vám dává svobodu konfigurovat více vaší vlastní infrastruktury. Například Amazon ECS spravuje jak kontejnery, tak vyrovnávače zatížení, zatímco v Docker Swarm byste konfigurovali řešení pro vyrovnávání zatížení, jako je Cisco LocalDirector, F5 BigIp nebo softwarový proces Apache nebo Nginx.

Pokud již používáte svou aplikaci v AWS, ECS usnadňuje spouštění a správu kontejnerů Docker mnohem snadněji než externí řešení. Jako vývojář AWS pravděpodobně už využíváte skupiny automatického škálování, ELB, virtuální privátní cloudy (VPC), role a zásady správy identit a přístupu (IAM) atd. ECS se dobře integruje se všemi, takže je to správná cesta. Pokud ale nepoužíváte AWS, pak díky těsné integraci Docker Swarm s nástroji Docker je to skvělá volba.

AWS a Docker Swarm v hybridním cloudu

Amazon Web Services lze nakonfigurovat na velmi vysokou dostupnost, škálovatelnost a výkon, což je pravděpodobně důvod, proč obsluhuje 25% veškerého internetového provozu, včetně rozsáhlé infrastruktury služeb Netflix. Nedávno však došlo k posunu směrem k hybridním cloudovým prostředím. A hybridní cloud je cloud, ve kterém část aplikace nebo někdy její úplná kopie běží ve veřejném cloudu, jako je AWS, a část běží v soukromém cloudu. Populární možností v tomto případě je spuštění OpenStack v soukromém datovém centru.

Hybridní cloud je bezpečná strategie pro společnost, která přesouvá některé nebo všechny operace do cloudu, ale musí postupovat pomalu a získat důvěru ve veřejné cloudy. Když zvolíte možnost hybridního cloudu, musíte vytvořit vrstvu abstrakce nad základními cloudovými technologiemi, což znamená, že můžete stejně snadno nasadit na Docker Swarm běžící na OpenStack ve vašem vlastním datovém centru, stejně jako na ECS běžící na AWS . Nástroje jako Chef a Puppet vám mohou pomoci tím, že vám umožní definovat vaše prostředí abstraktně a delegovat je, aby zvládly mnoho rozdílů mezi různými prostředími.

Začínáme s Docker Swarm

V předchozí části jste viděli ukázkovou architekturu pro dvouuzlový cluster Docker Swarm. Nyní budete tento cluster vyvíjet pomocí dvou instancí kontejneru Nginx Docker. Nginx je populární webový server, veřejně dostupný jako Docker image na DockerHub. Protože tento článek je zaměřen na Docker Swarm, chtěl jsem použít kontejner Docker, který lze rychle a snadno spustit a snadno otestovat. Můžete libovolně použít libovolný kontejner Dockeru, který si přejete, ale pro ilustraci jsem pro tento příklad vybral Nginx.

Můj úvod do Dockeru obsahuje průvodce nastavením Dockeru ve vašem vývojovém prostředí. Pokud jste nainstalovali a nastavili Docker Toolbox, pak obsahuje vše, co potřebujete ke spuštění Docker Swarm. Další pokyny k nastavení najdete v oficiální dokumentaci Dockeru.

Docker Swarm na příkazovém řádku

Pokud jste dříve používali Docker, pak jste obeznámeni s používáním přístavní dělník příkazový řádek pro spuštění a zastavení kontejnerů. Když používáte Docker Swarm, budete obchodovat přístavní dělník pro dokovací stroj. Docker Machine je v dokumentaci Dockeru definován následovně:

Docker Machine je nástroj, který vám umožňuje instalovat Docker Engine na virtuální hostitele a spravovat hostitele pomocí příkazů docker-machine. Můžete použít Machine k vytvoření hostitelů Dockeru ve vašem místním boxu Mac nebo Windows, ve vaší firemní síti, ve vašem datovém centru nebo na poskytovatelích cloudu, jako je AWS nebo Digital Ocean. Pomocí příkazů docker-machine můžete spustit, zkontrolovat, zastavit a restartovat spravovaného hostitele, upgradovat klienta a démona Dockera a nakonfigurovat klienta Dockeru tak, aby mluvil s vaším hostitelem.

Pokud jste nainstalovali Docker, pak vaše instalace již obsahuje Docker Machine. Chcete-li začít používat Docker Swarm, spusťte Docker a otevřete terminál v počítači. Proveďte následující dokovací stroj ls příkaz pro seznam všech virtuálních počítačů na místním počítači:

 $ docker-machine ls NÁZEV AKTIVNÍ STAV ŘIDIČE URL SWARM výchozí * virtuální schránka Běží tcp: //192.168.99.100: 2376 

Pokud jste Docker spustili pouze z místního počítače, měli byste mít výchozí virtuální počítač Dockeru spuštěný s IP adresou 192.168.99.100. Chcete-li šetřit prostředky na místním počítači, můžete tento virtuální počítač zastavit spuštěním: výchozí nastavení docker-machine.

Vytvořte roj

Roj Dockeru se skládá ze dvou nebo virtuálních strojů, na nichž běží instance Dockeru. Pro toto demo vytvoříme tři nové virtuální stroje: manager, agent1 a agent2. Vytvořte si virtuální stroje pomocí docker-machine create příkaz:

$ Docker-Machine Create -D Virtualbox Manager $ Docker-Machine Create -D Virtualbox Agent1 $ Docker-Machine Create -d Virtualbox Agent2 

The docker-machine create příkaz vytvoří nový "stroj". Předávání -d Argument umožňuje určit ovladač, který se použije k vytvoření stroje. Běží lokálně, to by mělo být virtuální schránka. První vytvořený stroj je manažer, který bude hostovat proces správce. Poslední dva stroje, agent1 a agent2, jsou stroje agentů, které budou hostovat procesy agenta.

V tomto okamžiku jste vytvořili virtuální stroje, ale nevytvořili jste skutečného správce nebo agenty Swarm. Chcete-li zobrazit virtuální stroje a jejich stav, proveďte dokovací stroj ls příkaz:

 $ docker-machine ls NÁZEV AKTIVNÍ ŘIDIČ STAV URL SWARM DOCKER CHYBY agent1 - virtualbox běží tcp: //192.168.99.101: 2376 v1.11.1 agent2 - virtualbox běží tcp: //192.168.99.102: 2376 v1.11.1 výchozí - virtualbox zastaven neznámý manager * virtualbox Spuštěn tcp: //192.168.99.100: 2376 v1.11.1