Docker Nedir ve Nasıl Kurulur
Bu yazıda Docker’ın ne olduğunu, mimarisini ve image/container mantığını anlatıp, ardından RHEL 9 / Rocky Linux 9 / AlmaLinux 9 üzerine Docker Engine kurulumunu ve ilk container’ımızı çalıştırmayı adım adım göreceğiz.
Docker Nedir?
Docker, uygulamaları bağımlılıklarıyla birlikte paketleyip birbirinden izole container’lar içinde çalıştırmamızı sağlayan bir platformdur. İlk sürümleri Linux Container (LXC) altyapısını kullanıyordu; bugün ise Docker Engine, container’ları containerd ve runc üzerinden çalıştırır. Container’lar Linux çekirdeğinin namespace ve cgroup özelliklerini kullanarak birbirinden yalıtılır.
Hafif bilgi: Docker işletim sistemini sanallaştırır, hypervisor ise donanımı. Bu yüzden container’lar sanal makinelere göre çok daha hızlı açılır ve çok daha az kaynak tüketir.
Docker Mimarisi

- Docker CLI: Kullanıcının
docker run,docker buildgibi komutları yazdığı istemcidir. - REST API: CLI ile daemon arasındaki arayüzdür. CLI’nin yaptığı her işlem aslında bu API’ye yapılan bir istektir.
- Docker Daemon (dockerd): İstekleri karşılayan, image, network ve volume’leri yöneten ana servistir.
- containerd ve runc: Container’ların yaşam döngüsünü yöneten ve onları çekirdek seviyesinde başlatan katmanlardır. Kubernetes de container’ları doğrudan containerd üzerinden çalıştırır.
- Registry: Image’ların saklandığı depodur. Varsayılan registry Docker Hub’dır; Nexus, Harbor veya kurumsal bir registry de kullanılabilir.
Akış şöyledir: CLI’dan gelen istek REST API üzerinden daemon’a iletilir. İstenen image yerelde yoksa registry’den çekilir, varsa yereldeki kullanılır. Ardından image üzerinden container oluşturulur ve başlatılır.
Image ve Katmanlar
Image, bir uygulamanın çalışması için gereken her şeyin (kütüphaneler, yapılandırma dosyaları, ortam değişkenleri) bir araya getirildiği salt okunur bir pakettir. Image’lar katmanlardan oluşur: en altta temel image (ör. bir Linux dağıtımı), üstünde uygulama ve bağımlılıkları, en üstte yapılandırma katmanı yer alır. Katmanlar image’lar arasında paylaşıldığı için disk ve indirme süresinden tasarruf edilir.

Bir image’dan container başlatıldığında en üste yazılabilir, geçici bir katman eklenir. Container içinde yapılan değişiklikler bu katmanda tutulur; container silindiğinde bu katman da silinir. Alttaki image katmanları salt okunur olduğu için değişmez. Kalıcı olması gereken veriler için volume kullanılır.

Linux Üzerine Docker Kurulumu
Kurulum RHEL 9, Rocky Linux 9 ve AlmaLinux 9 için geçerlidir. Komutlar root olarak (ya da başına sudo eklenerek) çalıştırılır.
1. Eski veya Çakışan Paketleri Kaldırma
RHEL 9 tabanlı sistemlerde varsayılan container aracı Podman’dır. Docker ile çakışmaması için eski Docker paketleri ve Podman kaldırılır (yüklü değillerse komut sadece bunu bildirir):
dnf remove -y docker docker-client docker-client-latest docker-common \
docker-latest docker-latest-logrotate docker-logrotate docker-engine \
podman runc
2. Docker Deposunu Ekleme
dnf install -y dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
Rocky Linux veya AlmaLinux kullanıyorsanız ve RHEL deposunda sorun yaşarsanız https://download.docker.com/linux/centos/docker-ce.repo adresini kullanabilirsiniz.
3. Docker Engine Kurulumu
dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker
systemctl status docker
Eski RHEL 7 kurulumlarında karşılaşılan container-selinux bağımlılık hatası, güncel depolarla birlikte artık oluşmaz; gerekli paketler otomatik kurulur.
4. Kurulumu Doğrulama
docker version
docker run --rm hello-world
“Hello from Docker!” mesajını görüyorsanız kurulum tamamdır.
5. Docker’ı sudo Olmadan Kullanma (İsteğe Bağlı)
usermod -aG docker <kullanici_adi>
newgrp docker
Dikkat: docker grubundaki kullanıcılar fiilen root yetkisine sahiptir. Bu grubu sadece güvendiğiniz kullanıcılara verin.
İlk Container: NGINX
docker run -d --name nginx-deneme -p 8081:80 nginx
-d: Container’ı arka planda (detached) çalıştırır. Kullanılmasaydı terminal container’a bağlı kalırdı.--name: Container’a isim verir; sonraki komutlarda ID yerine bu ismi kullanabiliriz.-p 8081:80: Sunucunun 8081 portunu container’ın 80 portuna yönlendirir.nginx: Kullanılacak image’ın adıdır. Yerelde yoksa Docker Hub’dan katman katman indirilir.

Container’ın çalıştığını ve portu dinlediğini kontrol edelim:
docker ps
ss -tulpn | grep 8081
curl http://localhost:8081
NGINX’in “Welcome to nginx!” sayfasının HTML çıktısını görmelisiniz. Tarayıcıdan http://<sunucu-ip>:8081 adresine de gidebilirsiniz (firewall’da 8081 portu açık olmalı).
Container’ın içine girmek için:
docker exec -it nginx-deneme bash
Sık Kullanılan Komutlar
| Komut | Ne yapar? |
|---|---|
docker ps -a | Çalışan ve durmuş tüm container’ları listeler |
docker images | Yereldeki image’ları listeler |
docker logs -f nginx-deneme | Container loglarını canlı izler |
docker stop nginx-deneme | Container’ı durdurur |
docker rm nginx-deneme | Durmuş container’ı siler |
docker rmi nginx | Image’ı siler |
docker system df | Docker’ın kullandığı disk alanını gösterir |
docker system prune | Kullanılmayan container, network ve image’ları temizler |
Video Anlatım
Aşağıdaki video bu yazının ilk sürümünde, RHEL 7.6 üzerinde çekilmiştir. Kavramlar aynıdır; kurulum için yukarıdaki güncel adımları kullanın.