Skip to Content
🔥 Nová dokumentace BlazeHost.cz je online — prohlédnout

Docker Compose

Compose popisuje celou aplikaci — web, databázi, cache — v jednom souboru. Spustíš ji jedním příkazem.

Základní příkazy

docker compose up -d # spustit na pozadi docker compose ps # stav sluzeb docker compose logs -f # logy docker compose down # zastavit a smazat docker compose pull # stahnout nove obrazy docker compose restart # restart

Používej docker compose (s mezerou). Starší docker-compose je samostatný nástroj, který se už nevyvíjí.

Příklad: web + databáze

compose.yaml
services: web: build: . restart: unless-stopped ports: - "127.0.0.1:3000:3000" environment: DATABASE_URL: mysql://app:${DB_PASSWORD}@db:3306/aplikace depends_on: db: condition: service_healthy db: image: mysql:8 restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MYSQL_DATABASE: aplikace MYSQL_USER: app MYSQL_PASSWORD: ${DB_PASSWORD} volumes: - db-data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 volumes: db-data:

Kontejnery se vidí navzájem podle názvu služby. Aplikace se připojí na hostitele db, ne na localhost.

Proměnné v .env

.env
DB_ROOT_PASSWORD=velmi-tajne-heslo DB_PASSWORD=jine-tajne-heslo

.env přidej do .gitignore. Commitnuté heslo zůstane v historii repozitáře navždy, i když soubor později smažeš.

Reverse proxy s HTTPS

compose.yaml
services: caddy: image: caddy:2 restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy-data:/data depends_on: - web volumes: caddy-data:
Caddyfile
mujweb.cz { reverse_proxy web:3000 }

Caddy si certifikát od Let’s Encrypt vyřídí sám.

Aktualizace aplikace

Stáhni nové obrazy

docker compose pull

Restartuj s novými obrazy

docker compose up -d

Ukliď staré

docker image prune

docker compose down -v smaže i svazky s daty. Databázi tím nenávratně ztratíš. Bez -v svazky zůstanou.

Restart politika

HodnotaChování
nonikdy nerestartovat
on-failurejen při nenulovém návratovém kódu
unless-stoppedvždy, pokud jsi ho ručně nezastavil
alwaysvždy, i po ručním zastavení

Pro produkci používej unless-stopped.

Tipy

  • Publikuj porty na 127.0.0.1, pokud nemají být veřejné.
  • Používej healthcheck u databází. Bez něj se aplikace spustí dřív, než je databáze připravená.
  • Zálohuj svazky, ne kontejnery.

Poznámka

Compose soubor drž v Gitu vedle aplikace. Nasazení pak zopakuješ kdekoli.

Související články