Docker Compose: više servisa jednom komandom
Kako da opišeš paket aplikacije, baze podataka i veb servera u jednoj datoteci, pokreneš ga jednom komandom i ažuriraš bez ručnog ponovnog buildovanja.
Ažurirano 23. avgust 2026.
Jedan servis možeš da pokreneš jednom dugom docker run komandom. Dva servisa koja treba da vide jedan drugog — to više ne funkcioniše: sutradan ćeš zaboraviti parametre. Compose prebacuje ceo opis u fajl koji možeš da čitaš, menjaš i držiš u repozitorijumu.
Minimalni primer
Direktorijum /opt/myapp, sa compose.yaml u njemu:
services:
db:
image: postgres:17
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: app
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
retries: 5
app:
image: ghcr.io/example/app:1.4.2
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
DATABASE_URL: postgres://postgres:${DB_PASSWORD}@db:5432/app
ports:
- "127.0.0.1:8080:8080"
volumes:
db-data:
Pored njega, fajl .env:
DB_PASSWORD=long-random-password
chmod 600 .env
docker compose up -d
docker compose ps
docker compose logs -f app
Šta je ovde važno
- Imena umesto adresa. Aplikacija pristupa bazi po imenu
db— Compose pravi zajedničku mrežu u kojoj se imena servisa automatski razrešavaju. Port baze ne moraš da objavljuješ spolja, i ne treba. restart: unless-stopped. Bez toga se ništa neće vratiti nakon restarta mašine.depends_onsa health check-om. Običandepends_ončeka samo da se kontejner pokrene, ne i da baza bude spremna da prihvati konekcije. Aplikacija se pokrene prerano i padne.- Tačne verzije slika.
postgres:17, nepostgres:latest. Salatestće sledećipulljednog dana doneti glavnu verziju koja neće otvoriti stare podatke. - Objavljivanje na
127.0.0.1. Port izlažeš spolja samo kroz web server sa sertifikatom.
Svakodnevne komande
docker compose up -d # bring up or apply changes
docker compose down # stop and remove containers (volumes intact)
docker compose down -v # ...and remove volumes too
docker compose restart app # restart one service
docker compose exec app sh # go inside
docker compose pull && docker compose up -d # update images
docker compose config # show final file with substitutions
docker compose config je najbolji način da proveriš fajl pre pokretanja: pokazaće na šta su se promenljive razvile i da li je neko uvlačenje izgubljeno.
docker compose down -vbriše volumene zajedno sa bazom. To je nepovratno. Pre svake operacije sa-vproveri da imaš kopiju — vidi bekape.
Fajlovi okruženja
Zgodno je da isti stack za testiranje i produkciju razdvojiš overlay fajlovima:
docker compose -f compose.yaml -f compose.prod.yaml up -d
Drugi fajl menja samo razlike: ograničenja memorije, objavljene portove i nivo logovanja.
Česte greške
- Tajne u
compose.yamlkoji se čuva u repozitorijumu. Drži ih u.envsa dozvolama 600 i ne komituj ga. - Mešanje
docker-composeidocker compose. Stara v1 verzija ne razume neku sintaksu i čuva projekte pod drugim imenima. Instaliraj plugin — vidi instalaciju Docker-a. - Podaci u kontejneru umesto u volumenu. Nakon
docker compose downnestaju. Vidi volumene. - Bez ograničenja memorije. Jedan servis pojede svu memoriju mašine, a kernel ubije njegove susede. Vidi ograničenja resursa.