Ev Sunucusunda Docker mı LXC mi VM mi: Hangi İş İçin Hangisi Daha Mantıklı?
Icindekiler
- İçindekiler
- Ev Sunucusunda Docker ile Başlangıç
- Topic Overview
- Why It Matters
- Core Concepts
- Örnek
- Practical Examples
- LXC Örneği – Nextcloud + Duplicity
- VM Örneği – Minecraft Sunucusu
- Common Mistakes
- Best Practices
- Örnek: Prometheus ile Kaynak İzleme
- Add Concrete Examples and Real-World Scenarios
- 1. Plex + Subsonic Docker Compose
- 2. Nextcloud + Duplicity LXC
- 3. Minecraft VM
- Decision Matrix
- Deployment Checklist
- Security Checklist
- FAQ
- Ev Sunucusunda Docker mı, LXC mi, yoksa VM mi daha mantıklı?
- Ev Sunucusunda Docker mı, LXC mi, yoksa VM mi kullanırken en yaygın hata nedir?
- Konkrete örnekler ve gerçek dünya senaryoları nasıl ele alınmalı?
- Ev sunucusunda konteynerleştirme ile sanallaştırma arasında seçimi etkileyen faktörler nelerdir?
- Hangi durumda LXC kullanmak, Docker ile VM arasında bir avantaj sağlar?
- Ev sunucusunda Docker, LXC ve VM için birden fazla ortamda yedekleme nasıl yapılır?
- Ev sunucusunda Docker konteynerlerini nasıl ölçeklendirebilirim?
- LXC konteynerinde kullanıcı bazlı kaynak sınırlaması nasıl yapılır?
- VM’de düşük gecikme ile ağ erişimi nasıl sağlanır?
- Sonuç
İçindekiler
- Ev Sunucusunda Docker ile Başlangıç
- Topic Overview
- Why It Matters
- Core Concepts
- Practical Examples
- Common Mistakes
- Best Practices
- Add Concrete Examples and Real-World Scenarios
- Decision Matrix
- Deployment Checklist
- Security Checklist
- FAQ
- Sonuç
Ev Sunucusunda Docker ile Başlangıç
bu rehber, basit bir medya sunucusu ya da kişisel veri yedekleme çözümü kurarken tercih edilen ilk adım olur. Bu ekosistem, uygulama paketlerini bağımsız konteynerler içinde taşır ve kaynak tüketimini minimumda tutar. Docker’ın hızlı başlangıcı, ev sunucusu yöneticilerine kısa sürede test ve dağıtım döngülerini tamamlamayı sağlar.
İlk kurulumda Docker Hub’dan güvenli bir image çekmek yeterlidir. Örneğin, Plex medya sunucusu için plexinc/pms-docker resmi imajı uygundur.
docker run -d \
--name plex \
-p 32400:32400 \
-v /media/plex:/data \
plexinc/pms-docker
Bu komut, Plex’i arka planda başlatır, 32400 portunu haritalar ve medya klasörünü bağlar. Bu basit örnek, konteynerleştirme’nin ev sunucusu için ne kadar erişilebilir olduğunu gösterir.
Topic Overview
Docker konteynerleri, Linux çekirdeği üzerinden namespaces ve cgroups kullanarak izole bir ortam sunar. Her bir konteyner, bağımsız bir kullanıcı alanı, dosya sistemi ve ağ stak’i içerir.
LXC ise OS‑level sanallaştırma sağlar. Her LXC konteyneri, ana sistemle aynı çekirdek üzerinde çalışır ancak kullanıcı, grup, PID ve ağ ad alanları izole edilir.
VM ise tam donanım sanallaştırma yapar. KVM (Kernel Virtual Machine) ile çalışan bir VM, kendi çekirdeğini, işletim sistemini ve sanal donanımını barındırır. Hypervisor, donanım kaynaklarını sanal makinelere tahsis eder.
Örnekler:
- Ubuntu 22.04 üzerinde çalışan Docker konteyneri – Plex, Nextcloud vb.
- Proxmox LXC konteyneri – Nextcloud + Duplicity.
- KVM‑tabanlı VM – Ubuntu + Minecraft sunucusu.
Why It Matters
Ev sunucusu yöneticileri için kaynak tüketimi kritik bir faktördür. Tek bir VM ile 100 GB RAM’i paylaşmak yerine, 10 GB RAM’e sahip 10 Docker konteyneri daha yüksek verimlilik sunar.
Güvenlik açıdan, VM tam izole bir ortam sağlar, ancak konteynerler sistem çekirdeğini paylaşır. Bu nedenle least privilege ilkesi ile çalışmak ve güvenli base image’ler seçmek gerekir.
Yönetim karmaşıklığı ve bakım maliyeti de farklılık gösterir. VM’ler snapshot, backup ve ölçeklenme için daha fazla yapılandırma gerektirirken, Docker konteynerleri hızlı güncellemeler ve otomatik dağıtım sağlar.
Eğer 1) yüksek performans, 2) düşük kaynak tüketimi, 3) hızlı dağıtım gerekiyorsa Docker; 1) maksimum izole ortam, 2) uzun vadeli stabilite, 3) donanım destekli uygulamalar için VM tercih edilir. LXC ise her iki dünya arasında bir denge sunar.
Core Concepts
| Konu | Docker | LXC | VM |
|---|---|---|---|
| İzolasyon Düzeyi | Namespaces (CPU, PID, Network, Mount) | Namespaces + cgroups | Tam donanım sanallaştırma |
| Kaynak Paylaşımı | Cgroups ile limit | Cgroups + namespaces | Hypervisor kontrolü |
| Ağ Yapılandırması | Bridge, macvlan, IPVLAN | Bridge, macvlan, IPVLAN | NAT / Bridged |
| Güvenlik Katmanları | Seccomp, AppArmor, SELinux | Seccomp, AppArmor | Tam izolasyon, firewall |
| Snapshot/Rollback | Docker commit / image | LXC snapshot | VM snapshot |
| Boot Süresi | Neredeyse anında | Neredeyse anında | 30‑60 saniye |
Örnek
Docker’da AppArmor profili eklemek için --security-opt apparmor:unconfined flag’i kullanılabilir. LXC’de seccomp filtreleriyle belirli syscalls engellenir. VM snapshot alırken qemu-img snapshot komutu ile anlık durum kaydedilir.
Practical Examples
| Senaryo | Teknoloji | Konteyner/VM Adı | Konfigürasyon Örneği |
|---|---|---|---|
| Medya Sunucusu (Plex + Subsonic) | Docker Compose | plex-subsonic |
docker-compose.yml (aşağı) |
| Kişisel Veri Yedekleme (Nextcloud + Duplicity) | LXC | nextcloud-dp |
/etc/pve/lxc/101.conf |
| Oyun Sunucusu (Minecraft) | VM | minecraft |
KVM VM + /etc/qemu/ |
# docker-compose.yml
version: '3.8'
services:
plex:
image: plexinc/pms-docker
container_name: plex
ports:
- "32400:32400"
volumes:
- /media/plex:/data
environment:
- PLEX_UID=1000
- PLEX_GID=1000
subsonic:
image: subsonic/subsonic
container_name: subsonic
ports:
- "4040:4040"
volumes:
- /media/subsonic:/var/opt/subsonic
Bu yapılandırma, hem Plex hem de Subsonic’u tek bir Docker Compose dosyasında çalıştırır.
LXC Örneği – Nextcloud + Duplicity
pct create 101 ubuntu-22.04-standard-v20240904.iso \
--cores 2 --memory 2048 --net0 name=eth0,bridge=vmbr0,firewall=1,ip=dhcp \
--rootfs local-lvm:10
pct set 101 -lxc.conf "lxc.cgroup2.devices.allow = c 1:* rwm"
pct start 101
VM Örneği – Minecraft Sunucusu
qm create 201 --name minecraft --memory 8192 --cores 4 \
--net0 virtio,bridge=vmbr0,firewall=1 \
--scsi0 local-lvm:vm-201-disk-0,format=qcow2 \
--ostype l26 --storage local-lvm --bootdisk scsi0
qm set 201 --sshkeys /root/.ssh/id_rsa.pub
qm start 201
Common Mistakes
| Hata | Nedeni | Çözüm |
|---|---|---|
| Yanlış image sürümü | Docker Hub’da eski tag kullanımı | Güncel latest veya stable tag’ini çekin |
| Root filesystem erişimi | LXC içinde /var/lib/lxc/… erişimi | lxc.mount.auto = proc:rw veya lxc.cgroup2.devices.allow ekleyin |
| Kapalı portlar | VM’in firewall’da kapalı | iptables -A INPUT -p tcp --dport 25565 -j ACCEPT |
| Kaynak sınırlama | Cgroups ayarlanmamış | --memory=512m --cpus=1 flag’lerini ekleyin |
| Eksik loglama | Syslog’e yönlendirme yok | docker logs -f yerine journald entegrasyonu ekleyin |
| Geri dönüş (rollback) eksikliği | Yeni image deploy sonrası sorun | docker tag veya VM snapshot’ları alın |
| Güvenlik güncellemeleri ihmal edilmesi | Base image’de eski paketler | docker pull --quiet ve apt-get upgrade |
Bu hatalar, ev sunucusunda sık karşılaşılan sorunlardır. Çözüm önerileri, yapılandırma dosyalarına eklenerek otomatikleştirilebilir.
Best Practices
| Alan | Öneri | Uygulama |
|---|---|---|
| Least Privilege | Konteynerleri --user flag’i ile uygulama kullanıcılarıyla çalıştırın. |
docker run --user 1000:1000 |
| Rollback | Her yeni image için docker tag veya VM snapshot’ları alın. |
docker tag plex:v2 plex:v1 |
| Patch Yönetimi | Base image’leri düzenli olarak güncelleyin. | docker pull --quiet plexinc/pms-docker && docker-compose up -d |
| Otomatik Log Toplama | ELK, Loki veya Promtail ile logları merkezi sunucuya gönderin. | docker run -d --name loki loki/loki |
| Yedekleme | Disk snapshot’ları, veri kopyalama script’leri ve şifreli arşivleme kombinasyonu kullanın. | rsync -avz --delete /data /backup |
| Ağ İzolasyonu | Docker’ın --net=none veya LXC’in lxc.network.type ile izole ağlar kurun. |
--net=none |
| İzleme | Prometheus + cAdvisor ile konteyner kaynak kullanımını ölçün. | docker run -d -p 9090:9090 --name=cadvisor google/cadvisor |
| Güvenlik Denetimi | docker scan ve LXC’in lxc-checkconfig ile sistemini test edin. |
docker scan plexinc/pms-docker |
| Konfigürasyon Yönetimi | Ansible veya Terraform ile altyapıyı kodlaştırın. | ansible-playbook deploy.yml |
Örnek: Prometheus ile Kaynak İzleme
# prometheus.yml
scrape_configs:
- job_name: 'docker'
static_configs:
- targets: ['localhost:9090']
docker run -d \
-p 9090:9090 \
--name prometheus \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
Add Concrete Examples and Real-World Scenarios
1. Plex + Subsonic Docker Compose
- Docker Compose dosyasını
/srv/docker/plex-subsonic/docker-compose.ymliçine koyun. docker compose up -dile başlatın.- 10 GB RAM, 1 CPU ile 100 TB medya koleksiyonunu yönetebilirsiniz.
- Log toplama için
--log-driver=syslogekleyin.
docker compose up -d --build
2. Nextcloud + Duplicity LXC
- LXC’yi Proxmox’da
LXC templateile oluşturun. /etc/pve/lxc/101.confiçindelxc.cgroup2.devices.allow = c 1:* rwmayarı ile/dev/fuseerişimi verin.duplicityscript’ini cron’a ekleyerek haftalık yedekleme yapın.
*/30 * * * * /usr/bin/duplicity --full-if-older-than 1M /var/www/nextcloud /backup/nextcloud
3. Minecraft VM
- KVM VM’yi 4 CPU, 8 GB RAM, 100 GB diskle kurun.
minecraft_server.jardosyasını/srv/minecraftiçinde çalıştırın.systemdservisi ile otomatik yeniden başlatma ve log toplama yapılandırın.
# /etc/systemd/system/minecraft.service
[Unit]
Description=Minecraft Server
After=network.target
[Service]
User=minecraft
WorkingDirectory=/srv/minecraft
ExecStart=/usr/bin/java -Xms2G -Xmx4G -jar server.jar nogui
Restart=on-failure
[Install]
WantedBy=multi-user.target
Bu adımlar, ev sunucusu yöneticisinin gerçek dünya senaryolarında hangi teknolojiyi ne zaman kullanacağını netleştirir.
Decision Matrix
| Kriter | Docker | LXC | VM |
|---|---|---|---|
| Performans | Yüksek | Orta | Düşük |
| Güvenlik | Orta | Yüksek | Çok Yüksek |
| Bakım Kolaylığı | Kolay | Orta | Zor |
| Maliyet | Düşük | Orta | Yüksek |
| Esneklik | Yüksek | Orta | Düşük |
| İzleme | Kolay | Orta | Zor |
| Yedekleme | Basit | Orta | Kompleks |
Her bir kriteri kendi ortamınıza göre 1‑5 arası puanlayarak en uygun çözümü seçin. Örneğin, “Güvenlik” puanı 5 ise VM tercih edin; “Performans” puanı 5 ise Docker tercih edin.
Deployment Checklist
- ☐ Güvenli registry’den image çekildi
- ☐ Resource limits (memory, CPU) tanımlandı
- ☐ Health check tanımlandı
- ☐ Ağ izolasyonu yapılandırıldı
- ☐ Yedekleme stratejisi belirlendi
- ☐ Loglama ve monitoring yapılandırıldı
Security Checklist
- ☐ Least privilege kullanıcı ayarlandı
- ☐ Secure base image (ör.
alpine) kullanıldı - ☐ Logging ve monitoring yapılandırıldı
- ☐ Backup ve snapshot stratejisi belirlendi
- ☐ Security audit raporları oluşturuldu
- ☐ Düzenli olarak image güncellemeleri yapıldı
- ☐ Firewall ve iptables kuralları gözden geçirildi
- ☐ Giriş denetimleri (fail2ban) eklendi
FAQ
Ev Sunucusunda Docker mı, LXC mi, yoksa VM mi daha mantıklı?
Docker, hafif uygulama dağıtımı için ideal. LXC, sistem düzeyinde izole ortam ve daha az kaynak tüketimi sunar. VM ise tam izolasyon ve donanım destekli uygulamalar için uygundur. Hangi teknolojinin daha mantıklı olduğu, kullanım senaryonuza ve kaynak kısıtlamanıza bağlıdır.
Ev Sunucusunda Docker mı, LXC mi, yoksa VM mi kullanırken en yaygın hata nedir?
En yaygın hata, root kullanıcıyla konteyner çalıştırmak ve izole alanları yanlış yapılandırmaktır. Ayrıca, image güncellemelerini ihmal etmek de güvenlik açıklarına yol açar. Bu hatalar,
docker run --uservelxc.cgroup2.devices.allowgibi ayarlarla önlenebilir.
Konkrete örnekler ve gerçek dünya senaryoları nasıl ele alınmalı?
Gerçek senaryolarda, her teknoloji için minimum yapılandırma dosyaları ve otomatik yedekleme script’leri hazırlanmalıdır. Örneğin, Plex + Subsonic için Docker Compose, Nextcloud + Duplicity için LXC, Minecraft için VM kullanarak, hem performans hem de güvenlik dengesi sağlanabilir.
Ev sunucusunda konteynerleştirme ile sanallaştırma arasında seçimi etkileyen faktörler nelerdir?
Faktörler arasında CPU/Memory tüketimi, uygulama bağımlılıkları, güncelleme sıklığı, güvenlik gereksinimleri ve yönetim karmaşıklığı yer alır. Docker, hızlı dağıtım ve düşük kaynak tüketimi sunarken, VM, tam izolasyon ve donanım desteği sağlar. LXC ise bu iki uç arasında bir denge sunar.
Hangi durumda LXC kullanmak, Docker ile VM arasında bir avantaj sağlar?
LXC, sistem bileşenlerini (örn. PostgreSQL) ayrı bir konteynerde çalıştırırken, uygulama konteynerlerinden izole edilmesini istediğinizde uygundur. Docker konteynerleri içinde aynı OS çekirdeğini paylaşır; LXC ise aynı çekirdekte sanal bir ortam yaratır, bu da CPU/Memory kullanımını daha verimli hale getirir. Ayrıca LXC, VM’lerin tam donanım izole edilme seviyesini geçmez ancak güvenlik için ek cgroup ve seccomp filtreleri sunar.
Ev sunucusunda Docker, LXC ve VM için birden fazla ortamda yedekleme nasıl yapılır?
- Docker:
docker exportile konteyner dosyasını çıkarıp,docker saveile image’i kaydedin. Ardındanrsyncile bu dosyaları uzak sunucuya aktarın.- LXC:
pct snapshotkomutuyla snapshot alın, sonrapct dumpile dosyaya aktarın.- VM:
qemu-img snapshotile snapshot alın,scpile uzak sunucuya kopyalayın.- Ortak:
borgbackupgibi arşivleme aracı ile dosya sistemini şifreli biçimde yedekleyin.
Ev sunucusunda Docker konteynerlerini nasıl ölçeklendirebilirim?
Docker Compose yerine Docker Swarm veya Kubernetes kullanabilirsiniz. Basit ölçeklendirme için
docker service scale web=3gibi komutlarla pod sayısını artırabilirsiniz. Ancak ev ortamında tek bir host varsa, CPU/Memory sınırlamalarıyla çok sayıda konteyner çalıştırmak riskli olabilir; bu yüzden her konteynerin kaynak limiti belirlenmeli.
LXC konteynerinde kullanıcı bazlı kaynak sınırlaması nasıl yapılır?
lxc.cgroup2.cpu.maxvelxc.cgroup2.memory.maxsatırlarını/etc/pve/lxc/101.confiçinde ekleyin. Örneğin:
pct set 101 -lxc.conf "lxc.cgroup2.cpu.max = 50000 100000"
pct set 101 -lxc.conf "lxc.cgroup2.memory.max = 512M"
Bu, konteynerin CPU zamanını %50 ile sınırlar ve 512 MB RAM kullanmasını sağlar.
VM’de düşük gecikme ile ağ erişimi nasıl sağlanır?
VM’yi Bridged ağ tipine (ör.
bridge=vmbr0) ayarlayın. Ayrıcaqemu-guest-agentile ağ konfigürasyonunu dinamik olarak güncelleyin. Yüksek performans için VM’dee1000yerinevirtio-netsürücüsü kullanın.
Sonuç
bu rehber, LXC ve VM arasında seçim yaparken, kaynak tüketimi, izolasyon düzeyi, yönetim kolaylığı ve güvenlik başlıca kriterlerdir. Docker, hafif ve hızlı dağıtım için tercih edilirken, VM tam izolasyon ve donanım desteği sunar. LXC ise bu iki uç arasında bir denge sağlar.
bu rehber, LXC ve VM karşılaştırması ile detaylı analiz, ve Ev Sunucusunda Docker, LXC ve VM için sorun giderme rehberi ile karşılaşılan hataları nasıl çözeceğinizi öğrenebilirsiniz.
Bütün bu bilgiler, ev sunucusu yöneticilerinin risk-first yaklaşımını benimseyerek, güvenli, sürdürülebilir ve verimli bir ortam kurmalarını sağlar.
Ek Kaynaklar:
– Reddit topluluğunda tartışılan örnekler
– Proxmox forumundaki inceleme
– Medium blog yazısındaki detaylar
– AWS karşılaştırma rehberi



