Buyukweb
VDS'de Docker Kurulumu ve Container Yönetimi

VDS'de Docker Kurulumu ve Container Yönetimi

VDS sunucunuza Docker nasıl kurulur? Container oluşturma, Docker Compose, image yönetimi ve production ortamı best practice'leri.

Büyükweb Teknik Ekibi24 Ekim 20257 dakika okuma

VDS'de Docker Kurulumu ve Container Yönetimi

Docker, uygulamalarınızı izole container'larda çalıştırmanızı sağlayan devrimci bir teknolojidir. "Bende çalışıyor ama sunucuda çalışmıyor" sorununu ortadan kaldırır. Bu rehberde VDS sunucunuza Docker kurulumundan production best practice'lerine kadar her şeyi öğreneceksiniz.


Docker vs Sanal Makine

Özellik Docker Container Sanal Makine
Başlangıç süresi Saniyeler Dakikalar
Boyut MB GB
Performans Native yakın %5-20 overhead
İzolasyon Süreç düzeyinde Tam izolasyon
Taşınabilirlik Mükemmel Orta

Docker Kurulumu

Ubuntu 22.04/24.04

# Eski sürümleri kaldır
apt remove -y docker docker-engine docker.io containerd runc

# Gerekli paketler
apt update
apt install -y ca-certificates curl gnupg lsb-release

# Docker GPG anahtarı
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

# Repository ekle
echo   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu   $(. /etc/os-release && echo "$VERSION_CODENAME") stable" |   tee /etc/apt/sources.list.d/docker.list > /dev/null

# Docker kur
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Docker sürüm kontrol
docker version
docker compose version

Kullanıcıyı Docker Grubuna Ekle

# root olmadan docker kullanmak için
usermod -aG docker $USER
newgrp docker

# Test
docker run hello-world

Temel Docker Komutları

# Image işlemleri
docker pull nginx:alpine          # Image indir
docker images                     # Image listesi
docker rmi nginx:alpine           # Image sil
docker image prune                # Kullanılmayan image'ları sil

# Container işlemleri
docker run -d -p 80:80 --name web nginx    # Container başlat
docker ps                                   # Çalışan container'lar
docker ps -a                               # Tüm container'lar
docker stop web                            # Durdur
docker start web                           # Başlat
docker restart web                         # Yeniden başlat
docker rm web                              # Sil
docker rm -f web                           # Zorla sil

# Container içine gir
docker exec -it web bash
docker exec -it web sh  # bash yoksa

# Log görüntüle
docker logs web
docker logs -f web       # Canlı log
docker logs --tail 100 web

# İstatistikler
docker stats
docker stats web

Dockerfile ile Özel Image

# Node.js uygulaması için Dockerfile
FROM node:20-alpine

# Çalışma dizini
WORKDIR /app

# Bağımlılıkları önce kopyala (cache optimizasyonu)
COPY package*.json ./

# Bağımlılıkları yükle
RUN npm ci --only=production

# Uygulama dosyalarını kopyala
COPY . .

# Non-root kullanıcı (güvenlik)
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
USER nextjs

# Port expose et
EXPOSE 3000

# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3   CMD curl -f http://localhost:3000/health || exit 1

# Başlatma komutu
CMD ["node", "server.js"]
# Image oluştur
docker build -t myapp:1.0 .
docker build -t myapp:latest -f Dockerfile.prod .

# Çalıştır
docker run -d -p 3000:3000 --name myapp myapp:latest

Docker Compose

Birden fazla container'ı birlikte yönetmek için Docker Compose kullanın.

WordPress + MySQL + Nginx Örneği

# docker-compose.yml
version: '3.8'

services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./certs:/etc/nginx/certs:ro
    depends_on:
      - wordpress
    restart: unless-stopped

  wordpress:
    image: wordpress:php8.2-fpm-alpine
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress_data:/var/www/html
    depends_on:
      db:
        condition: service_healthy
    restart: unless-stopped

  db:
    image: mariadb:11
    environment:
      MARIADB_DATABASE: wordpress
      MARIADB_USER: wordpress
      MARIADB_PASSWORD: ${DB_PASSWORD}
      MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 3
    restart: unless-stopped

  redis:
    image: redis:7-alpine
    command: redis-server --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data
    restart: unless-stopped

volumes:
  wordpress_data:
  db_data:
  redis_data:
# .env dosyası oluştur
cat > .env << 'EOF'
DB_PASSWORD=GucluSifre123!
DB_ROOT_PASSWORD=RootSifre456!
REDIS_PASSWORD=RedisSifre789!
EOF

# Başlat
docker compose up -d

# Durumu kontrol et
docker compose ps
docker compose logs -f

# Durdur
docker compose down

# Volume'larla birlikte sil
docker compose down -v

Container Kaynak Limitleri

# docker-compose.yml içinde resource limits
services:
  app:
    image: myapp
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 2G
        reservations:
          cpus: '0.5'
          memory: 512M
# Komut satırında
docker run -d   --memory="1g"   --memory-swap="2g"   --cpus="1.5"   --name myapp   myapp:latest

Docker Network Yönetimi

# Network oluştur
docker network create --driver bridge mynetwork

# Container'ı network'e bağla
docker network connect mynetwork container1

# Network listesi
docker network ls

# Network detayları
docker network inspect mynetwork

Volume ve Kalıcı Veri

# Named volume oluştur
docker volume create mydata

# Volume kullanımı
docker run -d -v mydata:/app/data myapp

# Volume listesi
docker volume ls

# Volume detayları
docker volume inspect mydata

# Bind mount (host dizini)
docker run -d -v /opt/myapp/data:/app/data myapp

Docker Registry

