
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.
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
- Root olmayan kullanıcı kullanın
- Multi-stage build ile image boyutunu küçültün
- .dockerignore ile gereksiz dosyaları dışlayın
- Health check ekleyin
- Secrets için Docker Secrets veya env dosyası kullanın
- Log driver yapılandırın
- 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:
- E5-V4 VDS paketlerimizi inceleyin
- E5-V2 VDS paketlerimizi inceleyin
- Tum hosting ve sunucu paketlerimiz
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:

