Docker

Kontejnerizace a virtualizace na úrovni OS

Co si dnes odneseme?

  1. Co je kontejner a image
  2. Jak aplikaci spustit
  3. Jak ji zabalit do Dockerfile
  4. Jak spustit více služeb přes Compose

Proč Docker vznikl?

Aplikace často funguje na jednom počítači, ale ne na jiném.

Důvodem bývají jiné verze knihoven, nastavení nebo operačního systému.

Docker v jedné větě

Docker zabalí aplikaci i její prostředí do malé, přenositelné krabičky.

Krabička se jmenuje kontejner.

Co je Docker a proč ho používat

Co to je Docker?

  • Virtualizace na úrovni OS: Nástroj pro běh aplikací v izolovaných prostředích.
  • Virtuální filesystem: Vytváří oddělený souborový systém pro guest OS.
  • Kontejner: Běžící izolovaná instance vytvořená z obrazu (image).

Analogie: krabička

Aplikace
+
Knihovny
+
Nastavení

Všechno cestuje společně. Hostitelský počítač zůstává čistší.

Co je kontejner?

Izolované prostředí pro jeden proces nebo službu.

Sdílí jádro hostitelského systému, proto startuje rychle.

Co Docker není

Kontejner není celý nový počítač.

Je to hlavně pohodlný způsob, jak spouštět procesy odděleně.

Architektura Dockeru

  • Docker Client (CLI): Terminál, do kterého píšeme příkazy jako docker run.

Docker Engine

Služba na pozadí, která vytváří a spravuje kontejnery.

Docker Registry

Katalog, odkud stahujeme hotové image, například Docker Hub.

Jaká jsou využití a výhody?

  • Izolace: Aplikace má své závislosti oddělené od hostitele.

Výhoda: stejné prostředí

Stejný image můžeme použít u vývojáře, při testu i v produkci.

Výhoda: rychlý start

Připravený kontejner spustíme jedním příkazem.

VM vs. Kontejner

Vlastnost Virtuální stroj (VM) Docker kontejner
Typ virtualizace Hardwareová (Hypervizor) Operačního systému (Jádro OS)
Velikost instalačního souboru (Debian) ~ 3.7 GB ~ 117 MB
Využití RAM na idle ~ 250 MB ~ 5 MB
Start-up čas Desítky sekund Sekundy až milisekundy

Koncepty, Sítě a Dockerfile

Docker Image vs. Kontejner

  • Docker Image: Statický neměnný snapshot (šablona) vytvořená z Dockerfile. Spustitelný kdekoliv (~200–1000 MB).
  • Docker Kontejner: Běžící instance obrazu (image). Je stateless (neukládá stav trvale bez Volumes).

Image = recept

Image je připravená šablona, ze které kontejner vznikne.

Příklady: nginx, ubuntu, python.

Kontejner = uvařený recept

Kontejner je spuštěná instance image.

IMAGE
šablona
→
KONTEJNER
běží

Jeden image, více kontejnerů

Stejnou šablonu můžeme spustit vícekrát.

nginx image
→
web-1
web-2

Persistence dat (Volumes)

  • Stateless nátura: Po smazání kontejneru se veškerá změněná data v něm ztratí.
  • Docker Volumes: Přenositelná datová úložiště spravovaná Dockerem.
  • Bind Mounts: Propojení složky v hostitelském systému do kontejneru (-v /host/path:/container/path).

Proč data mizí?

Kontejner je dočasný.

Když ho smažeme, změny uvnitř mohou zmizet také.

Volume = bezpečné místo pro data

Volume uloží data mimo život kontejneru.

  • databáze
  • nahrané soubory
  • logy

Bind mount = sdílená složka

docker run -v ./data:/app/data moje-aplikace

Levý konec je složka na počítači. Pravý konec je složka v kontejneru.

Mapování síťových portů

  • Izolovaný síťový zásobník: Kontejner má vlastní IP a uzavřené porty.
  • Port Forwarding (-p): Přesměrování portu z hostitele do kontejneru.
  • Příklad: -p 8080:80 zpřístupní web z kontejneru (port 80) na hostitelském portu 8080.

Port = dveře do služby

Aplikace uvnitř kontejneru poslouchá například na portu 80.

