Docker ile Konteyner Yönetimi

Docker konteynerlerinin kurulumu, yönetimi ve en iyi uygulamaları. Sistem yöneticileri için kapsamlı Docker rehberi.

6 min read
1.149 words

Docker ile Konteyner Yönetimi#

Docker, uygulamaları konteynerler içinde paketleme ve çalıştırma teknolojisidir. Sistem yöneticileri için Docker, kaynak verimliliği, taşınabilirlik ve ölçeklenebilirlik açısından büyük avantajlar sunar.

Docker Nedir?#

Docker, işletim sistemi düzeyinde sanallaştırma sağlayan bir konteynerizasyon platformudur. Geleneksel sanal makinelerden farklı olarak, Docker konteynerları host işletim sisteminin çekirdeğini paylaşır, bu da onları daha hafif ve hızlı yapar.

Docker vs Sanal Makineler#

| Özellik | Docker | Sanal Makine | |---------|--------|--------------| | Kaynak Kullanımı | Düşük | Yüksek | | Başlatma Süresi | Saniyeler | Dakikalar | | İzolasyon | Süreç düzeyi | Donanım düzeyi | | Taşınabilirlik | Yüksek | Orta |

Docker Kurulumu#

Ubuntu/Debian Kurulumu#

# Eski sürümleri kaldır sudo apt-get remove docker docker-engine docker.io containerd runc # Gerekli paketleri yükle sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release # Docker GPG anahtarını ekle curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # Docker repository'sini ekle echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Docker'ı yükle sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin # Kullanıcıyı docker grubuna ekle sudo usermod -aG docker $USER

CentOS/RHEL Kurulumu#

# Eski sürümleri kaldır sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # Docker repository'sini ekle sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # Docker'ı yükle sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin # Docker servisini başlat sudo systemctl start docker sudo systemctl enable docker

Temel Docker Komutları#

Image Yönetimi#

# Image'ları listele docker images # Image indir docker pull ubuntu:20.04 docker pull nginx:latest # Image sil docker rmi image_name:tag # Image geçmişini görüntüle docker history image_name # Image detaylarını görüntüle docker inspect image_name

Konteyner Yönetimi#

# Konteyner çalıştır docker run -d --name my-nginx nginx:latest # Çalışan konteynerleri listele docker ps # Tüm konteynerleri listele (durmuş olanlar dahil) docker ps -a # Konteyner durdur docker stop container_name # Konteyner başlat docker start container_name # Konteyner yeniden başlat docker restart container_name # Konteyner sil docker rm container_name # Konteyner loglarını görüntüle docker logs container_name docker logs -f container_name # Canlı takip

Konteyner İçine Erişim#

# Bash shell ile konteyner içine gir docker exec -it container_name /bin/bash # Komut çalıştır docker exec container_name ls -la # Dosya kopyala (host -> konteyner) docker cp file.txt container_name:/path/to/destination # Dosya kopyala (konteyner -> host) docker cp container_name:/path/to/file.txt ./

Dockerfile ile Image Oluşturma#

Temel Dockerfile#

# Base image FROM ubuntu:20.04 # Maintainer bilgisi LABEL maintainer="[email protected]" # Çalışma dizini WORKDIR /app # Paket güncellemeleri RUN apt-get update && apt-get install -y \ nginx \ curl \ && rm -rf /var/lib/apt/lists/* # Dosyaları kopyala COPY . /app # Port aç EXPOSE 80 # Başlangıç komutu CMD ["nginx", "-g", "daemon off;"]

Multi-stage Build#

# Build stage FROM node:16 AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # Production stage FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]

Image Build Etme#

# Dockerfile'dan image oluştur docker build -t my-app:latest . # Farklı Dockerfile kullan docker build -f Dockerfile.prod -t my-app:prod . # Build cache'siz oluştur docker build --no-cache -t my-app:latest .

Docker Compose#

Docker Compose, çoklu konteyner uygulamalarını tanımlamak ve çalıştırmak için kullanılır.

docker-compose.yml Örneği#

