Ubuntu 24.04'te Docker Kurulumu ve İlk Konteyner
Docker'ı Ubuntu 24.04 bir VPS'e resmî depodan kurun, ilk konteynerinizi çalıştırın ve Docker Compose ile kalıcı bir servis ayağa kaldırın. Güvenlik duvarı tuzağını ve RAM ipuçlarını da anlatıyoruz.
Bir uygulamayı sunucuya kurarken en çok vakit kaybettiren şey bağımlılıklardır: yanlış PHP sürümü, eksik bir kütüphane, başka bir projeyle çakışan bir paket. Docker bu sorunu, uygulamayı ihtiyaç duyduğu her şeyle birlikte bir konteyner içinde çalıştırarak çözer. Bu rehberde Ubuntu 24.04 çalışan bir VPS'e Docker kurulumu yapacak, ilk konteynerinizi çalıştıracak ve Docker Compose ile yeniden başlatmalara dayanıklı bir servis kuracağız. Sonunda n8n, Uptime Kuma veya kendi uygulamanız gibi projeleri tek komutla ayağa kaldırabilecek hâle geleceksiniz.
Docker nedir, sanal makineden farkı ne?
VPS'iniz zaten bir sanal makinedir: kendi çekirdeği ve işletim sistemi vardır. Docker konteynerleri ise sunucunuzun çekirdeğini paylaşan, birbirinden yalıtılmış süreçlerdir. Bu yüzden saniyeler içinde başlar ve az kaynak tüketirler.
Üç kavramı bilmeniz yeterli:
- İmaj (image): Uygulamanın ve bağımlılıklarının paketlenmiş, salt okunur hâli (ör.
nginx,postgres). - Konteyner (container): Bir imajın çalışan örneği.
- Volume: Konteyner silinse bile verinin kalıcı olarak saklandığı alan.
Başlamadan önce
- Ubuntu 24.04 kurulu bir VPS ve sudo yetkisi olan bir kullanıcı.
- Komut satırında temel gezinme bilgisi. Yeniyseniz temel Linux komutları yazımız iyi bir başlangıçtır.
Ubuntu depolarında docker.io adında bir paket de vardır, ancak güncel sürüm ve Compose eklentisi için Docker'ın resmî apt deposunu kullanacağız.
1. Çakışan eski paketleri kaldırın
Daha önce farklı bir yöntemle Docker kurduysanız çakışma olmaması için eski paketleri kaldırın. Hiçbiri kurulu değilse apt bunu söyler ve devam edersiniz:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove -y $pkg; done
2. Docker'ın resmî deposunu ekleyin
sudo apt-get update
sudo apt-get 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 "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
Son komut sırasında download.docker.com satırlarını görmelisiniz. Ubuntu 24.04'te kod adı noble olarak eklenir.
3. Docker Engine ve Compose eklentisini kurun
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Kurulum servisi otomatik başlatır ve açılışta çalışacak şekilde etkinleştirir. Kontrol edelim:
sudo systemctl status docker --no-pager
docker --version
docker compose version
Docker Compose kurulumu için ayrıca bir şey indirmenize gerek yok; docker-compose-plugin paketi docker compose (boşluklu, v2) komutunu getirir. Eski docker-compose (tireli) aracı artık kullanılmıyor.
4. İlk test: hello-world
sudo docker run hello-world
Docker imajı Docker Hub'dan indirir, bir konteyner başlatır ve "Hello from Docker!" mesajını yazdırır. Bu mesajı görüyorsanız kurulum tamamdır.
5. Docker'ı sudo olmadan kullanmak
Her komutun başına sudo yazmak istemiyorsanız kullanıcınızı docker grubuna ekleyin:
sudo usermod -aG docker $USER
newgrp docker
docker ps
newgrp yerine oturumu kapatıp yeniden açmak da yeterlidir.
Güvenlik notu:
dockergrubundaki bir kullanıcı pratikte root'a eşdeğer yetkiye sahiptir; bir konteynere sunucunun kök dizinini bağlayıp her dosyayı değiştirebilir. Bu gruba yalnızca güvendiğiniz kullanıcıları ekleyin.
6. İlk gerçek konteyner: Nginx
Bir web sunucusu çalıştırıp 8080 portundan yayınlayalım:
docker run -d --name web -p 8080:80 nginx:stable
-d: Arka planda çalıştır.--name web: Konteynere akılda kalır bir ad ver.-p 8080:80: Sunucunun 8080 portunu konteynerin 80 portuna bağla.
Tarayıcıda http://SUNUCU_IP:8080 adresini açtığınızda Nginx karşılama sayfasını görürsünüz. Günlük işler için en sık kullanacağınız komutlar:
docker ps # çalışan konteynerler
docker ps -a # durmuş olanlar dahil hepsi
docker logs -f web # canlı günlük (Ctrl+C ile çık)
docker exec -it web sh # konteynerin içine gir
docker stop web # durdur
docker rm web # sil
7. Docker Compose ile kalıcı servis
Uzun docker run komutlarını ezberlemek yerine servisi bir dosyada tanımlamak çok daha düzenlidir. Örnek olarak sunucularınızı ve sitelerinizi izleyen Uptime Kuma'yı kuralım:
mkdir -p ~/uptime-kuma && cd ~/uptime-kuma
nano compose.yaml
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
volumes:
- kuma-data:/app/data
volumes:
kuma-data:
docker compose up -d
docker compose ps
docker compose logs -f
Burada üç önemli ayar var:
restart: unless-stopped: Konteyner çökerse ya da sunucu yeniden başlarsa otomatik ayağa kalkar; siz elle durdurmadıkça çalışır. Diğer seçeneklerno,alwaysveon-failure'dır.volumes: Verilerkuma-dataadlı volume'da tutulur. İmajı güncelleyip konteyneri yeniden oluştursanız bile veriler kaybolmaz.127.0.0.1:3001:3001: Port yalnızca sunucunun kendisine açılır. Dışarıdan erişimi bir ters vekil (reverse proxy) üzerinden, HTTPS ile vereceğiz. Hızlı bir deneme için geçici olarak"3001:3001"yazabilirsiniz.
Güncellemek için:
docker compose pull
docker compose up -d
Önemli uyarı: Docker portları UFW'yi atlar
Bu, yeni başlayanların en sık düştüğü tuzaktır. Docker, -p 8080:80 gibi yayınlanan portlar için kendi iptables kurallarını yazar ve bu kurallar UFW kurallarından önce işlenir. Yani ufw deny 8080 yazsanız bile port internete açık kalır.
Çözüm basit:
- Bir servisi ters vekil (Nginx, Caddy) arkasında çalıştıracaksanız portu
127.0.0.1:önekiyle yayınlayın; yalnızca sunucunun içinden erişilebilir olur. - Veritabanı (PostgreSQL, MySQL, Redis) konteynerlerinin portlarını hiç yayınlamayın; aynı Compose dosyasındaki servisler birbirine servis adıyla zaten ulaşabilir.
- Hangi portların açık olduğunu
ss -tulpnvedocker psile düzenli kontrol edin.
Disk temizliği
İmajlar ve durmuş konteynerler zamanla diskte yer kaplar, özellikle küçük disklerde:
docker system df # ne kadar yer kaplıyor?
docker system prune # durmuş konteyner, kullanılmayan ağ ve sarkık imajları sil
docker system prune -a kullanılmayan tüm imajları siler; bir sonraki başlatmada yeniden indirilir. --volumes bayrağını eklemeden önce iki kez düşünün: volume'lardaki veriler geri gelmez.
Düşük RAM'li VPS'te Docker
Docker'ın kendisi hafiftir, ancak çalıştırdığınız konteynerler RAM tüketir. 512 MB veya 1 GB RAM'li bir VPS'te tek bir Nginx ya da küçük bir bot rahat çalışır; veritabanı + uygulama + izleme gibi birkaç servisi bir arada çalıştıracaksanız sıkışabilirsiniz. Öneriler:
- Bir swap alanı ekleyin; ani bellek sıçramalarında konteynerlerin "OOM" ile öldürülmesini önler. Adımlar için Ubuntu VPS'e swap ekleme rehberimize bakın.
docker statsile hangi konteynerin ne kadar bellek kullandığını izleyin.- Compose'da
mem_limit: 256mgibi sınırlar koyarak tek bir servisin tüm RAM'i yemesini engelleyin. - Mümkünse
alpinetabanlı daha küçük imajları tercih edin.
Sık Sorulan Sorular
docker.io paketi ile docker-ce arasındaki fark ne?
docker.io Ubuntu'nun kendi deposundan gelir ve genellikle daha eski bir sürümdür. docker-ce Docker'ın resmî deposundan gelir, daha sık güncellenir ve docker compose eklentisini de aynı depodan sağlar. İkisini aynı anda kurmayın.
Docker için ne kadar kaynak gerekir?
Docker Engine'in kendisi az kaynak harcar; asıl ihtiyaç çalıştıracağınız uygulamalara bağlıdır. Tek bir web servisi ya da bot için küçük bir VPS yeterlidir. n8n gibi birden fazla konteynerle çalışan araçlar veya veritabanları için 2 GB ve üzeri RAM daha rahat bir deneyim sağlar.
Docker ile n8n kurabilir miyim?
Evet, n8n'in önerilen kurulum yollarından biri Docker'dır. Adım adım anlatım için n8n kurulumu yazımıza göz atın.
Docker için hazır VPS
VPS paketlerimiz aylık $0.89'dan başlar ve Ubuntu 24.04 ile ödeme onaylandıktan sonra birkaç dakika içinde otomatik kurulur; root erişiminizle bu rehberdeki komutları hemen uygulayabilirsiniz. Birden fazla konteyneri sürekli çalıştıracaksanız, ayrılmış işlemci ve garantili RAM sunan VDS paketlerimiz (aylık $1.69'dan başlayan fiyatlarla) daha öngörülebilir performans verir. Tüm paketlerde limitsiz trafik vardır; sunucularımız İstanbul'dadır.
Bunları da okuyun
512 MB veya 1 GB RAM'li bir VPS'te uygulamalarınız kapanıyorsa swap alanı ilk yardımdır. Ubuntu 24.04'te swap...
Bilgisayarınız kapanınca botunuz da susmasın. Python Telegram botunu Ubuntu 24.04 VPS'te systemd ile 7/24 çalı...
Metin2 sunucusu kuracaksınız ama VPS mi VDS mi alacağınızdan emin değil misiniz? Kaynak paylaşımı, RAM, disk,...