← Zpět na všechny články blogu

Docker na VPS: instalace a první kontejnery

Michal Šmahel
Michal Šmahel Aktualizováno 22. 7. 2026 – 15 min. čtení

Znáte to. Aplikace vám na notebooku běží bez problémů. Na stagingu to najednou hlásí, že chybí systémové závislosti. A na produkčním VPS se to chová úplně jinak, protože tam běží starší verze PHP. „U mě to funguje“ je věta, která zabila víc pátečních večerů, než si kdo přizná.

Přesně tyhle problémy řeší Docker. Zabalí aplikaci se vším, co potřebuje k životu, do jedné krabičky – a ta krabička se pak chová (se správnou konfigurací) všude stejně. Na notebooku, na stagingu, na vašem VPS. Pro každého, kdo si spravuje vlastní server, je to jeden z nejužitečnějších nástrojů, co existují.

Co se v článku dozvíte:

  • Co je Docker a proč ho používat.
  • Jak se Docker instaluje na VPS (pro Debian).
  • Jak spustit první kontejner a základní příkazy.
  • Co je Docker Compose.
  • Jak na bezpečnost a správu kontejnerů.

Tenhle článek je o Dockeru z příkazové řádky. Pokud chcete jen dostat svou aplikaci na server a nezajímá vás, co se děje pod kapotou, přeskočte rovnou na nasazení přes VPS Centrum.

Co je Docker lidskou řečí

Docker je nástroj pro vývoj, předávání a spouštění aplikací, který je umí oddělit od konkrétního stroje. Aplikaci zabalí do balíčku, který si s sebou nese úplně všechno: aplikaci samotnou, běhové prostředí i konfiguraci. Takový balíček pak spustí v izolovaném prostředí – kontejneru.

Od virtuálního stroje (VM) se kontejner liší tím, že nepotřebuje simulovat vlastní hardware ani nést kompletní operační systém. Jádro operačního systému si totiž vypůjčuje od hostitele. Proto je o dost lehčí a nastartuje se za pár sekund.

Představte si to jako stěhování. S virtuálním strojem se stěhujete i s celým domem – základy, rozvody, všechno. Kontejner je stěhování do bytu, který už stojí a má zavedenou vodu i elektřinu. Berete si jen svoje věci, zbytek (jádro operačního systému) tam na vás čeká.

Image

Na obrázku vidíte, jak se virtuální stroje liší od kontejnerů. App jsou vaše aplikace, Bins/Libs programy a knihovny, které k běhu potřebují. Guest OS je celý virtualizovaný operační systém uvnitř virtuálního stroje. O ten se stará hypervisor – simuluje a spravuje virtualizovaný počítač, na kterém Guest OS „běží“. Host OS je operační systém fyzického serveru.

U Dockeru podobnou roli plní Docker Engine – software na hostitelském systému, který řídí celý život kontejnerů: spouštění, izolaci, síťování, práci s obrazy aplikací i s daty. Celý operační systém se ale nevirtualizuje, kontejnery sdílí jádro hostitele (Host Linux).

Co vám to reálně přinese:

  • Reprodukovatelnost: Kontejner spuštěný lokálně by se měl chovat stejně i na VPS. V praxi je to spíš ideál – drobné rozdíly (třeba v architektuře CPU nebo síťovém nastavení) se občas najdou.
  • Izolace: Aplikace si navzájem nelezou do zelí. A vyřeší to i situace, které bez Dockeru na jednom serveru prakticky řešit nejdou. Jedna aplikace potřebuje MySQL 5.7, druhá MySQL 8. S Dockerem běží každá databáze ve vlastním kontejneru a aplikace si jen vyberou tu svou.
  • Snadné nasazení: Jeden příkaz a aplikace běží. Bez ruční instalace závislostí.
  • Aktualizace a rollback bez stresu: Stáhnete nový image, zastavíte starý kontejner, spustíte nový. Když se něco pokazí, vrátíte se o krok zpátky stejně rychle.

Docker na VPS u Váš Hosting

Dobrá zpráva: u Váš Hosting nemusíte nic speciálního řešit. Na VPS máte root přístup přes SSH, takže si Docker nainstalujete a spravujete stejně jako na jakémkoliv jiném linuxovém serveru. A pokud se vám do příkazové řádky nechce, samotný Docker nainstalujete i na pár kliků přímo z VPS Centra.