version: '3.8' services: web: build: . ports: - "80:80" volumes: - ./app:/var/www/html depends_on: - db environment: - DB_HOST=db - DB_NAME=myapp networks: - app-network db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: myapp MYSQL_USER: appuser MYSQL_PASSWORD: apppassword volumes: - db_data:/var/lib/mysql networks: - app-network redis: image: redis:alpine networks: - app-network volumes: db_data: networks: app-network: driver: bridge

Docker Compose Komutları#

# Servisleri başlat docker-compose up -d # Servisleri durdur docker-compose down # Logları görüntüle docker-compose logs -f # Belirli servisi yeniden başlat docker-compose restart web # Servisleri ölçeklendir docker-compose up -d --scale web=3

Volume ve Network Yönetimi#

Volume Yönetimi#

# Volume oluştur docker volume create my-volume # Volume'ları listele docker volume ls # Volume detaylarını görüntüle docker volume inspect my-volume # Volume ile konteyner çalıştır docker run -d -v my-volume:/data nginx # Host dizinini mount et docker run -d -v /host/path:/container/path nginx # Volume sil docker volume rm my-volume

Network Yönetimi#

# Network oluştur docker network create my-network # Network'leri listele docker network ls # Network detaylarını görüntüle docker network inspect my-network # Konteyner'ı network'e bağla docker run -d --network my-network nginx # Network sil docker network rm my-network

Docker Güvenliği#

Güvenlik En İyi Uygulamaları#

  1. Root olmayan kullanıcı kullanın:
RUN addgroup -g 1001 -S nodejs RUN adduser -S nextjs -u 1001 USER nextjs
  1. Minimal base image kullanın:
FROM alpine:latest # veya FROM scratch
  1. Gereksiz paketleri kaldırın:
RUN apt-get update && apt-get install -y \ package1 \ package2 \ && rm -rf /var/lib/apt/lists/*
  1. Image'ları tarayın:
# Docker Scout ile tarama docker scout cves my-image:latest # Trivy ile tarama trivy image my-image:latest

Resource Limitleri#

# CPU ve memory limiti docker run -d --cpus="1.5" --memory="1g" nginx # Docker Compose'da limitler services: web: image: nginx deploy: resources: limits: cpus: '0.5' memory: 512M reservations: cpus: '0.25' memory: 256M

Monitoring ve Logging#

Container Monitoring#

# Kaynak kullanımını izle docker stats # Belirli konteyner'ı izle docker stats container_name # JSON formatında çıktı docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"

Centralized Logging#

# docker-compose.yml version: '3.8' services: app: image: my-app logging: driver: "json-file" options: max-size: "10m" max-file: "3" # ELK Stack için elasticsearch: image: elasticsearch:7.14.0 environment: - discovery.type=single-node logstash: image: logstash:7.14.0 kibana: image: kibana:7.14.0 ports: - "5601:5601"

Production Ortamında Docker#

Docker Swarm#

# Swarm başlat docker swarm init # Node ekle docker swarm join --token TOKEN MANAGER-IP:2377 # Service oluştur docker service create --name web --replicas 3 -p 80:80 nginx # Service'leri listele docker service ls # Service ölçeklendir docker service scale web=5

Health Checks#

HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost/ || exit 1

Sorun Giderme#

Yaygın Problemler#

  1. Konteyner başlamıyor:
docker logs container_name docker inspect container_name
  1. Port çakışması:
netstat -tulpn | grep :80 docker ps --format "table {{.Names}}\t{{.Ports}}"
  1. Disk alanı problemi:
docker system df docker system prune -a
  1. Network bağlantı problemi:
docker network ls docker exec container_name ping google.com

Sonuç#

Docker, modern sistem yönetiminin vazgeçilmez araçlarından biridir. Bu rehberde ele aldığımız konular:

  • Docker kurulumu ve temel komutlar
  • Dockerfile ile image oluşturma
  • Docker Compose ile çoklu konteyner yönetimi
  • Güvenlik ve monitoring
  • Production ortamında kullanım

Docker'ı etkili kullanmak için düzenli pratik yapın ve topluluktan destek almaktan çekinmeyin. Bir sonraki yazımızda Kubernetes ile konteyner orkestrasyon konusunu ele alacağız.

Related Posts