Nasadenie webovej aplikácie pomocou Docker Compose

Ak chcem nasadiť Wordpress webovú stránku do produkcie, potrebujem:

  • Mysql alebo Postgresql databázu.
  • Apache Web server s mod_php a ďalšie potrebné PHP knižnice, napr. GD.
  • Adresár, kde dám PHP súbory.
  • Adresár, kde sa budú ukladať obrázky a súbory od používateľov.
  • HTTPS Certifikát, napr. Let's Encrypt.
  • Doménové meno.
  • Skript pre zálohovanie a obnovu certifikátu.

Software/Platform as a Service

Väčšinou sa finančne oplatí hotový WordPress hosting (Software as a Service). Niekedy ale SaS služba nie je dostupná.

Niekedy potrebujem:

  • Vlastné zdrojové kódy.
  • Vlastný kontajner so špecifickou verziou.
  • Splniť veľké bezpečnostné nároky.
  • Veľké škálovanie.

Typická webová aplikácia sa skladá z viacerých komponentov. Každý komponent má iné nároky.

Napr.

  1. SQL Databáza, dostupná iba z vnútornej siete pre potreby aplikácie
  2. Backend: Implementuje REST rozhranie a logiku aplikácie.
  3. Frontend: JS Single Page application, komunikuje cez REST rozhranie s BACKENDOM.
+----------+
| Frontend |
+----------+
      |
+----------+   +----------+
|  Backend |---| Storage  |
+----------+   +----------+
      |
+----------+
| Database |
+----------+

Docker Compose

Nástroj pre konfiguráciu viac-kontajnerových aplikácií.

Jeden proces - jeden kontajner

  • ľahšia konfigurácia,
  • lepšie škálovanie,
  • väčšia bezpečnosť.

Docker Compose

Konfigurácia viacerých Docker objektov naraz:

  • služby,
  • kontajnery,
  • siete,
  • pomenované zväzky,
  • konfigurácie.

Kedy použijem Compose

  • pri vývoji,
  • keď aplikácia potrebuje iba jeden výpočtový uzol,
  • pri autmatických testoch kontajnerov pre CI CD.

Nevýhody Compose

  • Ťažšie škálovanie - väčšinou beží iba na jednom uzle.
  • Mapovanie súborového systému je obmedzené.
  • Automatické prideľovanie prostriedkov nie je možné.

compose.yaml

  • iný zápis argumentov docker
  • jedna konfigurácia pre celú webovú aplikáciu
  • používa formát YAML

Príklad compose.yaml

Compose & Wordpress:

  • PhP

  • Databáza

  • https://docs.docker.com/samples/wordpress/

  • https://hub.docker.com/_/wordpress

    Docker Service

  • Jedno DNS meno

  • jeden alebo viac kontajnerov

Docker Named Volume

Zložka so stavom kontajnera

Docker Network

  • Skupina kontajnerov, ktoré navzájom komunikujú
  • Kontajnery mendzi sebou nemôžu komunikovať pomocou lokálnych portov.
  • Compose automaticky vytvorí defaultnú virtuálnu sieť pre všetky služby.

Reálna konfigurácia je zložitá

Wordpress s HTTPS:

  • Certbot
  • Web Server (na HTTPS certifikáty)

https://zactyh.medium.com/hosting-wordpress-in-docker-with-ssl-2020-fa9391881f3

Zložitá konfigurácia

  • Zverejnenie: Služby pomocou lokálneho portu
  • Škálovanie: jedna služba sa môže skladať z viacerých procesov
  • Obmedzenie zdrojov: kontajneru vieme obmedziť RAM alebo CPU

Compose and Docker @ Cloud

Ale inak sa na viackontajnerové aplikácie používa Kubernetes

Compose @ Cloud

Docker Context - nastavenie s ktorým vzdialeným Docker strojom komunikujeme

  • Potrebujeme verejne prístupný register obrazov
  • Zmeníme Docker context
  • Môžeme vykonávať docker príkazy bežným spôsobom a vykonajú sa na prenajatej infraštruktúre.

Existujú lepšie nástroje ako Compose....

Docker @ cluster

  • Swarm Mode Docker
  • Jednoduchý orchestrátor pre súkromný klaud.

Swarm mode Docker

  • Jeden alebo viac výpočtových uzlov
  • Sú spojené sieťou
  • Manager Node
  • Worker Node

Swarm mode Docker

        Internet

   +----------------+  +---------+  +---------+
   | Leader Manager |  | Manager |  | Manager |
   +----------------+  +---------+  +---------+

   +--------+  +--------+  +--------+
   | Worker |  | Worker |  | Worker |
   +--------+  +--------+  +--------+

   +-----+     +-----+
   | NAS |     | SAN |
   +-----+     +-----+

Swarm mode Docker

  • Odolnosť služby voči výpadku výpočtového uzla.
  • Škálovanie - pridávanie uzlov podľa potreby.
  • Upgrade alebo update výpočtových uzlov bez prerušenia služby.

Manager Node

  • Udržiava stav klastra
  • Prideľuje prostriedky
  • Udržiava informácie o službách a prideľuje DNS mená.
  • RAFT algoritmus pre zvolenie "vedúceho" uzla.

Worker Node

  • Spúšťa a zastavuje kontajnery

Swarm mode nevýhody

  • Docker API je obmedzené.
  • Virtuálne siete sú málo flexibilné - zverejnenie nie je možné pomocou Docker API.
  • Tažší management viacerých služieb naraz (multi-tenant).
  • Tažší monitoring bežiacich služieb - je potrebné externé riešenie.
  • Nie sú podporované prístupové práva a menné priestory v rámci klastra.
  • Ťažšie zverejnenie služby.

Docker @ cluster

Kubernetes lieči problémy Swarm Mode Docker

Kubernetes je Docker na steroidoch

TO BE CONTINUED...

Reload?