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

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.

Príklad: Nasadenie webovej aplikácie pomocou Swarm Mode Docker

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 |
+----------+

Mikroslužby

Aplikácia je rozdelená na komponenty komunikujúce medzi sebou

Lepšie škálovanie

Jednoduchší vývoj

Architektúra webovej aplikácie

Oddelený frontend a backend

Frontend

Interakcia s používateľom

  • reverzný proxy server (ingress)
  • Web Klient
  • Appka na mobile

Serializačné a komunikačné protokoly:

  • REST
  • Websockets

Backend

Logika a stav aplikácie

  • relačná databáza
  • cache server, workqueue (redis, memcached)
  • object storage

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.

Konfigurácia aplikácie

Tá istá aplikácia bude bežať v rôznych prostrediach

  • lokálny vývoj
  • nasadenie mimo kontajnera
  • nasadenie pomocou kontajtera a Docker Compose
  • nasadenie do Kubernetes
  • nasadenie do inej klaudovej služby (Azure App)

Nie je dobré mať konfiguračné údaje v zdrojových kódoch

  • mená a prístupové heslá ku databáze v zdrojových kódoch sú bezpečnostné riziko.
  • pre zmenu konfigurácie je nutné znovu zostaviť aplikáciu
  • je to neprehľadné - nie je jasné na prvý pohľad ako aplikáciu nakonfigurovať.

Oddelenie konfiguračných premenných od kódu aplikácie

Konfigurácia aplikácie:

  • premenné prostredia
  • konfiguračné súbory
  • argumenty príkazového riadka

Ako implementovať konfiguráciu do Vašej aplikácie:

  • globálne premenné, tie umiestnite do jedného súboru.
  • definujte si premenné prostriedia, tie načítajte do globélnych premenných.
  • načítajte argumenty príkazového riadka.
  • použite špecializovanú knižnicu na konfiguráciu aplikácie.

Oddelíme:

  • konfigurácia (kde sa naše nachádzajú konfiguračné súbory ktoré sa nemenia)
  • stav (kde sa nachádzajú súbory ktoré sa menia a sú podstatné)
  • aplikácia (všetko ostatné)

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
Reload?