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.
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í.