Docker

1st Apr 2026

Kapitola 1: Virtualizácia a kontajnery

Virtualizácia predstavuje technológiu, ktorá umožňuje oddeliť softvér od fyzického hardvéru. Ide o vrstvu medzi hardvérom a aplikáciou, ktorá zabezpečuje, že aplikácie môžu bežať nezávisle od konkrétneho prostredia.

Motivácia virtualizácie

Moderné aplikácie musia byť:

  • prenositeľné,
  • škálovateľné,
  • reprodukovateľné.

Bez virtualizácie by vývojári museli riešiť rozdiely medzi operačnými systémami, knižnicami či hardvérom. Virtualizácia tieto problémy abstrahuje a umožňuje jednotné prostredie pre vývoj aj produkciu.

Typy virtualizácie

Rozlišujeme niekoľko základných typov:

1. Hardvérová virtualizácia (VM)

  • Každý virtuálny stroj má vlastný operačný systém
  • Silná izolácia
  • Vyššia spotreba zdrojov

2. Paravirtualizácia

  • Priame využitie hardvéru
  • Vyšší výkon
  • Menšia flexibilita

3. Virtualizácia na úrovni OS

  • Zdieľaný kernel hostiteľského systému
  • Izolované procesy (kontajnery)

Virtuálne stroje vs kontajnery

Virtuálne stroje:

  • obsahujú celý OS,
  • sú náročné na zdroje,
  • majú pomalší štart.

Kontajnery:

  • zdieľajú kernel hostiteľského OS,
  • sú ľahké a rýchle,
  • obsahujú iba aplikáciu a jej závislosti.

Docker ako nástroj kontajnerizácie

Docker je platforma, ktorá umožňuje:

  • vytvárať kontajnery,
  • distribuovať aplikácie,
  • spúšťať ich v izolovanom prostredí.

Architektúra Dockeru pozostáva z:

  • Docker klienta – CLI nástroj,
  • Docker démona – riadi kontajnery,
  • registry – úložisko obrazov (napr. Docker Hub).

📘 Kapitola 2: Kontajnerizácia aplikácií

Kontajner predstavuje izolovaný proces (alebo skupinu procesov), ktorý má vlastný pohľad na systém – súbory, sieť aj procesy. Izolácia je realizovaná pomocou namespaces a cgroups.

Obraz kontajnera (image)

Obraz kontajnera je:

  • nemenný (read-only),
  • skladá sa z vrstiev,
  • obsahuje aplikáciu, závislosti a konfiguráciu.

Pri spustení kontajnera sa pridá zapisovateľná vrstva.

Vrstvy kontajnera

Každý príkaz v Dockerfile vytvára novú vrstvu:

  • vrstvy sú zdieľateľné,
  • sú nemenné,
  • optimalizujú veľkosť a rýchlosť buildovania.

Dockerfile

Dockerfile definuje proces vytvorenia obrazu.

Príklad:

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y nginx
CMD ["nginx", "-g", "daemon off;"]

Základné inštrukcie:

  • FROM – základný image
  • RUN – inštalácia balíkov
  • CMD – príkaz pri spustení

Spustenie kontajnera

Základné príkazy:

docker run nginx
docker ps
docker logs
docker stop

Sieť v Dockeri

Kontajner má vlastnú virtuálnu sieť.

Typy sietí:

  • bridge,
  • host,
  • overlay,
  • none.

Mapovanie portov:

docker run -p 8080:80 nginx

Ukladanie dát

Kontajnery sú bezstavové → dáta sa ukladajú mimo nich:

  • bind mount – mapovanie adresára z hosta,
  • volume – spravované Dockerom.

Po odstránení kontajnera sa jeho interné dáta stratia, preto je oddelenie dát kľúčové.

Bezpečnosť

Pri práci s kontajnermi:

  • používaj dôveryhodné obrazy,
  • nepoužívaj latest,
  • spúšťaj kontajnery ako non-root,
  • pravidelne aktualizuj závislosti.

📘 Kapitola 3: Docker Hub a Docker Compose

Docker Hub

Docker Hub je cloudový register obrazov, ktorý slúži na:

  • vyhľadávanie,
  • zdieľanie,
  • distribúciu kontajnerov.

Pri výbere obrazu sleduj:

  • či je oficiálny,
  • počet stiahnutí,
  • dátum aktualizácie.

Štruktúra názvu obrazu

Príklad:

docker.io/library/python:3.12-slim

Obsahuje:

  • registry,
  • namespace,
  • názov obrazu,
  • tag (verzia).

Docker Compose

Docker Compose slúži na definovanie a spúšťanie viackontajnerových aplikácií.

Výhody:

  • všetko v jednom YAML súbore,
  • jednoduché spúšťanie,
  • reprodukovateľné prostredie.

Štruktúra compose súboru

