İçindekiler
- 1 Docker ile VPS’te İzole Uygulama Barındırma Neden Önemli?
- 2 Temel Kavramlar: VPS, Konteyner ve Docker İlişkisi
- 3 Docker ile VPS’te İzole Uygulama Barındırmanın Avantajları
- 4 Adım 1: Doğru VPS ve Linux Dağıtımını Seçmek
- 5 Adım 2: VPS Üzerinde Docker Kurulumu
- 6 Adım 3: İlk Konteynerinizi Çalıştırmak
- 7 Adım 4: Basit Bir Uygulamayı Konteynerleştirmek
- 8 Adım 5: Docker Compose ile Çoklu Servisi Yönetmek
- 9 Adım 6: Veri Saklama ve Kalıcı Hacimler (Volumes)
- 10 Adım 7: Güvenlik – İzole Uygulama Barındırmanın Temel Kuralları
- 11 Adım 8: İzleme, Loglar ve Sorun Giderme
- 12 Adım 9: Yedekleme ve Güncelleme Stratejisi
- 13 Tipik Senaryo: Tek VPS’te Birden Fazla Uygulamayı İzole Etmek
- 14 Sonuç: Docker + VPS Kombinasyonuyla Esnek ve İzole Bir Platform Kurmak
Docker ile VPS’te İzole Uygulama Barındırma Neden Önemli?
Bir web uygulamasını ya da küçük bir SaaS projesini canlıya alırken en sık karşılaşılan sorulardan biri şudur: “Aynı VPS üzerinde birden fazla uygulamayı nasıl güvenli ve birbirinden izole şekilde çalıştırırım?” Klasik yaklaşım; her proje için ayrı kullanıcı, ayrı dizin, ayrı port, elle servis kurulumları ve bolca konfigürasyon dosyası ile uğraşmaktır. Birkaç uygulamaya kadar bu yöntem idare edebilir; ancak güncelleme, rollback, bağımlılık çatışmaları ve güvenlik tarafında işler hızla karışır.
Tam da bu noktada Docker devreye giriyor. Konteyner yaklaşımıyla, her uygulamayı kendi küçük “dünyası” içinde, izole ve tekrarlanabilir şekilde çalıştırabiliyorsunuz. Tek VPS üzerinde Node.js API, PHP/Laravel, Redis, PostgreSQL, hatta admin panellerinizi bile ayrı konteynerlerde, kontrollü ağ ve disk politikalarıyla yönetmek mümkün. DCHost üzerinde kullandığınız güçlü VPS altyapısını, Docker ile çok kiracılı bir platforma dönüştürebiliyorsunuz. Bu rehberde; sıfırdan bir VPS üzerinde Docker kurulumunu, temel komutları, basit bir uygulamayı konteynerleştirmeyi, veri saklama, güvenlik ve izleme adımlarını adım adım ve yeni başlayanların rahatlıkla takip edebileceği bir dille anlatacağız.
Temel Kavramlar: VPS, Konteyner ve Docker İlişkisi
Önce mimariyi netleştirelim. Elinizde DCHost üzerinden aldığınız bir VPS olduğunu düşünün. Bu VPS, sanallaştırma (KVM gibi) kullanarak size ayrılmış CPU, RAM ve disk kaynakları sağlayan bir sanal sunucudur. VPS’in içinde istediğiniz Linux dağıtımını (Ubuntu, Debian, AlmaLinux vb.) kullanabilir, root yetkisiyle tam kontrol sahibi olursunuz.
Konteyner ise sanallaştırma katmanında değil, işletim sistemi seviyesinde çalışan daha hafif izolasyon birimleridir. Her konteyner kendi dosya sistemi, ağ arayüzü ve süreç alanına sahip olur; ancak çekirdeği (kernel) diğer konteynerlerle paylaşır. Bu sayede:
- VM’lere göre çok daha hafif ve hızlı başlarlar,
- Kaynak kullanımı daha verimlidir,
- “Aynı benim makinemde çalışıyordu” sorununu azaltacak şekilde tekrarlanabilir ortam sunarlar.
Docker, bu konteynerleri oluşturmayı, çalıştırmayı ve yönetmeyi kolaylaştıran bir platformdur. Docker imajları sayesinde uygulamanızın kodunu, bağımlılıklarını ve çalışma ortamını tek bir paket olarak tanımlarsınız. VPS + Docker birleşimi, küçük ve orta ölçekli projeler için hem ekonomik hem de yönetilebilir bir çözüm sunar.
Docker ile VPS’te İzole Uygulama Barındırmanın Avantajları
DCHost üzerinde Docker kullanan müşterilerde pratikte en çok faydasını gördüğümüz noktalar şunlar:
- İzolasyon: Her uygulama kendi konteynerinde; bağımlılıklar, portlar ve ortam değişkenleri karışmıyor.
- Kolay geri alma (rollback): Yeni imajla bir şeyler bozulursa, eski imaja dönmek genellikle tek komut.
- Tekrarlanabilir kurulum: Yeni bir DCHost VPS’e geçerken, aynı Docker Compose dosyasıyla ortamı birkaç dakikada ayağa kaldırabiliyorsunuz.
- Basitleştirilmiş güncellemeler: Uygulama versiyonunu imaj etiketiyle (
myapp:1.2.0gibi) yönetmek oldukça temiz bir akış sağlar. - Kaynak yönetimi: Docker ile CPU ve bellek limitleri koyarak, bir konteynerin tüm VPS’i çökertmesini önleyebilirsiniz.
VPS tarafında kaynak planlama konusunda daha derinlemesine okumak isterseniz, CPU, RAM ve disk kaynaklarını doğru seçme rehberimize de göz atabilirsiniz.
Adım 1: Doğru VPS ve Linux Dağıtımını Seçmek
Docker neredeyse tüm modern Linux dağıtımlarında çalışır; ancak dokümantasyon ve topluluk desteği düşünüldüğünde aşağıdaki seçimler yeni başlayanlar için hayatı kolaylaştırır:
- Ubuntu LTS (20.04 / 22.04): Docker dokümantasyonunda en iyi anlatılan seçeneklerden.
- Debian: Minimal ve stabil bir ortam isteyenler için iyi bir tercih.
- AlmaLinux / Rocky Linux: CentOS sonrası RHEL uyumlu dünyada popüler alternatifler.
DCHost üzerinde VPS oluştururken Docker kullanacağınızı biliyorsanız, genellikle Ubuntu LTS seçmek operasyonel açıdan daha rahattır. Ayrıca yeni bir VPS aldıysanız, sunucunuzu Docker kurmadan önce mutlaka temel güvenlik ve güncelleme adımlarından geçirin. Bu konuda detaylı bir adım listesine ihtiyaç duyuyorsanız, yeni VPS’te ilk 24 saatte yapılması gerekenler rehberimizi takip edebilirsiniz.
Adım 2: VPS Üzerinde Docker Kurulumu
Ubuntu / Debian Üzerinde Docker Kurulumu
Aşağıdaki adımlar, resmi Docker deposunu kullanarak güncel sürümü kurar:
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
# Docker GPG anahtarını ekleyin
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture)
signed-by=/usr/share/keyrings/docker.gpg]
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# Docker servisinin durumunu kontrol edin
sudo systemctl status docker
Ek olarak docker komutlarını her seferinde sudo ile yazmamak için, kendi kullanıcınızı docker grubuna ekleyebilirsiniz:
sudo usermod -aG docker $USER
# Oturumu kapatıp tekrar açın veya SSH bağlantınızı yenileyin
Docker Compose Kurulumu
Gerçek projelerde çoğunlukla birden fazla konteyneri birlikte yönetmeniz gerekir (web + veritabanı + cache gibi). Bunun için en pratik araç Docker Compose’tur. Modern Docker sürümlerinde genellikle docker compose komutu doğrudan gelir; yoksa klasik binary’yi şu şekilde kurabilirsiniz:
sudo curl -L
https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
Artık tek bir docker-compose.yml dosyasıyla çoklu servisi yönetebilecek durumdasınız.
Adım 3: İlk Konteynerinizi Çalıştırmak
Docker kurulumunun sağlıklı olduğunu doğrulamanın en basit yolu, küçük bir test konteyneri çalıştırmaktır:
docker run --rm hello-world
Bu komut, test imajını indirip kısa bir bilgi mesajı yazdırarak konteyneri sonlandırır. Ardından ufak bir web servisi deneyebiliriz. Örneğin Nginx:
docker run -d --name my-nginx -p 8080:80 nginx:alpine
Bu komut:
-d: Arka planda (detached) çalıştırır,--name my-nginx: Konteynere bir isim verir,-p 8080:80: VPS’iniz üzerindeki 8080 portunu konteynerin içindeki 80 portuna yönlendirir.
Tarayıcınızdan http://sunucu-ip-adresiniz:8080 adresine gittiğinizde Nginx varsayılan sayfasını görüyorsanız, Docker başarılı şekilde çalışıyor demektir.
Temel Docker Komutlarına Kısa Bakış
docker ps: Çalışan konteynerleri listeler.docker ps -a: Duranlar dahil tüm konteynerleri listeler.docker logs konteyner_adi: Logları gösterir.docker stop konteyner_adi: Konteyneri durdurur.docker rm konteyner_adi: Duran konteyneri siler.docker images: İndirilmiş imajları listeler.docker rmi imaj_adi: Belirtilen imajı siler.
Adım 4: Basit Bir Uygulamayı Konteynerleştirmek
Şimdi gerçek hayata daha yakın bir örnek yapalım. Diyelim ki basit bir Node.js API’niz var ve bunu DCHost VPS’inizde Docker ile izole etmek istiyorsunuz.
Örnek Proje Yapısı
myapp/
├─ package.json
├─ server.js
└─ Dockerfile
server.js içinde çok basit bir HTTP sunucu olsun:
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ status: 'ok', message: 'Docker VPS deneme' }));
});
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => console.log(`Server ${PORT} portunda çalışıyor`));
Dockerfile Yazmak
FROM node:18-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production
COPY . .
ENV PORT=3000
EXPOSE 3000
CMD ["node", "server.js"]
Ardından imajı oluşturup konteyneri çalıştırıyoruz:
cd myapp
docker build -t myapp:1.0 .
docker run -d --name myapp-container -p 3000:3000 myapp:1.0
Artık http://sunucu-ip-adresiniz:3000 üzerinden API’nizi izole bir konteynerde erişilebilir hale getirdiniz. Aynı VPS üzerinde başka uygulamalar da benzer şekilde kendi konteynerleri içinde çalışabilir.
Adım 5: Docker Compose ile Çoklu Servisi Yönetmek
Gerçek projelerde tek konteyner nadiren yeterli olur. Genellikle şu bileşenlere ihtiyacınız olur:
- Uygulama sunucusu (Node.js, PHP-FPM, Python vb.)
- Veritabanı (MySQL/MariaDB, PostgreSQL)
- Önbellek (Redis, Memcached)
- Reverse proxy (Nginx/Caddy) ve SSL sonlandırma
Bunların hepsini tek bir docker-compose.yml dosyasıyla yönetmek, konfigürasyonu versiyon kontrolüne almak ve yeni bir DCHost VPS üzerinde aynı mimariyi dakikalar içinde kurmak için idealdir.
Örnek docker-compose.yml
version: '3.8'
services:
app:
build: ./myapp
container_name: myapp
restart: unless-stopped
environment:
- NODE_ENV=production
- PORT=3000
networks:
- internal
nginx:
image: nginx:alpine
container_name: my-nginx
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- app
networks:
- internal
networks:
internal:
driver: bridge
Bu senaryoda:
appservisi, biraz önce yazdığımız Node.js uygulamasını temsil ediyor.nginxkonteyneri,app’e reverse proxy yapıyor ve dış dünyaya sadece 80 portu açılıyor.- İkisi de aynı
internalDocker ağı üzerinde konuşuyor, böylece uygulamanız dışarıya gereksiz portlar açmamış oluyor.
Bu tarz çoklu servis kurulumlarını WordPress için de kullanmak istiyorsanız, hem Compose hem de kalıcı depolama tarafını detaylı anlattığımız Docker Compose ile WordPress + Nginx + MariaDB + Redis rehberimize göz atmanız faydalı olacaktır.
Adım 6: Veri Saklama ve Kalıcı Hacimler (Volumes)
Konteynerler doğası gereği geçicidir; silindiğinde içindeki veri de kaybolur. Uygulama logları, yüklenen dosyalar ve özellikle veritabanı verileriniz için kalıcı hacim (volume) kullanmanız şarttır.
Basit Volume Örneği
docker run -d
--name my-db
-e POSTGRES_PASSWORD=guclu_sifre
-v /data/postgres:/var/lib/postgresql/data
postgres:15
Burada -v /data/postgres:/var/lib/postgresql/data ifadesi, VPS üzerindeki /data/postgres dizinini konteyner içindeki veritabanı veri dizinine bağlar. Konteyner silinse bile, veriler VPS diskinde kalır.
Compose ile Volume Kullanımı
services:
db:
image: postgres:15
environment:
- POSTGRES_PASSWORD=guclu_sifre
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Bu yaklaşımda Docker, db_data adında yönetilen bir volume oluşturur. Üretim ortamlarında, bu volume’lerin DCHost altyapısında ek diskler veya yedekleme politikanızla uyumlu konumlarda tutulmasına dikkat etmelisiniz. MySQL/PostgreSQL yedekleme stratejilerini daha ayrıntılı planlamak için MySQL/MariaDB yedekleme rehberimize de mutlaka göz atın.
Adım 7: Güvenlik – İzole Uygulama Barındırmanın Temel Kuralları
Docker ile izolasyon kazanıyorsunuz; ancak bu, güvenliğin tamamen otomatik sağlandığı anlamına gelmiyor. Aşağıdaki başlıklar, DCHost üzerinde Docker kullanan müşterilerde en çok önerdiğimiz pratiklerdir.
1. VPS Güvenlik Duvarını Doğru Yapılandırın
Dış dünyaya açmanız gereken portlar genellikle sadece şunlardır:
- 80 (HTTP) ve 443 (HTTPS)
- 22 (SSH) – mümkünse IP kısıtlaması ve anahtar bazlı kimlik doğrulama ile
Docker konteynerleriniz iç ağda (bridge network) çalışırken, yalnızca reverse proxy konteynerinin kullandığı portu dışarı açmanız yeterli. UFW veya nftables ile güvenlik duvarı kurarken, temel kuralları VPS güvenlik duvarı yapılandırma rehberimizde bulabilirsiniz.
2. Root Olarak Çalışan Konteynerlerden Kaçının
Pek çok hazır Docker imajı varsayılan olarak root kullanıcı ile gelir. Mümkün olduğunda:
- İmaj içinde ayrı bir kullanıcı oluşturun (örneğin
RUN adduser -D appuser), USER appuserile uygulamayı bu kullanıcıyla çalıştırın,- Yazma izinlerini sadece gereken dizinlere verin.
3. Ortam Değişkenleri ve Secrets Yönetimi
Veritabanı şifreleri, API anahtarları gibi hassas bilgileri docker-compose.yml dosyasında düz metin olarak tutmak risklidir. En azından:
- Ortam değişkenlerini
.envdosyalarına taşıyın ve bu dosyaları versiyon kontrol dışında bırakın. - Mümkünse şifreleri Docker secrets, sops + age gibi araçlarla şifreli halde yönetin.
VPS üzerinde secrets yönetimini daha ileri seviyeye taşımak isterseniz, VPS’te secrets yönetimi rehberimizde pratik bir yol haritası bulabilirsiniz.
4. Host Tarafı Güvenliği İhmal Etmeyin
Docker ne kadar izole olursa olsun, altında çalışan VPS’in güvenliği zayıfsa saldırganlar konteynerlerden host’a sıçrayabilir. Şu başlıkları mutlaka ele alın:
- SSH anahtar yönetimi ve parola ile girişleri kapatmak,
- Fail2ban veya benzeri araçlarla brute-force saldırılarını engellemek,
- Güncel kernel ve güvenlik yamaları,
- Gereksiz servislerin kapatılması.
Bu konuları daha bütüncül görmek isterseniz, VPS sunucu güvenliği rehberimizi baştan sona okumanızı öneririm.
Adım 8: İzleme, Loglar ve Sorun Giderme
Bir uygulamayı konteynerleştirdikten sonra, işin önemli kısmı başlar: izlemek ve sorun çıktığında hızlı teşhis etmek. Docker tarafında temel log ve metriklere erişmek için:
docker logs myappile konteyner loglarını takip edebilirsiniz,docker statsile canlı CPU, RAM ve IO kullanımını görebilirsiniz.
Daha kurumsal bir yaklaşım için; host seviyesinde Prometheus + Node Exporter, uygulama logları için Loki + Promtail, grafikler için Grafana kombinasyonu oldukça güçlü bir çözümdür. Bu mimariyi daha önce ayrıntılı olarak anlattığımız VPS izleme ve alarm kurulum rehberimiz, Docker kullansanız da kullanmasanız da işinize yarayacaktır.
Adım 9: Yedekleme ve Güncelleme Stratejisi
Docker ile VPS’te izole barındırma kurulduktan sonra, sürdürülebilirlik için iki kritik alana odaklanmalısınız: yedekler ve güncellemeler.
Yedekleme
- Uygulama kodu ve Docker Compose dosyalarınızı mutlaka bir Git deposunda saklayın.
- Veritabanı ve kalıcı volume’ler için düzenli yedekleme işleri (cron ile
mysqldump,pg_dump,resticvb.) planlayın. - Yedekleri DCHost altyapısında farklı bir VPS’e veya S3 uyumlu object storage’a kopyalayın.
Güncellemeler
- Uygulama imajlarınızı
myapp:1.0,1.1gibi versiyonlayın; her zaman direktlatestkullanmayın. - Güncelleme öncesi staging ortamında yeni imajı test edin.
- Güncelleme sırasında
docker-compose pull && docker-compose up -dile kontrollü geçiş yapın.
WordPress gibi popüler uygulamaları Docker ile yönetirken yedek ve güncelleme süreçlerini nasıl kurgulayacağınızı merak ediyorsanız, Docker ile WordPress’i VPS’te yaşatma rehberimizde uçtan uca bir senaryo bulabilirsiniz.
Tipik Senaryo: Tek VPS’te Birden Fazla Uygulamayı İzole Etmek
Somut bir örnek üzerinden toparlayalım. Diyelim ki DCHost üzerinde aşağıdaki işleri aynı VPS’te toplamak istiyorsunuz:
- Kurumsal web siteniz (PHP/Laravel)
- Basit bir Node.js API
- Redis cache
- PostgreSQL veritabanı
Bunu aşağıdaki gibi bir mimari ile yönetebilirsiniz:
- Tüm uygulamalar için tek bir
docker-compose.ymlveya mantıklı servis gruplarına ayrılmış birden fazla Compose dosyası, - Harici dünyaya sadece Nginx reverse proxy konteyneri (80/443) açılıyor,
- Her uygulama kendi iç ağında (
backend,frontendgibi ağlar) izole, - PostgreSQL ve Redis için kalıcı volume’ler ve düzenli yedekleme işleri,
- Uygulamalar arası erişim sadece gereken port ve ağlar üzerinden.
Böylece tek bir DCHost VPS’inizi, hem maliyet etkin hem de yönetilebilir bir çoklu proje platformuna dönüştürmüş olursunuz.
Sonuç: Docker + VPS Kombinasyonuyla Esnek ve İzole Bir Platform Kurmak
Docker ile VPS’te izole uygulama barındırma; küçük bir ajansın onlarca müşteri sitesini, bir SaaS girişiminin ilk versiyonlarını veya bir şirketin iç araçlarını tek bir altyapıda düzenli şekilde yönetebilmesi için son derece güçlü bir model sunuyor. Her uygulamanın kendi konteynerinde çalışması; bağımlılık çatışmalarını azaltıyor, güncellemeleri öngörülebilir hale getiriyor ve güvenlik tarafında net sınırlar çizmenize yardımcı oluyor.
Bu rehberde; DCHost üzerinde bir VPS seçmekten Docker kurulumuna, ilk konteynerinizi ayağa kaldırmaktan Docker Compose ile çoklu servis yönetimine, kalıcı hacimler, güvenlik, izleme ve yedekleme stratejilerine kadar temel adımları adım adım ele aldık. Bundan sonra atacağınız her adım (CI/CD entegrasyonu, staging ortamları, canary dağıtımları, merkezi loglama vb.) bu temel üzerine inşa edilecek.
Eğer henüz Docker için kullanacağınız bir VPS’iniz yoksa, DCHost üzerinde ihtiyacınıza uygun CPU, RAM ve NVMe disk kombinasyonlarını seçerek işe başlayabilirsiniz. Mevcut VPS’inizde Docker’a geçmek ya da mevcut Docker mimarinizi DCHost altyapısına taşımak istiyorsanız, teknik ekibimiz de mimari planlama konusunda yanınızda olmaya hazır. Küçük adımlarla başlayın, her adımı dokümante edin ve zamanla kendi konteyner ekosisteminizi güvenle büyütün.