Bez otevřených dveří ji prohlížeč z hostitele neuvidí.

Jak číst -p 8080:80?

počítač
8080
→
kontejner
80

Port vlevo je na počítači, port vpravo uvnitř kontejneru.

Dockerfile - Základní instrukce

  • FROM: Určuje základní obraz (např. debian:latest).
  • WORKDIR: Nastavuje pracovní adresář pro následující příkazy.
  • COPY / ADD: Kopíruje soubory z hostitelského počítače do obrazu.

Dockerfile - Běh a příkazy

  • RUN: Spouští příkazy při vytváření image (např. apt install).
  • USER: Nastavuje neprivilegovaného uživatele (bezpečnostní best-practice).
  • CMD: Výchozí příkaz spuštěný při startu kontejneru.

Ukázka Dockerfile


FROM debian:latest

RUN apt update && apt install -y curl

RUN mkdir /app
WORKDIR /app

COPY ./script.sh .
RUN chmod +x script.sh

RUN useradd appuser
USER appuser

CMD ["/app/script.sh"]
            

Dockerfile: jedna instrukce

FROM nginx:alpine

FROM říká, z jakého image začínáme.

Dockerfile: soubory

WORKDIR /app
COPY . .

WORKDIR nastaví složku. COPY do ní zkopíruje projekt.

RUN vs. CMD

InstrukceKdy běží?Příklad
RUNpři builduinstalace balíčku
CMDpo startuspuštění serveru

Práce s CLI a Docker Compose

Instalace na Kali Linux

V Kali Linuxu je Docker v oficiálních repozitářích:


# 1. Instalace Dockeru a Docker Compose
sudo apt update
sudo apt install -y docker.io docker-compose

# 2. Povolení automatického spouštění služby po startu
sudo systemctl enable --now docker

# 3. Přidání uživatele do skupiny docker
sudo usermod -aG docker $USER
newgrp docker
            

Nejdřív ověříme instalaci

docker --version

Docker odpoví verzí. Když ne, není nainstalovaný nebo neběží služba.

Práce s imagi v CLI

  • Stáhnutí obrazu: docker pull ubuntu

Kolik imagů máme?

docker images

Příkaz vypíše image uložené lokálně.

Vlastní image

docker build -t moje-aplikace .

Image sestavíme z Dockerfile v aktuální složce.

První kontejner

docker run --rm hello-world

run vytvoří a spustí kontejner. --rm ho po skončení uklidí.

Spouštění kontejnerů

Interaktivní spustění kontejneru s terminálem:


docker run -it --rm ubuntu bash
            

Spuštění na pozadí (detached mode) s portem:


docker run -d -p 8080:80 --name muj-web nginx
            

Správa a kontrola kontejnerů

  • Výpis kontejnerů: docker ps ukáže běžící kontejnery.

Zastavení a smazání

docker stop <id>
docker rm <id>

Nejdřív kontejner zastavíme, potom odstraníme.

Co se pokazilo?

docker logs <id>

Logy jsou první místo, kam se podíváme při chybě.

Docker Compose

  • Nástroj pro vícekontejnerové aplikace: Umožňuje definovat a spouštět více propojených služeb najednou.
  • Deklarativní konfigurační soubor: Vše se zapisuje přehledně do docker-compose.yml.

Compose = seznam služeb

Do jednoho souboru zapíšeme, co má běžet a jak jsou služby propojené.

Nejčastěji se jmenuje compose.yaml nebo docker-compose.yml.

Ukázka docker-compose.yml


services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: superheslo
            

Příkazy Docker Compose

  • Spuštění všech služeb na pozadí: docker-compose up -d
  • Kontrola stavu a logů: docker-compose ps / docker-compose logs
  • Zastavení a úklid: docker-compose down

Nejdůležitější trojice

docker compose up -d

docker compose ps

docker compose down

Spustit, zkontrolovat, zastavit.

Mini-cvičení

  1. Spusť nginx na portu 8080.
  2. Ověř stránku v prohlížeči.
  3. Najdi kontejner přes docker ps.
  4. Podívej se na logy a kontejner zastav.

Co si zapamatovat

  • Image je šablona.
  • Kontejner je běžící instance.
  • Volume chrání data.
  • Port otevře službu ven.
  • Compose řídí více služeb.