Docker İçin Neden KVM Tabanlı VDS?
Docker, Linux çekirdeğinin namespace ve cgroup özelliklerine ihtiyaç duyar. OpenVZ veya LXC gibi çekirdeği paylaşan sanallaştırmalarda bu özellikler kısıtlı olabilir. KVM tabanlı bir VDS'te ise kendi çekirdeğinize sahip olduğunuz için Docker, overlay ağları ve VPN arayüzleri sınırlama olmadan çalışır.
Docker Engine Kurulumu (Resmi Depo)
Dağıtımın kendi deposundaki sürümler genellikle eskidir. Docker'ın resmi APT deposunu ekleyerek güncel sürümü kurun:
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") 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-buildx-plugin docker-compose-plugin
sudo docker run hello-worldhello-world konteyneri mesajını görüyorsanız kurulum tamamdır. Komutları sudo olmadan çalıştırmak için kullanıcınızı docker grubuna ekleyebilirsiniz; bu grubun root'a eşdeğer yetki verdiğini unutmayın.
Portainer CE ile Web Arayüzünden Yönetim
Portainer, konteynerleri, imajları ve Compose yığınlarını tarayıcıdan yönetmenizi sağlar:
sudo docker volume create portainer_data
sudo docker run -d -p 9443:9443 --name portainer --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:ltsArdından https://SUNUCU_IP_ADRESI:9443 adresini açıp yönetici hesabını oluşturun. Güvenlik nedeniyle Portainer ilk kurulumda yönetici hesabının birkaç dakika içinde oluşturulmasını bekler; süre dolarsa konteyneri yeniden başlatmanız yeterlidir.
Docker Compose ile İlk Servisinizi Yayınlayın
Örnek olarak bir durum izleme aracı olan Uptime Kuma'yı yalnızca sunucunun kendisinden erişilebilecek şekilde başlatalım:
# ~/uptime-kuma/compose.yaml
services:
uptime-kuma:
image: louislam/uptime-kuma:1
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
volumes:
- ./data:/app/datacd ~/uptime-kuma && sudo docker compose up -dServisi dışarıya açmak için önüne Nginx, Caddy veya Traefik gibi bir ters vekil (reverse proxy) koyup Let's Encrypt ile ücretsiz SSL alabilirsiniz.
Önemli: Docker Portları UFW'yi Atlayabilir
Docker, -p 8080:80 gibi yayınlanan portlar için kendi iptables kurallarını ekler. Bu kurallar UFW'den önce işlendiği için, UFW'de kapalı görünen bir port internetten erişilebilir kalabilir.
- Yalnızca sunucu içinden erişilecek servisleri
127.0.0.1:PORT:PORTbiçiminde yayınlayın - Dışarıya açık servisleri tek bir ters vekil üzerinden 80/443 portlarına toplayın
- Gelişmiş kısıtlamalar için iptables DOCKER-USER zincirine kural ekleyin
Sunucu tarafındaki diğer güvenlik adımları için SSH, UFW ve Fail2ban rehberimize göz atın.
Kaynak Planlaması
Docker Engine'in kendisi birkaç yüz MB bellek kullanır; asıl tüketim konteynerlerinizden gelir. Birkaç hafif servis için 2 GB RAM yeterlidir, veritabanı ve birden fazla uygulama çalıştıracaksanız 4-8 GB RAM'li bir sanal sunucu paketi daha rahat bir başlangıç sağlar.