# Docker Hub'a push
docker tag myapp:latest username/myapp:latest
docker push username/myapp:latest

# Private registry
docker run -d -p 5000:5000 --name registry registry:2
docker tag myapp localhost:5000/myapp
docker push localhost:5000/myapp
docker pull localhost:5000/myapp

Production Best Practices

  1. Root olmayan kullanıcı kullanın
  2. Multi-stage build ile image boyutunu küçültün
  3. .dockerignore ile gereksiz dosyaları dışlayın
  4. Health check ekleyin
  5. Secrets için Docker Secrets veya env dosyası kullanın
  6. Log driver yapılandırın
  7. Resource limits belirleyin
# Sistem temizliği
docker system prune -af  # TÜM kullanılmayan kaynakları temizle
docker system df          # Disk kullanımını göster

Portainer: Docker Web Arayüzü

# Portainer kurulumu (Docker GUI)
docker run -d   -p 8000:8000   -p 9443:9443   --name portainer   --restart=always   -v /var/run/docker.sock:/var/run/docker.sock   -v portainer_data:/data   portainer/portainer-ce:latest

# Erişim: https://SUNUCU_IP:9443

Buyukweb E5v4 VDS ve E5v2 VDS sunucularında Docker mükemmel çalışır. Yüksek RAM ve CPU seçenekleri, çoklu container çalıştırmak için idealdir. Nested VDS altyapımız ise Kubernetes cluster'ları için uygundur.


Ilgili Buyukweb Hizmetleri:


VDS Sunucu Yonetimi Temelleri

VDS kullanmak, paylasimli hostinge kiyasla cok daha fazla kontrol ve esneklik saglar.

Isletim Sistemi Secimi

Ubuntu Server genis topluluk destegi, AlmaLinux kurumsal kararlilik, Debian mutlak stabilite sunar. Windows Server ise ASP.NET ve MSSQL uygulamalari icin gereklidir. Buyukweb VDS paketlerinde tum isletim sistemleri desteklenir.

Guvenlik Temelleri

Ilk kurulumda SSH portunu degistirin, root girisini devre disi birakin ve SSH anahtar tabanli kimlik dogrulamayi yapilandirin. fail2ban ile brute-force saldirilarina karsi koruma saglayin. UFW veya firewalld ile guvenlik duvari kurallari tanimlayin.

KVM Sanallastirma

KVM tam donanim sanallastirmasi sunarak kendi kernelinizi kullanmaniza ve Docker calistirmaniza olanak tanir. Buyukweb tum VDS sunucularinda KVM kullanmaktadir.

Kaynak Izleme

top, htop ve glances ile CPU, RAM, disk I/O izleyin. Netdata ile gorsel paneller kurun. Swap alanini RAM'in 1-2 kati olarak ayarlayin.

VDS Kullanim Senaryolari

Web Uygulamasi Barindirma

Nginx yapilandirmanizi optimize ederek binlerce es zamanli baglantiya hizmet verebilirsiniz.

Oyun Sunucusu

Minecraft, Metin2, CS:GO icin VDS idealdir. E5-V4 islemciler yuksek saat hizlari ile oyun sunuculari icin mukemmeldir.

Gelistirme Ortami

Docker ve Kubernetes ile konteyner tabanli ortamlar olusturun. CI/CD pipeline icin VDS kullanin.

Sik Sorulan Sorular

VDS ile VPS farki nedir?

VDS genellikle KVM tabanli tam sanallastirma, VPS ise OpenVZ konteyner sanallastirma icin kullanilir.

Hangi kontrol panellerini kurabilirim?

cPanel/WHM, Plesk, CyberPanel (ucretsiz), HestiaCP (ucretsiz) ve DirectAdmin kurulabilir.

Sonuc

VDS sunucu, projeleriniz icin profesyonel altyapi sunar. Dogru yapilandirma ile maksimum performans elde edin. Buyukweb VDS paketleri KVM, NVMe SSD ve 7/24 destek ile hizmetinizdedir.

VDS Sunucu Karsilastirma Tablosu

Ozellik E5-V2 VDS E5-V4 VDS GPU VDS
Islemci Intel Xeon E5-V2 Intel Xeon E5-V4 NVIDIA Grid
RAM Tipi DDR3 DDR4 DDR4
Disk SSD/NVMe NVMe NVMe
Ideal Kullanim Gelistirme, test Uretim, yuksek trafik Oyun, render
Fiyat Araligi Uygun Orta-yuksek Premium

Hangi VDS Paketini Secmelisiniz?

  • Kisisel proje / blog: 2 vCPU, 4 GB RAM, E5-V2
  • Orta trafikli web sitesi: 4 vCPU, 8 GB RAM, E5-V4
  • E-ticaret / SaaS: 8+ vCPU, 16+ GB RAM, E5-V4
  • Oyun sunucusu: 4+ vCPU, 8+ GB RAM, GPU VDS

VDS Uzerinde Populer Uygulamalar

Docker ve Konteyner

Docker ile uygulamalarinizi konteyner olarak paketleyerek tasinabilirlik ve izolasyon saglayin. Docker Compose ile coklu konteyner yapilandirmalarini yonetin. Portainer ile gorsel Docker yonetimi yapin.

Reverse Proxy

Nginx reverse proxy ile birden fazla uygulamayi tek sunucuda barindirin. SSL termination, yuk dengeleme ve onbellekleme yapilandirin.

Monitoring Stack

Prometheus + Grafana ile kapsamli izleme kurun. Node Exporter ile sunucu metriklerini toplayin.

Etiketler:

#VDS#Docker#Container#Docker Compose#DevOps#Linux

Bu yazıyı paylaş