Docker ile Konteynerization: Modern Uygulama Dağıtımı
Docker, 2013 yılında dotCloud tarafından geliştirilen ve hızla endüstri standardı haline gelen bir konteynerizasyon platformudur. Uygulamaları ve bağımlılıklarını paketleyerek, geliştirme ortamının üretim ortamıyla aynı olmasını sağlar.
Konteyner Nedir?
Konteyner, uygulamanın ve bağımlılıklarının tek bir paket halinde çalıştırılmasıdır. Virtual Machine’den daha hafiftir ve daha hızlı başlar.
# Basit bir Node.js Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
Neden Docker?
Avantajlar
- Portability: Her yerde aynı şekilde çalışır
- Consistency: Geliştirme ortamı = üretim ortamı
- Isolation: Uygulamalar birbirini etkilemez
- Resource Efficiency: VM’den daha az kaynak kullanır
- Scalability: Yatay genişleme kolaydır
“Docker, uygulamanın çalıştığı ortamdan tamamen soyutlanmasını sağlar.” - Solomon Hykes (Docker Kurucusu)
Temel Komutlar
Image Yönetimi
# Image çekme
docker pull node:18-alpine
# Image listeleme
docker images
# Image oluşturma
docker build -t benim-app:1.0 .
# Image silme
docker rmi benim-app:1.0
Container Yönetimi
# Container çalıştırma
docker run -d -p 3000:3000 --name benim-container benim-app
# Container listeleme
docker ps
# Container logları görüntüleme
docker logs benim-container
# Container içine girme
docker exec -it benim-container sh
# Container durdurma
docker stop benim-container
# Container silme
docker rm benim-container
Dockerfile
Dockerfile, image nasıl oluşturulacağını tanımlar.
# Multi-stage build
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Production image
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY package*.json ./
RUN npm install --production
EXPOSE 3000
CMD ["node", "dist/index.js"]
Docker Compose
Docker Compose, birden fazla container’ı tanımlamanıza ve yönetmenize olanak tanır.
# docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgres://db:5432/myapp
depends_on:
- db
db:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=mysecretpassword
volumes:
postgres_data:
# Docker Compose komutları
docker-compose up
docker-compose down
docker-compose logs -f
docker-compose ps
Best Practices
Image Boyutunu Küçültme
- Alpine Linux kullanın
- Multi-stage build uygulayın
- Gereksiz dosyaları silin
.dockerignorekullanın
# .dockerignore
node_modules
npm-debug.log
.git
.env
test
Security
- Güvenli base image’lar kullanın
- Container’ı root olarak çalıştırmayın
- Düzenli olarak image’ları güncelleyin
Production
# Production-ready Dockerfile
FROM node:18-alpine
RUN addgroup -g 1001 -S nodejs && \
adduser -S nodejs -u 1001
WORKDIR /app
COPY --chown=nodejs:nodejs package*.json ./
RUN npm ci --only=production
COPY --chown=nodejs:nodejs . .
USER nodejs
EXPOSE 3000
CMD ["node", "index.js"]
Kubernetes ile Entegrasyon
Docker konteynerlerini Kubernetes ile orchestrate edebilirsiniz:
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: benim-app
spec:
replicas: 3
selector:
matchLabels:
app: benim-app
template:
metadata:
labels:
app: benim-app
spec:
containers:
- name: benim-app
image: benim-app:1.0
ports:
- containerPort: 3000
Öğrenme Yolu
- Temel Docker komutları
- Dockerfile yazma
- Docker Compose kullanımı
- Multi-stage builds
- Kubernetes temelleri
Yorumlar (0)
Henüz yorum yapılmamış. İlk yorumu sen yap!
Yorum Yap