Kontajnery riešia večný problém "u mňa to funguje". Balíte aplikáciu spolu so všetkými závislosťami.
Čo je Docker?
Docker je platforma pre vytváranie, distribúciu a spúšťanie kontajnerov.
Základné pojmy
- Image - šablóna pre kontajner (read-only)
- Container - bežiaca inštancia image
- Dockerfile - recept na vytvorenie image
- Registry - úložisko images (Docker Hub)
Prvý Dockerfile
# Base image
FROM node:20-alpine
# Working directory
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm ci --only=production
# Copy source code
COPY . .
# Build application
RUN npm run build
# Expose port
EXPOSE 3000
# Start command
CMD ["npm", "start"]
Základné príkazy
# Build image
docker build -t myapp:1.0 .
# Run container
docker run -d -p 3000:3000 myapp:1.0
# List containers
docker ps
# View logs
docker logs <container_id>
# Stop container
docker stop <container_id>
Docker Compose
Pre multi-container aplikácie:
# docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://db:5432/myapp
depends_on:
- db
db:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=myapp
- POSTGRES_PASSWORD=secret
volumes:
postgres_data:
# Start all services
docker compose up -d
# Stop all services
docker compose down
Kubernetes (K8s)
Kubernetes je orchestrátor pre kontajnery - spravuje nasadenie, škálovanie a samoopravovanie.
Kedy potrebujete K8s?
- Veľa mikroslužieb
- Potrebujete auto-scaling
- High availability je kritická
- Máte dedikovaný ops tím
Základné objekty
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:1.0
ports:
- containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
selector:
app: myapp
ports:
- port: 80
targetPort: 3000
type: LoadBalancer
Alternatívy pre menšie projekty
- Docker Compose - lokálny vývoj a malé nasadenia
- Railway, Render, Fly.io - managed platformy
- AWS ECS, Google Cloud Run - container-as-a-service
Best practices
- Malé images - používajte alpine verzie
- Multi-stage builds - oddeľte build a runtime
- Non-root user - bezpečnosť
- Health checks - pre automatické reštarty
- .dockerignore - vynechajte nepotrebné súbory
Záver
Začnite s Dockerom pre lokálny vývoj. Kubernetes pridajte až keď narazíte na limity jednoduchších riešení.