Docker nám vyřešil problém „works on my machine”. Ale spouštět pět kontejnerů ručně s dvacetiřádkovými docker run příkazy? docker-compose (tehdy ještě Fig) přinesl elegantní řešení — jeden YAML soubor, jeden příkaz, celý stack.
Náš vývojový stack¶
version: '2'
services:
app:
build: .
ports:
- "8080:8080"
depends_on:
- db
- redis
environment:
- DB_HOST=db
db:
image: postgres:9.4
environment:
- POSTGRES_DB=myapp
- POSTGRES_PASSWORD=dev
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:2.8
rabbitmq:
image: rabbitmq:3-management
ports:
- "15672:15672"
volumes:
pgdata:
Výhody oproti Vagrant¶
Izolace služeb, rychlost (sekundy vs. minuty), méně paměti, bližší produkci. Docker-compose vytvoří izolovanou síť — služby se vidí pod jménem z YAML.
Konfigurace a tipy¶
.env soubor pro proměnné. docker-compose.override.yml
pro lokální přizpůsobení (v .gitignore). Používejte depends_on, ale
implementujte retry logiku v aplikaci. Named volumes pro persistentní data.
docker-compose je game changer¶
Jeden soubor definuje celou infrastrukturu. Verzovaný, reviewovaný, sdílený v gitu. Pokud používáte Docker, docker-compose je logický další krok.