Blog’a Dön

Docker Nedir? Ubuntu Sunucuya Docker Kurulumu

Docker nedir, ne işe yarar? Ubuntu, Debian ve AlmaLinux sunucuya Docker kurulumu, temel komutlar, Docker Compose ile uygulama yayınlama ve güvenlik duvarı.

Nodesty Ekibi6 dk okumaSunucular
Koyu Nodesty arka planında Docker yazısı ile Containers, Images ve Compose ifadeleri

Docker, uygulamaları ihtiyaç duydukları her şeyle birlikte konteyner adı verilen yalıtılmış paketlerde çalıştıran açık kaynaklı bir platformdur. Bir uygulamanın kütüphaneleri, çalışma ortamı ve ayarları tek bir imajda toplanır; bu imaj Docker kurulu her sunucuda aynı şekilde çalışır. "Benim bilgisayarımda çalışıyordu" sorununu ortadan kaldırır ve bir sunucuda onlarca servisi birbirine karışmadan çalıştırmanızı sağlar.

Bu rehberde Docker'ın ne olduğunu, sanal sunucudan farkını, Ubuntu, Debian ve AlmaLinux sunucuya Docker kurulumunu, temel komutları ve Docker Compose ile bir uygulamayı nasıl yayınlayacağınızı anlatıyoruz.

Docker nedir, ne işe yarar?

Docker'ı anlamak için üç kavram yeterlidir:

  • İmaj (image): Bir uygulamanın çalışması için gereken her şeyi içeren, salt okunur şablon. nginx, mysql ya da node gibi binlerce hazır imaj Docker Hub'da bulunur.
  • Konteyner (container): Bir imajın çalışan kopyası. Aynı imajdan istediğiniz kadar konteyner başlatabilirsiniz.
  • Volume: Konteyner silinse bile kalan kalıcı veri alanı. Veritabanı dosyaları ve yüklenen içerikler burada tutulur.

Docker en çok şu durumlarda işe yarar:

  • Kolay kurulum: Bir veritabanını, izleme aracını ya da web uygulamasını tek komutla ayağa kaldırırsınız.
  • Çakışmasız çalışma: Farklı Node.js, PHP ya da Python sürümü isteyen uygulamalar aynı sunucuda yan yana çalışır.
  • Taşınabilirlik: Bir uygulamayı yeni sunucuya taşımak için yalnızca yapılandırma dosyalarını ve verileri kopyalarsınız.
  • Kolay güncelleme ve geri alma: Yeni sürümün imajını çekip konteyneri yeniden oluşturursunuz; sorun çıkarsa eski sürüme dönmek bir satırlık değişikliktir.

Docker ile sanal sunucu arasındaki fark

ÖzellikSanal sunucu (VPS/VDS)Docker konteyneri
İşletim sistemiHer biri kendi çekirdeğiyle tam işletim sistemiSunucunun çekirdeğini paylaşır
Açılış süresiDakikalarSaniyeler
Kaynak yüküHer biri ayrı bir işletim sistemi çalıştırırÇok hafif, yalnızca uygulama
YalıtımDonanım düzeyinde sanallaştırmaSüreç düzeyinde yalıtım
Ne için kullanılırSunucunun kendisiSunucunun içindeki uygulamalar

İkisi birbirinin rakibi değil, tamamlayıcısıdır: Tipik bir kurulumda bir VDS kiralar, içine Docker kurar ve uygulamalarınızı konteynerler olarak çalıştırırsınız.

Ubuntu ve Debian'a Docker kurulumu

Dağıtımın kendi deposundaki docker.io paketi çoğu zaman eski kalır. Docker'ın resmî deposunu kullanmanızı öneririz. Sunucunuza SSH ile bağlandıktan sonra şu komutları sırayla çalıştırın.

  1. Gerekli paketleri kurun ve Docker'ın imza anahtarını ekleyin:
    sudo apt update
    sudo apt install 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
    
  2. Docker deposunu ekleyin:
    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
    
  3. Docker'ı ve Compose eklentisini kurun:
    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
  4. Kurulumu test edin:
    sudo docker run hello-world
    

    "Hello from Docker!" mesajını görüyorsanız kurulum tamamdır.

Debian kullanıyorsanız aynı adımları uygulayın; yalnızca 1. ve 2. adımdaki adreslerde ubuntu yerine debian yazın.

