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ý imageRUN– inštalácia balíkovCMD– 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:
- init – inicializácia projektu
- plan – náhľad zmien
- apply – aplikovanie zmien
- 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