Docker Hub a Docker Compose

Docker Hub

verejný (alebo súkromný) cloudový register Docker obrazov.

Slúži na vyhľadávanie a zdieľanie hotových obrazov

Adresa: https://hub.docker.com

Ako si správne vybrať obraz?

Pri výbere obrazu sleduj:

  • Official Image
  • Počet stiahnutí
  • dátum posledného update

Ako čítať dokumentáciu na Docker Hub?

Každý obraz má:

  1. Preľad: dokumentáciu obrazu o obsahu a o používaní
  2. Tagy
  3. Dockerfile
  4. Iné zdroje

Obraz kontajnera Python

Na Docker Hub nájdeme obraz s Python:

docker.io/library/python:3.12-slim

Rozpis:

Časť Význam
docker.io registry (Docker Hub)
library namespace (oficiálne obrazy)
python názov obrazu
3.12-slim tag (verzia + variant)

Ako sa orientovať v tagoch?

Na stránke python obrazu nájdeme napr.:

  • 3.12
  • 3.12-slim
  • 3.12-alpine
  • 3.12-bookworm
  • latest

🔎 Význam tagov:

Tag Význam
3.12 plná verzia
slim menšia verzia (menej balíkov)
alpine veľmi malý image (Alpine Linux)
bookworm Debian verzia
latest posledná stabilná verzia

Ako si prečítať Dockerfile?

Na GitHub stránke obrazu nájdeme Dockerfile.

Typický Dockerfile:

FROM debian:bookworm-slim

ENV PYTHON_VERSION 3.12.2

RUN apt-get update && apt-get install -y \
    build-essential \
    libssl-dev

CMD ["python3"]

Čo sledujeme:

  • FROM → základný image
  • RUN → čo sa inštaluje
  • ENV → premenné prostredia
  • CMD → default príkaz

Tak zistíme:

  • z akého OS vychádza
  • aké balíky obsahuje
  • či je bezpečný

Docker Compose

Nástroj na konfiguráciu viackontajnerových aplikácií.

Mikroslužby

Webové aplikácie sa zvyčajne skladajú z viacerých služieb:

  • Aplikácia je rozdelená na komponenty, ktoré medzi sebou komunikujú.
  • Lepšie škálovanie
  • Jednoduchší vývoj

Komponenty webovej aplikácie

    HTML
     |
+----------+
| Frontend |
+----------+
      | REST
+----------+  NFS  +----------+
|  Backend |-------| Storage  |
+----------+       +----------+
      | postgres
+----------+
| Database |
+----------+

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.

Čo je Docker Compose?

Docker Compose umožňuje:

  • Definovať celú aplikáciu v jednom YAML súbore
  • Spustiť všetko jedným príkazom
  • Jednoducho spravovať siete, volumes a konfiguráciu
  • Reprodukovateľné prostredie (dev/test/prod)

Konfigurácia virtuálneho prostredia

Používa súbor YAML:

docker-compose.yml

docker-compose.yaml

services:
  service_name:
    image: image_name
    ports:
      - "host_port:container_port"
    volumes:
      - volume_name:/path/in/container
    environment:
      VARIABLE: value
    depends_on:
      - other_service

volumes:
  volume_name:

Jednoduché spustenie virtuálneho prostredia

Aplikáciu spustíme:

docker compose up -d

Zastavíme:

docker compose down

Štruktúra compose.yaml

  • services: kontajnery, image, ports, environment
  • networks: konektivita medzi službami
  • volumes: perzistentné dáta
  • secrets/configs: konfigurácia bez pečenia do image

Docker Service

  • Jedno DNS meno
  • Jeden alebo viac kontajnerov

Konfigurácia služby

  • image – Docker image
  • ports – mapovanie portov
  • environment – premenné prostredia
  • volumes – persistentné úložisko
  • networks – siete
  • cmd: ako spustiť

Docker Named Volume

  • Pomenované zväzky určené na mapovanie, spravované Dockerom

Kde sa fyzicky nachádza?

Na Linuxe typicky:

/var/lib/docker/volumes/

Docker Network

Vlastné siete medzi kontajnermi.

projectname_default

V nej:

  • Každý kontajner má internú IP
  • Každý service má DNS záznam

Príklad: Nasadenie WordPress pomocou Docker Compose

WordPress potrebuje:

  • PHP + Apache (wordpress image)
  • MySQL databázu

Nasadenie pomocou docker run

docker network create wordpress_net
docker volume create db_data
docker volume create wordpress_data
docker run -d \
  --name wordpress_db \
  --restart always \
  --network wordpress_net \
  -v db_data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=example \
  -e MYSQL_DATABASE=wordpress \
  -e MYSQL_USER=wpuser \
  -e MYSQL_PASSWORD=wppassword \
  mysql:8.0
docker run -d \
  --name wordpress_app \
  --restart always \
  --network wordpress_net \
  -p 8080:80 \
  -v wordpress_data:/var/www/html \
  -e WORDPRESS_DB_HOST=wordpress_db:3306 \
  -e WORDPRESS_DB_USER=wpuser \
  -e WORDPRESS_DB_PASSWORD=wppassword \
  -e WORDPRESS_DB_NAME=wordpress \
  wordpress:latest

Nasadenie Wordpress pomocou Compose

docker-compose.yml pre Wordpress

services:
  db:
    image: mysql:8.0
    container_name: wordpress_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: wppassword
    volumes:
      - db_data:/var/lib/mysql
  wordpress:
    image: wordpress:latest
    container_name: wordpress_app
    restart: always
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: wppassword
      WORDPRESS_DB_NAME: wordpress
    depends_on:
      - db
    volumes:
      - wordpress_data:/var/www/html
volumes:
  db_data:
  wordpress_data:

Healthcheck

depends_on čaká len na štart kontajnera, nie na to, kedy je databáza pripravená.

Riešenie – healthcheck podmienka:

services:
  db:
    image: mysql:8.0
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  wordpress:
    depends_on:
      db:
        condition: service_healthy

WordPress sa spustí až keď MySQL úspešne odpovie na ping.

Swarm Mode Docker

natívny nástroj Dockeru na orchestráciu kontajnerov v clustri viacerých serverov.

Umožňuje:

  • správu viacerých uzlov ako jedného celku
  • vysokú dostupnosť (High Availability)
  • horizontálne škálovanie služieb
  • rolling updates bez výpadku
  • automatické rozmiestňovanie kontajnerov

Docker Compose

  • Definovanie a spúšťanie multi-container aplikácií
  • Typicky lokálne vývojové prostredie
  • Jeden uzol (jeden Docker Engine)

Docker Swarm

  • Orchestrácia kontajnerov v clustri viacerých uzlov
  • Produkčné prostredie
  • Vysoká dostupnosť a škálovanie

Docker Swarm mode

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

Docker Swarm mode

        Internet

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

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

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

Docker Swarm mode

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