Čo je Docker a ako fungujú kontajnery?

Docker je riešením v situáciách, keď aplikácia funguje perfektne na tvojom počítači, ale po nasadení na server zlyhá. Pre testerov to znamená koniec „u mňa to fungovalo“ debát s vývojármi a stabilné, reprodukovateľné testovacie prostredia. Pre vývojárov rýchlejší deployment bez prekvapení v produkcii. Docker ako open-source platforma tieto rozdiely eliminuje zabalením aplikácie do prenosného kontajnera. Pozrime sa na to, ako funguje a ako s ním začať.

Ilustrácia Docker kontajnerov pre aplikáciu, testy, Selenium, CI/CD a databázu.
Docker pre testerov v automatizovanom testovaní

V článku sa dozvieš:

    Docker kontajnery prinášajú konzistentné prostredie naprieč vývojom, testovaním aj produkciou. Výsledkom je menej chýb spôsobených rozdielmi medzi prostrediami, rýchlejšie nasadzovanie a jednoduchšia spolupráca v tíme. Docker si našiel miesto nielen u vývojárov, ale aj u testerov a DevOps tímov, kde výrazne zjednodušuje automatizované testovanie, CI/CD procesy a správu infraštruktúry.

    Recommend

    Odporúčame ti…

    Pre širší kontext kontajnerizácie vrátane Kubernetes orchestrácie si prečítaj článok Container technology: Ako funguje kontajnerizácia a kde ju využiješ?

    Čo je Docker a na čo slúži v praxi?

    Docker je open-source platforma na kontajnerizáciu (containerization), ktorá umožňuje vytvárať, nasadzovať a spúšťať aplikácie v izolovaných prostrediach nazývaných kontajnery (containers). Vznikol v roku 2013 a za krátky čas sa stal štandardom v oblasti vývoja a nasadzovania (deployment) softvéru.

    Najjednoduchšia analógia: Predstav si prepravný kontajner v prístave. Nezáleží na tom, čo je vo vnútri, kontajner má štandardnú veľkosť a zapadne na akúkoľvek loď, vlak alebo kamión. Docker funguje rovnako: zabalí tvoju aplikáciu do štandardizovaného kontajnera, ktorý beží rovnako na tvojom notebooku, testovacom serveri aj v produkčnom cloude.

    Docker pomáha riešiť jeden z častých problémov v softvérovom vývoji: situácie, keď aplikácia funguje v jednom prostredí, no v inom sa správa odlišne. Vďaka kontajnerizácii má každý člen tímu identické prostredie, teda rovnaké verzie jazyka, knižníc aj operačného systému.

    Recommend

    Odporúčame ti…

    Ak si tester, Docker ti pomôže s rýchlym spúšťaním testovacích prostredí, izoláciou testov a paralelným testovaním. Konkrétne scenáre nájdeš v sekcii nižšie.

    Ako fungujú Docker kontajnery?

    Vzťah medzi Dockerfile, image a kontajnerom

    Docker container (kontajner) je ľahké, izolované prostredie, v ktorom beží tvoja aplikácia spolu so všetkým, čo potrebuje – kódom, knižnicami, konfiguráciou. Zvonku sa správa ako samostatný systém, ale vo vnútri zdieľa jadro operačného systému (kernel) s hostiteľským strojom. Práve toto zdieľanie je kľúč k tomu, prečo sú kontajnery tak rýchle a úsporné.

    Na rozdiel od virtuálnych strojov (virtual machines, VM) kontajner neštartuje vlastný OS ani nenačítava vlastný kernel. Namiesto toho beží priamo nad jadrom hostiteľa. Využíva jeho služby na izoláciu procesov, siete aj súborového systému, ale nebeží vo vnútri kernelu ako jeho súčasť. Výsledok? Kontajner sa spustí v priebehu sekúnd, zaberá len desiatky megabajtov a na jednom serveri ich môžeš bez problémov rozbehnúť desiatky naraz.

    Pod kapotou Docker využíva linuxové technológie ako namespaces (oddelenie procesov a sietí) a cgroups (kontrola spotreby pamäte a CPU). Práve vďaka týmto mechanizmom je izolácia silná, no zároveň lacná na výkon.

    A pretože kontajner nesie v sebe všetky závislosti, odpadá nekonečné ladenie prostredí. Vývojár, tester aj DevOps pracujú s identickým prostredím, rovnaké verzie jazyka, knižníc aj konfigurácie, na akomkoľvek stroji.

    Docker Engine: Ako Docker komunikuje s OS

    Architektúra je jednoduchá – tvoja aplikácia beží vo vnútri kontajnera, kontajner beží na Docker Engine a Docker Engine komunikuje priamo s jadrom operačného systému hostiteľa. Práve tento layered model robí Docker prenosný naprieč Windows, macOS aj Linuxom.

    Docker vs virtuálny stroj: Aký je rozdiel?

    Oba prístupy izolujú aplikácie, ale fungujú na úplne inom princípe. Docker kontajner zdieľa jadro hostiteľského OS a izoluje len procesy. Virtuálny stroj (VM) simuluje kompletný počítač vrátane vlastného operačného systému. Tento zásadný rozdiel ovplyvňuje všetko, od rýchlosti štartu až po to, koľko inštancií spustíš na jednom serveri.

    Vlastnosť Docker kontajner Virtuálny stroj (VM)
    Princíp Izolovaný proces nad zdieľaným jadrom OS Kompletný simulovaný počítač s vlastným OS
    Štart Sekundy (spúšťa len aplikáciu) Minúty (bootuje celý OS)
    Veľkosť Desiatky MB (len app + závislosti) Jednotky GB (celý guest OS + app)
    Výkon Takmer natívny (žiadna vrstva navyše) Overhead z hypervisora (~5–15 %)
    Izolácia Na úrovni procesu (namespaces, cgroups) Úplná hardvérová izolácia (vlastný kernel)
    Bezpečnosť Zdieľané jadro = menšia bezpečnostná hranica Vlastný kernel = silnejšia izolácia
    Portabilita Beží kdekoľvek, kde je Docker Engine Závisí od hypervisora (VMware, Hyper-V, KVM)
    Hustota Desiatky až stovky na jednom serveri Jednotky až desiatky na jednom serveri
    Správa zdrojov Zdieľa RAM a CPU dynamicky Fixne pridelená RAM a CPU pre každý VM
    Ideálne pre Mikroslužby, CI/CD, testovacie prostredia Rôzne OS, legacy aplikácie, vysoké bezpečnostné nároky

    Rozhodovanie medzi použitím Dockera a VM nie je čiernobiele. Docker je prvá voľba pre väčšinu moderných aplikácií, ako sú mikroslužby, automatizované testovanie či CI/CD pipeline. Virtuálny stroj dáva zmysel tam, kde potrebuješ spúšťať rôzne operačné systémy (napríklad Linux a Windows na jednom serveri), úplnú hardvérovú izoláciu, alebo kde bežia legacy aplikácie, ktoré kontajnerizáciu nepodporujú. Mnohé tímy kombinujú oba prístupy, Docker kontajnery bežia vnútri VM, čím získaš výhody oboch.

    Vieš, že…

    …existuje alternatíva k Dockeru? Najčastejšou voľbou pri porovnaní Podman vs Docker býva práve Podman. Hlavný rozdiel je, že Podman nevyžaduje centrálnu službu bežiacu na pozadí a umožňuje spúšťať kontajnery bez admin oprávnení, čo zvyšuje bezpečnosť.

    Základné pojmy: Image, Container, Dockerfile

    Na prácu s Docker prostredím potrebuješ rozumieť trom základným konceptom. Ich vzájomný vzťah je jednoduchý: Dockerfile → Image → Container. Poďme si ich postupne predstaviť.

    Čo je Docker Image (obraz)?

    Docker image (obraz) je šablóna len na čítanie (read-only), podľa ktorej sa vytvárajú kontajnery. Obsahuje operačný systém, aplikáciu, závislosti a konfiguráciu. Jeden image môže vytvoriť neobmedzený počet kontajnerov.

    Predstav si ho ako ISO súbor operačného systému. Sám o sebe nič „nespúšťa”, no v momente, keď ho použiješ, získaš plne funkčné prostredie pripravené na beh aplikácie. Každý image sa skladá z vrstiev (layers), ktoré Docker dokáže zdieľať medzi rôznymi obrazmi a tým šetrí miesto na disku.

    Čo je Dockerfile?

    Dockerfile je textový súbor s inštrukciami, podľa ktorých Docker vytvorí image. Každý riadok je jeden krok, od výberu základného image až po kopírovanie súborov a spúšťanie príkazov. Vyzerá to takto:

    FROM node:18-alpine        # základný image – Node.js 18 na Alpine Linuxe
    WORKDIR /app               # pracovný adresár v kontajneri
    COPY package*.json ./      # skopíruje súbory so závislosťami
    RUN npm install            # nainštaluje závislosti
    COPY . .                   # skopíruje zvyšok aplikácie
    EXPOSE 3000                # port, na ktorom aplikácia počúva
    CMD ["node", "server.js"]  # príkaz pri štarte kontajnera
    

    Z tohto Dockerfile Docker vytvorí image, ktorý obsahuje Node.js runtime, tvoje závislosti aj aplikačný kód. Z image potom spustíš container jediným príkazom: docker run.

    Recommend

    Odporúčame ti…

    Kompletný zoznam inštrukcií nájdeš v oficiálnej dokumentácii Dockerfile

    Docker Container – bežiaca inštancia image

    Docker container je bežiaca inštancia image. Ak je image šablóna, kontajner je živá aplikácia vytvorená podľa tejto šablóny. Kontajnery sú izolované, majú vlastný súborový systém a sieť, ale zdieľajú jadro hostiteľského OS.

    Z jedného image môžeš spustiť desiatky kontajnerov súčasne, každý bude nezávislý. Práve toto je dôvod, prečo sa kontajnery tak rýchlo ujali pri škálovaní mikroslužieb a v automatizovaných testoch.

    17 min.Úloha a vplyv DevOps na testovanie

    Úloha a vplyv DevOps na testovanie

    V tomto článku sa pozrieme na to, čo je DevOps a akú úlohu a vplyv má na testovanie softvéru.

    Docker v praxi: Prečo ho používajú testeri a vývojári?

    Docker nie je len teoretický koncept, rieši reálne problémy, s ktorými sa stretávaš denne. V modernom QAOps prístupe sa testovanie neberie ako samostatná fáza, ale ako integrálna súčasť vývoja a nasadzovania. Práve tu Docker zohráva kľúčovú rolu, pretože umožňuje konzistentné prostredia naprieč vývojom, testovaním aj produkciou.

    Nižšie nájdeš najčastejšie scenáre použitia z pohľadu testera a vývojára.

    Docker pre automatizované testovanie

    Docker testovanie umožňuje spúšťať automatizované testy konzistentne naprieč prostrediami. Pre testerov je to často prvý dôvod, prečo sa s Dockerom začnú zoznamovať. Tu sú najčastejšie použitia:

    • Selenium Grid v Docker kontajneroch: Namiesto zložitej inštalácie prehliadačov na testovacom serveri spustíš Selenium Grid s prehliadačmi Chrome a Firefox jedným príkazom. Pomocou docker compose vieš jednoducho definovať celý testovací stack a paralelné testovanie pomocou Selenium je tak výrazne jednoduchšie.
    • Izolácia testovacích prostredí: Každý test beží v čistom kontajneri, bez ovplyvnenia inými testami. Žiadne zvyšky z predchádzajúcich behov.
    • Výkonnostné testovanie pomocou Gatling: Spúšťanie záťažových testov v kontajneroch umožňuje jednoduché škálovanie a reprodukovateľnosť výsledkov.
    • Bezpečnostné a penetračné testovanie: Kali Linux a ďalšie pentest distribúcie bežia v Docker kontajneri jedným príkazom. Žiadna inštalácia hostiteľa, žiadne zvyšky po teste.

    Tento prístup je základom moderného QAOps prístupu, kde testovanie nie je oddelené od vývoja, ale je integrované do celého životného cyklu softvéru.

    Recommend

    Odporúčame ti…

    Spustenie Selenium Grid s Dockerom trvá približne 30 sekúnd. Stačia tri príkazy:

    docker run -d -p 4444:4444 --name selenium-hub selenium/hub;
    docker run -d --link selenium-hub:hub selenium/node-chrome;
    docker run -d --link selenium-hub:hub selenium/node-firefox.

    Docker a CI/CD pipeline

    Schéma CI/CD pipeline s krokmi Git Push, CI/CD Server, Docker Build, Testy, Push Image a Deploy.
    Docker v CI/CD pipeline pri nasadzovaní

    Docker a CI/CD sú neoddeliteľné. V moderných CI/CD procesoch (kontinuálna integrácia a kontinuálne nasadzovanie) Docker zabezpečuje, že build, test a deploy fázy prebiehajú v identických prostrediach.

    CI/CD nástroje ako Jenkins využívajú Docker na spúšťanie build agentov v kontajneroch. To znamená, že každý build beží v čistom prostredí, bez konfliktu s inými projektami. Vďaka tomu sa výrazne znižuje riziko situácií, keď aplikácia funguje lokálne, no v inom prostredí sa správa odlišne.

    Typický workflow vyzerá takto: Vývojár pushne kód, CI/CD pipeline spustí Docker kontajner, v kontajneri sa spustí build a testy, a ak všetko prejde, nový Docker image sa nasadí do produkcie.

    16 min.Continuous testing v DevOps a agilnom vývoji a jeho výhody

    Continuous testing v DevOps a agilnom vývoji

    V tomto článku sa dozvieš, čo je continuous testing, aké má výhody, výzvy pri jeho nasadení, tipy a tooly, ktoré môžeš využiť pri testovaní.

    Docker Compose: správa viacerých kontajnerov

    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ášť definuješ všetko v jednom súbore docker-compose.yml.

    Kedy ho potrebuješ? Vždy, keď tvoja aplikácia pozostáva z viacerých služieb, napríklad webová aplikácia plus databáza plus cache. Alebo keď potrebuješ spustiť kompletné testovacie prostredie vrátane závislostí. Príklad konfigurácie web aplikácie s PostgreSQL databázou:

    # docker-compose.yml – príklad: web app + PostgreSQL databáza
    version: '3.8'
    services:
      web:
        build: .
        ports:
          - "3000:3000"
        depends_on:
          - db
      db:
        image: postgres:15
        environment:
          POSTGRES_PASSWORD: heslo123
          POSTGRES_DB: testdb
        ports:
          - "5432:5432"
    

    Celé prostredie spustíš jedným príkazom:

    docker-compose up A zastavíš ho rovnako jednoducho:
    docker-compose down
    Recommend

    Odporúčame ti…

    Docker Compose je ideálny na lokálne testovacie prostredia. Definuj si databázu, API server a Selenium Grid v jednom súbore a spusti všetko jedným príkazom. Keď testy skončia, celé prostredie jednoducho zruš.

    Ako začať s Docker? Prvé kroky

    Ako funguje Docker architektúra

    Začať s Docker prostredím je jednoduchšie, než si možno myslíš. Potrebuješ len nainštalovať Docker Desktop a spustiť prvý príkaz.

    Inštalácia Docker Desktop

    Docker Desktop je aplikácia, ktorá ti poskytuje kompletné Docker prostredie vrátane grafického rozhrania. Je dostupná pre Windows, macOS aj Linux a celý docker install proces zvládneš za pár minút. Postup inštalácie je nasledovný:

    1. Prejdi na oficiálnu stránku docker.com/products/docker-desktop a stiahni inštalátor pre tvoj operačný systém.
    2. Spusti inštalátor a postupuj podľa pokynov.
    3. Po inštalácii reštartuj počítač (Windows).
    4. Spusti Docker Desktop. V systémovej lište uvidíš ikonu Docker.
    5. Otvor terminál a over inštaláciu príkazom docker –version.

    Základné Docker príkazy

    Tu je prehľad najpoužívanejších Docker príkazov, ktoré budeš potrebovať v každodennej práci:

    Príkaz Popis
    docker run <image> Spustí nový kontajner z daného image
    docker build -t <name> . Vytvorí image z Dockerfile
    docker pull <image> Stiahne image z Docker Hub
    docker ps Zobrazí bežiace kontajnery
    docker ps -a Zobrazí všetky kontajnery (aj zastavené)
    docker stop <id> Zastaví bežiaci kontajner
    docker rm <id> Odstráni kontajner
    docker images Zobrazí lokálne uložené images
    docker-compose up Spustí všetky služby definované v docker-compose.yml
    docker-compose down Zastaví a odstráni kontajnery zo Compose

    Svoj prvý kontajner spustíš príkazom:

    docker run hello-world

    Docker stiahne oficiálny hello-world image z Docker Hub a spustí ho. Ak uvidíš správu „Hello from Docker!”, všetko funguje správne.

    Docker Hub: repozitár Docker images

    Docker Hub je verejný register (container registry), kde nájdeš tisíce pripravených Docker images. Je to niečo ako „obchod s aplikáciami” pre Docker, namiesto manuálneho vytvárania image si jednoducho stiahneš hotový.

    Na Docker Hub nájdeš oficiálne images pre prakticky všetko: databázy (PostgreSQL, MySQL, MongoDB), programovacie jazyky (Node.js, Python, Java), webové servery (Nginx, Apache), testovacie nástroje (Selenium, JMeter) a mnoho ďalšieho.

    Stiahnutie image je jednoduché:

    docker pull nginx              # najnovšia verzia
    docker pull node:18-alpine     # konkrétna verzia
    

    Vieš, že…

    …dôveryhodný image spoznáš aj podľa toho, že pochádza z oficiálneho zdroja? Na Docker Hub preto uprednostňuj oficiálne images označené modrou značkou. Neoficiálne images môžu byť zastarané, neudržiavané alebo obsahovať bezpečnostné zraniteľnosti.

    FAQ: Najčastejšie kladené otázky o Dockeri

    Čo je Docker a na čo slúži?

    Docker je nástroj, ktorý zabalí tvoju aplikáciu spolu so všetkým, čo potrebuje na beh, do jedného „balíka” nazývaného kontajner. Tento kontajner potom funguje rovnako na akomkoľvek počítači. Vďaka tomu má aplikácia vždy rovnaké prostredie, nech ju spustíš kdekoľvek.

    Je Docker zadarmo?

    Docker Engine (jadro) je open-source a úplne zadarmo. Docker Desktop je bezplatný pre osobné použitie, vzdelávanie a malé firmy (do 250 zamestnancov a menej ako 10 miliónov USD ročného obratu). Väčšie firmy potrebujú platený plán.

    Aký je rozdiel medzi Docker a Kubernetes?

    Docker vytvára a spúšťa kontajnery, Kubernetes (K8s) ich orchestruje, teda riadi a škáluje vo veľkom množstve naprieč servermi. Sú teda komplementárne, nie konkurenčné. Pre menšie nasadenia má Docker aj vlastné jednoduchšie riešenie Docker Swarm. Detailný pohľad na Kubernetes architektúru a praktické použitie nájdeš v článku Container technology: Ako funguje kontajnerizácia a kde ju využiješ?

    Potrebujem Docker ako tester?

    Áno, Docker ti umožňuje rýchlo vytvárať a rušiť testovacie prostredia, spúšťať testy v izolácii a integrovať sa do CI/CD pipeline. Ak pracuješ s automatizovaným testovaním (napríklad Selenium, Gatling) alebo sa riadiš QAOps prístupom, Docker je nevyhnutný nástroj.

    Dokáže Docker nahradiť virtuálny stroj?

    V mnohých prípadoch áno. Docker kontajnery sú rýchlejšie, ľahšie a efektívnejšie. Nemôžu však úplne nahradiť VM v situáciách, keď potrebuješ spúšťať rôzne operačné systémy alebo vyžaduješ úplnú hardvérovú izoláciu.

    Docker zjednodušuje testovanie aj nasadzovanie

    Docker reálne zjednodušuje vývoj, testovanie aj nasadzovanie softvéru. Pre junior testera prináša rovnakú hodnotu ako pre skúseného DevOps inžiniera. Teraz už vieš, čo je kontajner, ako sa líši od VM a kde ho využiješ v praxi.

    Najjednoduchšou cestou k zvládnutiu Dockera je vyskúšať ho v reálnom projekte. Nainštaluj si Docker Desktop, skontajnerizuj jednoduchú aplikáciu a prvé výsledky uvidíš okamžite. A ak hľadáš prácu, kde svoje znalosti zúročíš, pozri si naše aktuálne otvorené pracovné pozície v testingu v msg life Slovakia.

    O autorovi

    Katarína Kučáková

    Software Test Engineer

    Moja cesta k testovaniu softvéru sa začala v roku 2019 až po štúdiu ekonómie a pracovných skúsenostiach v iných odvetviach. To mi pomohlo vnímať IT svet v rôznych súvislostiach. Ten totiž ponúka neustále nové výzvy, pre ktoré rada hľadám riešenia. Obľubujem oddych pri čítaní, turistiku alebo lyžovanie. LinkedIn

    Daj nám o sebe vedieť