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 # restartPouží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 pullRestartuj s novými obrazy
docker compose up -dUkliď staré
docker image prunedocker compose down -v smaže i svazky s daty. Databázi tím nenávratně
ztratíš. Bez -v svazky zůstanou.
Restart politika
| Hodnota | Chování |
|---|---|
no | nikdy nerestartovat |
on-failure | jen při nenulovém návratovém kódu |
unless-stopped | vždy, pokud jsi ho ručně nezastavil |
always | vž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.