Docker ile Konteyner Teknolojisine Giriş

Teknoloji 📖 2 dk okuma
#web#kariyer

Docker, uygulamalarınızı konteynerler içinde paketleyerek taşınabilir ve tutarlı çalışma ortamları sağlar.

Docker Nedir?

Docker, uygulamalarınızı ve bağımlılıklarını izole edilmiş konteynerlerde çalıştırmanızı sağlar.

Avantajları

  • Taşınabilirlik: Her ortamda aynı şekilde çalışır
  • İzolasyon: Her konteyner izole çalışır
  • Hafif: VM’lere göre daha az kaynak kullanır
  • Hızlı: Saniyeler içinde başlatma

Dockerfile Oluşturma

# Base image
FROM node:18-alpine

# Çalışma dizini
WORKDIR /app

# Dependencies'leri kopyala
COPY package*.json ./
RUN npm ci --only=production

# Uygulama kodunu kopyala
COPY . .

# Build
RUN npm run build

# Port
EXPOSE 3000

# Başlat
CMD ["npm", "start"]

Docker Compose

Multi-container uygulamalar için:

version: '3.8'

services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgresql://db:5432/myapp
    depends_on:
      - db
      - redis

  db:
    image: postgres:15-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=myapp

  redis:
    image: redis:7-alpine
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:

Temel Komutlar

# Image build et
docker build -t myapp:latest .

# Konteyner çalıştır
docker run -p 3000:3000 myapp:latest

# Çalışan konteynerleri listele
docker ps

# Logları görüntüle
docker logs <container-id>

# Konteyner içine gir
docker exec -it <container-id> sh

# Temizlik
docker system prune -a

Docker Compose Komutları

# Başlat
docker-compose up -d

# Durdur
docker-compose down

# Loglar
docker-compose logs -f

# Rebuild
docker-compose up --build

Best Practices

1. Multi-stage Builds

# Build stage
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Production stage
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY package*.json ./
RUN npm ci --only=production
CMD ["node", "dist/index.js"]

2. .dockerignore Kullanın

node_modules
npm-debug.log
.git
.env
*.md
.vscode

3. Güvenlik

# Root yerine user kullanın
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nodejs -u 1001
USER nodejs

# Hassas bilgileri environment variable ile verin
ENV NODE_ENV=production

Docker ile uygulamalarınızı her ortamda tutarlı şekilde çalıştırın!