Docker
Docker je platforma na kontajnerizáciu — zabalenie aplikácie spolu s jej závislosťami, konfiguráciou a runtime prostredím do prenositeľného kontajnera, ktorý beží identicky na laptope vývojára, CI serveri aj v produkcii.
Ako to funguje
Klasický problém softvérového vývoja znie: "U mňa to funguje." Vývojár napíše kód na MacOS s Node.js 20, server beží na Ubuntu s Node.js 18, a v drobných rozdieloch medzi prostredím sa skrývajú chyby, ktoré sa ťažko replikujú a ešte ťažšie ladí. Docker tento problém odstraňuje tým, že definícia prostredia ide spolu s kódom.
Základom je Dockerfile — textový súbor, ktorý presne opisuje, ako sa prostredie zostaví. Začína sa base image (napríklad node:20-alpine), postupne sa doň inštalujú závislosti, kopíruje kód a definuje spúšťací príkaz. Z Dockerfile sa zostaví image — nemenná snímka prostredia. Z image sa spúšťajú kontajnery — bežiace inštancie toho prostredia. Tento trojkrok (Dockerfile → image → kontajner) je základom celého Docker ekosystému.
Docker Compose riadi viacero kontajnerov naraz. Typická aplikácia má aspoň tri: samotná aplikácia (Node.js / Fastify), databáza (PostgreSQL) a cache (Redis). Compose súbor v YAML definuje, ako tieto kontajnery medzi sebou komunikujú, aké premenné dostávajú, kde ukladajú dáta a v akom poradí sa štartujú. Na lokálnom vývoji nahradí inštaláciu PostgreSQL a Redis priamo do operačného systému — stačí jeden príkaz a celé prostredie beží.
V produkcii Docker rieši izoláciu a nasadenie. Na jednom serveri môžete prevádzkovať desiatky kontajnerov, pričom každý beží v izolovanom prostredí bez toho, aby ovplyvňoval ostatné. Nasadenie novej verzie je výmena image — kontajner sa zastaví, spustí sa nový s aktualizovanou verziou. Pri problémoch sa rollback rovnako jednoducho: spustíte predchádzajúci image. Pre väčšie projekty orchestráciu preberá Kubernetes, ale pre väčšinu produkčných nasadení stačí Docker Compose.
Z našej praxe
V Strange Loops je Docker štandardnou súčasťou každého backendového projektu. Fastify API pre QualiTravel, Ovulogy aj rehabit beží v Docker kontajneroch na DigitalOcean dropletoch — spolu s PostgreSQL a Redis kontajnermi spravovanými cez Docker Compose. Vývojári klonujú repozitár, spustia docker compose up a za minútu majú kompletné lokálne prostredie vrátane databázy. CI/CD pipeline v GitHub Actions zostaví nový Docker image, odošle ho do GitHub Container Registry a nasadí na server cez SSH. Tento prístup eliminoval celú kategóriu problémov s prostredím — keď test prebehne v CI, prebehne aj v produkcii.
Kedy to potrebujete
- Chcete, aby všetci vývojári v tíme mali identické lokálne prostredie bez manuálnej inštalácie závislostí
- Prevádzkujete viacero projektov na jednom serveri a potrebujete ich izolovať, aby sa navzájom neovplyvňovali
- Nasadzujete novú verziu aplikácie a chcete mať istotu, že rollback na predchádzajúcu verziu je otázkou sekúnd
- Zavádzate CI/CD pipeline a potrebujete reprodukovateľné build prostredie nezávislé od operačného systému servera
Najčastejšie otázky
Aký je rozdiel medzi Docker image a Docker kontajnerom?
Image je statická šablóna — nemenná snímka prostredia vrátane kódu, závislostí a konfigurácie. Kontajner je bežiaca inštancia image — živý proces, ktorý má vlastnú pamäť, sieťové rozhranie a súborový systém. Z jedného image môžete spustiť ľubovoľný počet kontajnerov. Analogia: image je recept, kontajner je uvareré jedlo.
Čo je Docker Compose a kedy ho potrebujem?
Docker Compose je nástroj na definovanie a spúšťanie viacerých Docker kontajnerov naraz. Namiesto manuálneho spúšťania každého kontajnera zvlášť opíšete celú aplikáciu v jednom docker-compose.yml súbore a spustíte ju jediným príkazom. Potrebujete ho vždy, keď vaša aplikácia pozostáva z viacerých služieb — čo je prakticky každá reálna aplikácia s databázou.
Je Docker to isté ako virtuálny stroj?
Nie. Virtuálny stroj emuluje celý hardvér a beží vlastný operačný systém — je ťažký (gigabajty, minúty štartu). Docker kontajner zdieľa jadro hostiteľského OS, izoluje len procesy a súborový systém — je ľahký (megabajty, sekundy štartu). Pre väčšinu aplikácií je Docker dostatočná a oveľa efektívnejšia alternatíva.
Súvisiace pojmy
CI/CD
CI/CD (Continuous Integration / Continuous Delivery) je prax automatického overovania a nasadzovania kódu po každej zmene — CI zabezpečí, že nový kód nerozbíja existujúcu funkcionalitu, CD ho automaticky dostane do produkcie bez manuálneho zásahu.
Linux
Linux je open-source operačný systém — presnejšie jadro (kernel) — vytvorený Linusom Torvaldom v roku 1991, ktorý dnes pohára väčšinu serverov, cloudových platforiem, superpočítačov a zariadení Internetu vecí na svete.
Potrebujete s tým pomôcť?
Ak riešite niečo z toho, čo tu opisujeme, ozvite sa. Povieme vám, či a ako vieme pomôcť.