Kromě Dockeru umí VPS Centrum na pár kliků nainstalovat i hotové aplikace jako n8n nebo AI agenta OpenClaw. To jsou připravené balíčky, u kterých nemusíte hnout prstem.

A od verze 3.3 zvládne i vaši vlastní aplikaci. Nahrajete ZIP nebo dáte URL veřejného GitHub repozitáře, VPS Centrum rozpozná Node.js nebo Python, postaví image a spustí kontejner na vaší doméně s HTTPS. Logy, statistiky i limit paměti pak máte přímo v administraci, bez SSH. Celý postup rozebíráme v článku Jak nasadit vlastní aplikaci bez ruční konfigurace.

Šikovný tip: u Node.js a Pythonu nemusíte psát Dockerfile vůbec. VPS Centrum kód projde nástrojem Nixpacks, rozpozná jazyk i verzi a předvyplní konfiguraci za vás. Dockerfile – tedy předpis, podle kterého se staví Docker image – si přinesete jen u ostatních stacků.

Docker Compose zatím ve VPS Centru nenajdete. Stack z několika propojených služeb si postavíte přes SSH – a přesně o tom je zbytek tohohle článku.

Instalace Dockeru na Debian

Jedna rada, kterou budete číst všude, a je pravdivá: instalujte vždy z oficiálního repozitáře Dockeru, ne z výchozích repozitářů distribuce. Ty totiž typicky obsahují starší verze – nainstalovali byste si zastaralý Docker hned od začátku.

Následující příkazy počítají s tím, že je spouštíte pod běžným uživatelem. Pokud jste na VPS přihlášeni jako root (což bývá výchozí stav), sudo z příkazů jednoduše vynechte – pozor, někde není jen na začátku řádku, ale i uprostřed.

# Přidej GPG klíč a repozitář

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

# Nainstaluj Docker

sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Ověř, že daemon socket opravdu běží a Docker funguje

sudo systemctl status docker

sudo docker run hello-world

docker compose version

Příkaz docker run hello-world je malá zkouška na závěr – pokud se vypíše přátelská hláška od Dockeru, máte vyhráno.

Poslední krok se týká jen situace, kdy na VPS nepracujete pod uživatelem root (ten má oprávnění ke všemu, takže tenhle krok přeskočte). Přidejte uživatele do skupiny docker, ať nemusíte pořád psát sudo:

sudo usermod -aG docker $USER

Pak se odhlaste a znovu přihlaste – bez toho se změna neprojeví. Od té chvíle stačí psát třeba jen docker run hello-world, bez sudo.

První kontejner: základní příkazy

# Spusť kontejner (stáhne image, pokud ho nemáte)

docker run nginx

# Spusť kontejner na pozadí a namapuj port (port 80 z kontejneru na port 8080 hostitele)

docker run -d -p 8080:80 nginx

# Vypiš běžící kontejnery

docker ps

# Zastav kontejner

docker stop <id>

# Zobraz logy

docker logs <id>

Jedna věc, na kterou se často zapomíná: data uložená přímo uvnitř kontejneru zmizí, jakmile ho vypnete. Pro databáze, nahrané soubory nebo cokoliv, co chcete mít i zítra, potřebujete persistentní úložiště – buď volume, nebo bind mount.

Volume spravuje Docker za vás a je to bezpečná výchozí volba pro data aplikace. Bind mount naproti tomu mapuje konkrétní adresář z hostitelského serveru přímo do kontejneru – stejně jako se výše mapovaly porty, jen místo portu jde o složku. Hodí se, když k datům chcete mít přímý přístup na serveru, typicky u konfiguračních souborů. Které z toho zvolit, závisí na tom, jestli chcete data držet „schovaná“ pod Dockerem, nebo je mít po ruce ve svém adresáři.

V praxi vypadá rozdíl takhle:

# Volume – Docker si data spravuje sám (kde přesně leží, řešit nemusíte)

docker run -d -v mysql-data:/var/lib/mysql mysql:8

# Bind mount – mapujete konkrétní složku ze serveru

docker run -d -v /home/uzivatel/nginx-conf:/etc/nginx/conf.d nginx

V prvním případě vytvoří Docker volume s názvem mysql-data a databáze do něj ukládá data – přežijí i smazání kontejneru. Ve druhém případě kontejner čte konfiguraci Nginx přímo z vaší složky na serveru: upravíte soubor, restartujete kontejner a změna platí.

