Servery a DevOps

Docker pro začátečníky: image, kontejner a první aplikace

Srozumitelný úvod do Dockeru – instalace na Ubuntu, rozdíl mezi image a kontejnerem, porty, proměnné prostředí, logy a nejdůležitější příkazy s příklady.

12. 10. 2026 · 4 min čtení

Docker zabalí aplikaci i se vším, co potřebuje (runtime, knihovny, konfiguraci), do jednoho balíčku, který běží stejně na vašem notebooku i na serveru. Konec „u mě to funguje“. Tento článek vysvětlí základní pojmy a provede vás prvními příkazy.

Image vs. kontejner

Pojem Analogie Popis
Image šablona / instalační disk neměnný balíček souborů a metadat, např. nginx:1.27
Kontejner spuštěný program běžící instance image s vlastním souborovým systémem a sítí
Registry obchod s aplikacemi úložiště image, nejznámější je Docker Hub
Dockerfile recept textový návod, jak sestavit vlastní image

Z jednoho image můžete spustit libovolný počet kontejnerů. Kontejner není virtuální stroj – sdílí jádro hostitelského systému, proto startuje za zlomek sekundy.

Instalace na Ubuntu/Debian

Nejrychlejší oficiální cesta je instalační skript Dockeru:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo docker run hello-world

Na produkčních serverech můžete místo skriptu použít repozitář podle dokumentace docs.docker.com – výsledek je stejný. Balíček docker.io z repozitářů Ubuntu bývá starší.

Aby nebylo nutné psát sudo:

sudo usermod -aG docker $USER
# odhlaste se a přihlaste znovu

Pozor: členství ve skupině docker fakticky odpovídá root přístupu k serveru.

Na Windows a macOS nainstalujte Docker Desktop.

První kontejner: webový server

docker run -d --name web -p 8080:80 nginx:1.27
  • -d – běží na pozadí,
  • --name web – vlastní jméno místo náhodného,
  • -p 8080:80 – port 8080 hostitele vede na port 80 v kontejneru,
  • nginx:1.27 – image a tag (verze).

Otevřete http://localhost:8080 a uvidíte uvítací stránku Nginx. Image se při prvním spuštění stáhl z Docker Hubu automaticky.

Základní příkazy

docker ps                 # běžící kontejnery
docker ps -a              # i zastavené
docker logs -f web        # logy (Ctrl+C ukončí sledování)
docker exec -it web sh    # shell uvnitř kontejneru
docker stop web           # zastavit
docker start web          # znovu spustit
docker rm web             # smazat (musí být zastavený, nebo -f)
docker images             # stažené image
docker rmi nginx:1.27     # smazat image
docker system df          # kolik místa Docker zabírá
docker system prune       # úklid nepoužívaných dat

Proměnné prostředí

Konfigurace se do kontejnerů obvykle předává přes proměnné prostředí:

docker run -d --name db \
  -e POSTGRES_PASSWORD=tajneheslo \
  -e POSTGRES_DB=app \
  -p 127.0.0.1:5432:5432 \
  postgres:16

Všimněte si 127.0.0.1: u portu – databáze bude dostupná jen z daného stroje. Bez toho Docker port otevře na všech rozhraních a obchází přitom pravidla UFW, což na VPS bývá nepříjemné překvapení.

Více proměnných najednou načtete ze souboru: --env-file .env.

Data nejsou trvalá (bez volume)

Po docker rm zmizí vše, co kontejner zapsal do svého souborového systému. Data, která mají přežít, ukládejte do volume:

docker run -d --name db \
  -e POSTGRES_PASSWORD=tajneheslo \
  -v pgdata:/var/lib/postgresql/data \
  postgres:16

Nyní můžete kontejner smazat a spustit znovu – data zůstanou ve volume pgdata. Více v článku Docker volumes a zálohy.

Vlastní image za minutu

Máte jednoduchou Python aplikaci app.py? Vytvořte vedle ní Dockerfile:

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]

Sestavení a spuštění:

docker build -t moje-app:1.0 .
docker run -d -p 8000:8000 moje-app:1.0

Jak Dockerfile psát pořádně, popisuje článek Dockerfile best practices.

Restart po pádu a po rebootu

docker run -d --restart unless-stopped --name web -p 8080:80 nginx:1.27

Kontejner se znovu spustí po pádu i po restartu serveru (pokud ho nezastavíte ručně).

Tagy: nepoužívejte latest v produkci

nginx bez tagu znamená nginx:latest – a to je pokaždé jiná verze. Na serveru vždy uvádějte konkrétní verzi (nginx:1.27, postgres:16). Upgrade pak děláte vědomě.

Kdy Docker použít a kdy ne

Hodí se: více aplikací s různými verzemi Pythonu/Node na jednom serveru, opakovatelné nasazení, rychlé vyzkoušení databáze nebo nástroje, stejné prostředí pro celý tým.

Nemusí se hodit: jednoduchý statický web (stačí Nginx), velmi slabý VPS s minimem RAM, situace, kdy ještě nezvládáte základy Linuxu – Docker problémy neschová, jen přidá vrstvu.

Další krok

Jakmile máte víc než jeden kontejner (aplikace + databáze), přejděte na Docker Compose. A pokud narazíte na nesrozumitelnou chybu, ColdHost AI v režimu Server a DevOps vám ji vysvětlí a navrhne příkazy, které na připojeném VPS spustíte až po vašem schválení.