Docker to platforma do konteneryzacji aplikacji. Kontener to lekkie, izolowane środowisko, które zawiera aplikację i wszystkie jej zależności. Docker gwarantuje, że aplikacja działa identycznie na każdym komputerze — od laptopa dewelopera po serwer produkcyjny.
Docker jest standardem w DevOps. Używany z Kubernetes do orkiestracji, z CI/CD do automatyzacji deployów, z cloud providers do skalowania.
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine AS runner
WORKDIR /app
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
EXPOSE 3000
CMD ["npm", "start"]
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
depends_on:
- db
- redis
db:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
redis:
image: redis:7-alpine
volumes:
pgdata:
Pakuj aplikację + zależności w jeden kontener. Działa identycznie wszędzie.
Uruchom cały stack (app + db + cache + queue) jednym poleceniem.
Optymalizuj rozmiar obrazów. Builder → runner. Mniejsze images = szybszy deploy.
GitHub Actions, GitLab CI. Build → test → push → deploy automatycznie.
Orkiestracja kontenerów. Auto-scaling, rolling updates, self-healing.
Każdy dev ma identyczne środowisko. Koniec z "u mnie działa".
Idealny gdy: potrzebujesz powtarzalnych deployów, pracujesz w zespole, budujesz mikroserwisy, potrzebujesz CI/CD, chcesz łatwo skalować na chmurze.
Nie najlepszy gdy: budujesz prostą stronę (lepiej Vercel/Netlify), nie potrzebujesz izolacji, budujesz prototyp w weekend.