Docker Compose: multi-service aplikace

Jakmile máte víc než jeden kontejner, ruční docker run přestává být zábava. Docker Compose vám dovolí popsat celou aplikaci – web server, databázi, cache – v jednom souboru docker-compose.yml a vše ovládat najednou. Doporučujeme ho použít i pro jedinou službu: konfigurace se ovládá pohodlněji a hlavně je verzovatelná, takže víte, co jste změnili a jak konfigurace vypadala v minulosti.

Příklad: Immich + AI rozšíření Immich + PostgreSQL (databáze) + Redis (cache)

zdroj

#

# WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose

#

# Make sure to use the docker-compose.yml of the current release:

#

# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml

#

# The compose file on main may not be compatible with the latest release.

name: immich

services:

  immich-server:

    container_name: immich_server

    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}

    # extends:

    #   file: hwaccel.transcoding.yml

    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding

    volumes:

      # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file

      - ${UPLOAD_LOCATION}:/data

      - /etc/localtime:/etc/localtime:ro

    env_file:

      - .env

    ports:

      - '2283:2283'

    depends_on:

      - redis

      - database

    restart: always

    healthcheck:

      disable: false

  immich-machine-learning:

    container_name: immich_machine_learning

    # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.

    # Example tag: ${IMMICH_VERSION:-release}-cuda

    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}

    # extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-acceleration

    #   file: hwaccel.ml.yml

    #   service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable

    volumes:

      - model-cache:/cache

    env_file:

      - .env

    restart: always

    healthcheck:

      disable: false

  redis:

    container_name: immich_redis

    image: docker.io/valkey/valkey:9@sha256:4963247afc4cd33c7d3b2d2816b9f7f8eeebab148d29056c2ca4d7cbc966f2d9

    healthcheck:

      test: redis-cli ping || exit 1

    restart: always

  database:

    container_name: immich_postgres

    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23

    environment:

      POSTGRES_PASSWORD: ${DB_PASSWORD}

      POSTGRES_USER: ${DB_USERNAME}

      POSTGRES_DB: ${DB_DATABASE_NAME}

      POSTGRES_INITDB_ARGS: '--data-checksums'

      # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs

      # DB_STORAGE_TYPE: 'HDD'

    volumes:

      # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file

      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data

    shm_size: 128mb

    restart: always

    healthcheck:

      disable: false

volumes:

  model-cache:

Čtyři služby, jeden příkaz, žádné ruční propojování. Databáze ani cache nemají publikovaný port, takže se k nim zvenčí nikdo nedostane. Compose totiž všem službám ve stacku automaticky vytvoří vlastní interní síť, ve které se navzájem najdou podle jména – aplikace se na databázi připojí prostě na database, aniž byste kdekoliv řešili IP adresy. Právě proto lidi Docker Compose milují.

VPS Centrum

Vyzkoušejte zdarma naši aplikaci pro správu serveru a domén. Budete si připadat jako zkušený administrátor.

Bezpečnost: co nezapomenout

Tady se hodí nalít si čistého vína – Docker vám sám o sobě bezpečnost nezajistí, jen vám dá nástroje a pak už je to na vás. 

Tři věci, na které se opravdu vyplatí dát pozor:

  1. Nevystavujte porty do světa zbytečně: -p 0.0.0.0:3306:3306 zpřístupní databázi klidně celému internetu. Pokud ji potřebuje jen jiný kontejner, nechte port neexponovaný a komunikujte přes interní Docker síť.
  2. Nenechte aplikaci v kontejneru běžet jako root, kde to není nutné: V Dockerfile na to stačí instrukce USER, kde uvedete neprivilegovaného uživatele – jeden řádek navíc, který Vám ušetří nervy při případném úniku.
  3. Docker umí nechtěně obejít firewall serveru: Když publikujete port přes -p, zapíše si Docker vlastní pravidla přímo do iptables – a ta se vyhodnotí dřív než pravidla, která spravuje třeba UFW. Výsledek: port kontejneru může být dostupný z internetu, i když ho máte ve firewallu zakázaný. Řešení: porty, které nemají jít ven, vůbec nepublikujte, nebo je navažte jen na localhost (-p 127.0.0.1:3306:3306), případně nastavte firewall tak, aby s chováním Dockeru explicitně počítal.