AlmaLinux ve Rocky Linux

RHEL tabanlı dağıtımlarda Docker'ın RHEL deposunu kullanın:

sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker

Docker'ı sudo olmadan kullanmak

Her komutun başına sudo yazmak istemiyorsanız kullanıcınızı docker grubuna ekleyin ve oturumu kapatıp yeniden açın:

sudo usermod -aG docker $USER

Şunu bilmeniz önemli: docker grubundaki bir kullanıcı pratikte root yetkisine sahiptir. Bu gruba yalnızca güvendiğiniz kullanıcıları ekleyin.

Temel Docker komutları

KomutNe yapar?
docker psÇalışan konteynerleri listeler (-a ile hepsini)
docker imagesİndirilmiş imajları listeler
docker pull nginxBir imajı indirir
docker logs -f konteynerKonteynerin çıktısını canlı izler
docker exec -it konteyner bashÇalışan konteynerin içinde komut satırı açar
docker stop konteynerKonteyneri durdurur
docker rm konteynerDurdurulmuş konteyneri siler
docker system pruneKullanılmayan konteyner, ağ ve imajları temizler

Tek bir konteyneri docker run ile başlatabilirsiniz:

docker run -d --name web -p 8080:80 --restart unless-stopped nginx

-d konteyneri arka planda çalıştırır, -p 8080:80 sunucunun 8080 portunu konteynerin 80 portuna bağlar, --restart unless-stopped ise sunucu yeniden başladığında konteynerin de otomatik açılmasını sağlar.

Docker Compose ile uygulama yayınlama

Birden fazla ayarı ya da birden fazla konteyneri uzun docker run komutlarıyla yönetmek zordur. Docker Compose, bütün yapılandırmayı tek bir compose.yaml dosyasında toplar. Örnek olarak sitelerinizin ve sunucularınızın çalışıp çalışmadığını izleyen açık kaynaklı Uptime Kuma'yı kuralım.

Bir klasör oluşturup içine compose.yaml dosyasını yazın:

services:
    uptime-kuma:
        image: louislam/uptime-kuma:1
        restart: unless-stopped
        ports:
            - '3001:3001'
        volumes:
            - ./data:/app/data

Ardından aynı klasörde çalıştırın:

docker compose up -d

Uygulama http://sunucu-ip:3001 adresinde açılır. Veriler klasördeki data dizininde tutulduğu için konteyneri silseniz de kaybolmaz. Sık kullanacağınız Compose komutları:

  • docker compose ps: Servislerin durumunu gösterir.
  • docker compose logs -f: Tüm servislerin günlüklerini izler.
  • docker compose pull && docker compose up -d: İmajları günceller ve konteynerleri yeni sürümle yeniden oluşturur.
  • docker compose down: Servisleri durdurur ve konteynerleri siler; volume'lar ve bağlı klasörler yerinde kalır.

Gerçek bir sitede uygulamayı doğrudan dışarıya açmak yerine önüne Nginx ya da Caddy gibi bir ters vekil sunucu (reverse proxy) koyup alan adınız ve SSL sertifikası ile yayınlamanızı öneririz.

Docker ve güvenlik duvarı

Docker kullanıcılarını en çok şaşırtan konu budur: Docker'ın yayınladığı portlar ufw kurallarını atlar. Docker, -p ya da ports: ile açtığınız portlar için iptables kurallarını kendisi ekler ve bu kurallar ufw'den önce işlenir. Yani ufw'de kapalı görünen bir veritabanı portu internete açık olabilir.

Bunu önlemek için yalnızca sunucunun içinden erişilmesi gereken portları yerel adrese bağlayın:

ports:
    - '127.0.0.1:3306:3306'

Daha da iyisi, veritabanı gibi servislerin portunu hiç yayınlamayın. Aynı Compose dosyasındaki servisler birbirine servis adlarıyla (örneğin db:3306) ulaşabilir; dışarıya yalnızca gerçekten herkese açık olması gereken portu açın. Portların ve güvenlik duvarının nasıl çalıştığını Port nedir? yazımızda ayrıntılı anlattık.