services:
  web:
    image: nginx
    ports:
      - "8080:80"

Základné časti:

  • services – kontajnery,
  • volumes – dáta,
  • networks – komunikácia.

Mikroslužby

Moderné aplikácie sú rozdelené na:

  • frontend,
  • backend,
  • databázu.

Každá služba beží v samostatnom kontajneri.

Spustenie aplikácie

docker compose up -d
docker compose down

Docker Compose vs Swarm

  • Compose – jeden uzol, vývoj
  • Swarm – viac uzlov, produkcia, škálovanie

Swarm umožňuje:

  • vysokú dostupnosť,
  • load balancing,
  • automatické rozmiestnenie kontajnerov.

Doplnil som ti 4. kapitolu v rovnakom štýle ako predchádzajúce skriptá 👇


📘 Kapitola 4: Ansible a Terraform (Infrastructure as Code)

Moderný prístup k správe infraštruktúry je založený na princípe Infrastructure as Code (IaC), ktorý umožňuje definovať infraštruktúru pomocou kódu namiesto manuálnych zásahov.

Infrastructure as Code (IaC)

IaC znamená:

  • infraštruktúra je definovaná ako kód,
  • konfigurácie sú verzované,
  • nasadenie je automatizované a reprodukovateľné.

Výhody:

  • konzistentnosť prostredí,
  • automatizácia,
  • jednoduchšia správa a škálovanie.

Ansible

Ansible je nástroj na automatizáciu správy systémov a konfigurácie.

Charakteristika:

  • open-source nástroj,
  • agentless (nevyžaduje inštaláciu agenta na cieľových strojoch),
  • push-based (riadiaci uzol posiela príkazy).

Architektúra:

  • Control node – riadiaci server,
  • Managed nodes – spravované servery,
  • Inventory – zoznam hostov.

Konfiguračný model (YAML)

Ansible používa YAML na definovanie konfigurácie.

Základné prvky:

  • Playbooky – hlavné skripty,
  • Tasks – jednotlivé kroky,
  • Modules – vykonávajú operácie (napr. apt, service),
  • Roles – organizácia kódu,
  • Variables – premenné,
  • Handlers – reakcie na zmeny,
  • Templates (Jinja2) – dynamické konfigurácie.

Playbook

Playbook je súbor, ktorý definuje požadovaný stav systému.

Príklad:

- hosts: web
  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present

Playbooky podporujú:

  • podmienky,
  • cykly,
  • tagy,
  • importy,
  • error handling.

Moduly a pluginy

Ansible obsahuje množstvo modulov:

  • správa balíkov (apt, yum),
  • správa služieb,
  • práca so súbormi,
  • cloudové operácie.

Pluginy umožňujú rozšírenie funkcionality (napr. lookup, callback).


Terraform

Terraform je nástroj od spoločnosti HashiCorp na správu infraštruktúry.

Používa deklaratívny prístup:

  • definujeme čo chceme dosiahnuť,
  • Terraform zabezpečí vykonanie zmien.

Základný workflow:

  1. init – inicializácia projektu
  2. plan – náhľad zmien
  3. apply – aplikovanie zmien
  4. destroy – odstránenie infraštruktúry

Architektúra Terraformu

Základné komponenty:

  • Terraform CLI – nástroj na spúšťanie príkazov,
  • Provider plugins – komunikácia s cloudom (AWS, Azure…),
  • HCL – konfiguračný jazyk.

Konfiguračný jazyk (HCL)

Terraform používa jazyk HCL (HashiCorp Configuration Language).

Základné prvky:

  • resource – definícia zdroja,
  • variables – vstupy,
  • outputs – výstupy,
  • expressions – logika,
  • cykly (for_each, count),
  • podmienky.

Príklad:

resource "aws_instance" "web" {
  ami           = "ami-123456"
  instance_type = "t2.micro"
}

Stav (State management)

Terraform si ukladá stav infraštruktúry do súboru:

terraform.tfstate

Význam:

  • sleduje aktuálny stav infraštruktúry,
  • umožňuje porovnanie s konfiguráciou,
  • zabraňuje nekonzistentnosti.

Typy:

  • lokálny stav,
  • vzdialený stav (S3, Azure, GCS).

Dôležité pojmy:

  • state locking,
  • state drift,
  • import existujúcej infraštruktúry.

Ansible vs Terraform

Ansible Terraform
Konfigurácia systémov Provisioning infraštruktúry
Imperatívny prístup Deklaratívny prístup
Agentless Vyžaduje provider
YAML HCL

Zhrnutie

  • IaC umožňuje spravovať infraštruktúru ako kód
  • Ansible slúži na konfiguráciu a správu systémov
  • Terraform slúži na vytváranie a riadenie infraštruktúry
  • Spolu tvoria základ moderného DevOps

Next Post

Docker