A samozřejmě: pravidelně aktualizujte images a Docker samotný (pomocí apt současně s ostatními systémovými balíčky). Tohle je jen základní výčet, rozhodně ne kompletní seznam – pro hlubší zabezpečení Dockeru doporučujeme OWASP Docker Security Cheat Sheet.

docker pull vas-image && docker compose up -d

Jeden příkaz, novější a bezpečnější verze.

Jak spravovat a udržovat Docker

Nepoužívané kontejnery a images se na disku hromadí potichu, ale jistě:

# Smaž zastavené kontejnery, nevyužité images a sítě, build cache

docker system prune -a

A aby vám kontejner naskočil sám i po restartu serveru, nastavte restart policy:

docker run --restart unless-stopped ...

Nebo v docker-compose.yml:

restart: unless-stopped

Kolik RAM Docker vlastně potřebuje

Samotný Docker engine si bere minimum. Každý kontejner ale alokuje paměť pro svou aplikaci a její běhové prostředí – jednoduchý Nginx web si vystačí s desítkami MB, databázový kontejner může chtít klidně jednotky GB.

A pozor: Nemalý díl paměti si vezme i operační systém. Pokud používáte VPS od Váš Hosting s VPS Centrem, je potřeba počítat s další pamětí. Nejsou to zanedbatelné položky. Při plánování VPS proto vždycky počítejte s rezervou, ne s přesným součtem minim kontejnerů.

Tak co, rozjedete první kontejner?

Docker není magie, jen šikovně zabalená krabička, která vám ušetří spoustu času. Instalace zabere pár minut, první kontejner ještě míň. A jakmile jednou zkusíte Docker Compose, pro běžný provoz se vám k ručnímu docker run už nebude chtít vracet – i když pro rychlý experiment nebo ladění má občas smysl sáhnout právě po něm.

Root přístup na VPS od Váš Hosting máte k dispozici od první minuty. Nic vám nebrání pustit se do toho hned teď. Tak to vyzkoušejte na týden zdarma.

Časté otázky

Mohu Docker spravovat přes VPS Centrum?

Částečně ano. Docker nainstalujete na klik a od verze 3.3 zvládnete přes VPS Centrum i nasadit vlastní aplikaci v Node.js nebo Pythonu – včetně domény, HTTPS, logů, statistik a limitu paměti.

Docker Compose zatím nepodporujeme, takže vícesložkové stacky si postavíte přes SSH. Na ty VPS Centrum nesahá, spravuje si jen své vlastní kontejnery.

Pro první kroky doporučujeme sáhnout po nativní serverové databázi, kterou už na VPS máte i se zálohami, a Docker si nechat jen na aplikační logiku. Ušetříte si starost o zálohování databázového kontejneru.

Freelo - Nástroj na řízení úkolů a projektů

Přidej se, pozvi svůj tým a klienty, rozděl práci a sleduj, jak se úkoly dají do pohybu.

Co jsou Docker volumes a proč je potřebuji?

Volume je úložiště, které spravuje Docker mimo kontejner a namapuje ho dovnitř. Data uvnitř kontejneru bez volume zaniknou, jakmile ho smažete. Databáze a nahrané soubory proto do volume patří vždycky. U konfiguračních souborů je obvykle praktičtější bind mount, protože k nim máte přímý přístup ve svém adresáři na serveru.

Může Docker obejít firewall na mém serveru?

U publikovaných portů (-p) ano – Docker si píše vlastní pravidla do iptables, která můžou obejít standardní firewall. Řešení je nepublikovat porty, které nemají jít ven, a komunikaci řešit přes interní Docker síť.

Mohu na jednom VPS provozovat víc aplikací v Dockeru?

Ano. Každá aplikace běží v izolovaném kontejneru, případně ve svém Docker Compose stacku s vlastními podpůrnými službami (databází, cache apod.). Reverzní proxy (např. Nginx) pak požadavky nasměruje na správný kontejner podle domény.

Zůstaňte s námi v kontaktu

Jednou za měsíc posíláme souhrn novinek. Nemusíte se bát, spamovat vás nebudeme a odhlásit se můžete kdykoliv...

Karel Dytrych
Tým Váš Hosting
Vyzkoušejte náš trial na týden zdarma

Garance 14denní záruky vrácení peněz

Vyzkoušejte server na týden zdarma

Vyzkoušet server

Přesouváte web na lepší hosting?

Stáhněte si průvodce migrací bez výpadku

Průvodce migrací na lepší hosting