Docker'ı güncel ve sağlıklı tutmak

  • İmaj sürümlerini sabitleyin. latest yerine postgres:16 gibi bir ana sürüm kullanın; böylece bir güncelleme beklenmedik bir büyük sürüm atlaması yapmaz.
  • Düzenli güncelleyin. Docker Engine, sistem güncellemeleriyle apt upgrade sırasında güncellenir. İmajları da docker compose pull ile düzenli yenileyin.
  • Diski izleyin. Eski imajlar ve günlükler zamanla yer kaplar. docker system df ile kullanımı görebilir, docker system prune ile temizleyebilirsiniz.
  • Volume'ları yedekleyin. Sunucu yedekleri işinizi görür, ama veritabanlarının ayrıca düzenli bir dökümünü (dump) almak en güvenli yoldur.

Docker için Nodesty sunucuları

Docker'ın tam potansiyeli için root erişimli ve KVM sanallaştırmalı bir sunucuya ihtiyacınız vardır. Nodesty AMD Ryzen 9 9950X VDS paketleri yüksek tek çekirdek hızıyla web uygulamaları ve oyun sunucuları için, AMD EPYC 7763 VDS paketleri ise bol RAM'iyle çok sayıda konteyner ve veritabanı için uygundur. Her iki pakette de NVMe disk, nShield DDoS koruması ve 7 gün saklanan ücretsiz günlük yedekleme bulunur; Ubuntu, Debian ya da AlmaLinux'u seçip Docker'ı dakikalar içinde kurabilirsiniz.

Sıkça Sorulan Sorular

Docker ile sanal sunucu aynı şey mi?

Hayır. Sanal sunucu (VPS/VDS) kendi çekirdeği olan tam bir işletim sistemi çalıştırır. Docker konteynerleri ise aynı sunucunun çekirdeğini paylaşan, birbirinden yalıtılmış süreçlerdir. Docker genellikle bir VPS ya da fiziksel sunucunun içinde çalışır.

Docker ücretli mi?

Sunucuda kullandığınız Docker Engine açık kaynaklı ve ücretsizdir. Ücretlendirme yalnızca masaüstü bilgisayarlar için Docker Desktop'ı ticari olarak kullanan büyük şirketleri ve Docker Hub'ın bazı ücretli planlarını kapsar.

Docker için kaç GB RAM gerekir?

Docker Engine'in kendisi birkaç yüz MB ile çalışır. Asıl ihtiyacı konteynerlerin içindeki uygulamalar belirler. Birkaç küçük web servisi ve bir veritabanı için 2–4 GB, çok sayıda servis ya da büyük veritabanları için 8 GB ve üzeri iyi bir başlangıçtır.

Docker Windows sunucuda çalışır mı?

Linux konteynerleri en sorunsuz Linux sunucularda çalışır ve Docker imajlarının büyük çoğunluğu Linux içindir. Windows Server'da Windows konteynerleri çalıştırmak mümkündür ama sunucuda Docker kullanacaksanız Ubuntu ya da Debian gibi bir Linux dağıtımı seçmenizi öneririz.

Konteyner silinince verilerim kaybolur mu?

Konteynerin içine yazılan veriler, konteyner silindiğinde kaybolur. Kalıcı olması gereken veriler için volume ya da sunucudaki bir klasörü bağlayan bind mount kullanın. Bu şekilde imajı güncellediğinizde ya da konteyneri yeniden oluşturduğunuzda veriler yerinde kalır.

Docker ile açtığım port neden ufw'ye rağmen erişilebilir?

Docker, yayınladığı portlar için iptables kurallarını kendisi ekler ve bu kurallar ufw kurallarından önce işlenir. Bu yüzden ufw'de kapalı görünen bir port Docker üzerinden dışarıya açık olabilir. Yalnızca sunucunun içinden erişilmesi gereken portları 127.0.0.1 adresine bağlayın.

Nodesty

Yazar hakkında

Nodesty Ekibi · Altyapı ve Destek

Nodesty ekibi sunucularımızı, ağımızı ve DDoS korumamızı her gün işletir ve müşteri destek taleplerini 7/24 yanıtlar. Bu rehberler o deneyimden yazılır.

İlgili yazılar

Sunucunuzu şimdi başlatın.

Nodesty'nin üstün altyapısı ile projelerinizi özgürce inşa edin ve sınır tanımadan ölçeklendirin.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································