Docker, uygulamaları izole ortamlarda çalıştırmayı, dağıtmayı ve yönetmeyi kolaylaştıran en yaygın container platformlarından biridir. Docker kullanırken yalnızca container oluşturmak veya gereksiz verileri temizlemek değil; çalışan container’ları görüntülemek, logları takip etmek, dosya kopyalamak, kaynak tüketimini incelemek, image oluşturmak, volume ve network yönetmek gibi birçok işlem yapılır.
Bu rehberde günlük kullanımda ihtiyaç duyabileceğiniz önemli Docker komutlarını; container, image, volume, network, Docker Compose, sistem izleme ve temizlik işlemleriyle birlikte bulabilirsiniz.
Docker Sürümünü Kontrol Etme
Sistemde kurulu Docker sürümünü öğrenmek için:
docker --version
Docker istemcisi ve Docker Engine hakkında daha ayrıntılı sürüm bilgisi almak için:
docker version
Docker Sistem Bilgilerini Görüntüleme
Docker Engine, çalışan container sayısı, image sayısı, storage driver, işletim sistemi ve diğer Docker yapılandırmaları hakkında bilgi almak için:
docker info
Docker ile ilgili bir problem yaşandığında kontrol edilmesi gereken ilk komutlardan biridir.
Çalışan Container’ları Listeleme
Şu anda çalışan Docker container’larını görüntülemek için:
docker ps
Container ID, kullanılan image, çalışma süresi, portlar ve container adı gibi bilgiler görüntülenir.
Tüm Container’ları Listeleme
Çalışan ve durmuş tüm container’ları görüntülemek için:
docker ps -a
Sadece container ID’lerini görüntülemek isterseniz:
docker ps -aq
Container Oluşturma ve Çalıştırma
Bir Docker image’ından yeni container oluşturup çalıştırmak için docker run kullanılır.
docker run nginx
Container’ı terminali meşgul etmeden arka planda çalıştırmak için -d parametresi kullanılır:
docker run -d nginx
Container’a İsim Verme
Container’lara rastgele oluşturulan isimler yerine kolay hatırlanabilecek bir isim verebilirsiniz:
docker run -d --name web-server nginx
Bundan sonra container ID yerine web-server ismini kullanabilirsiniz.
Docker Port Yönlendirme
Container içerisindeki bir portu sunucunun veya bilgisayarın portuna açmak için -p parametresi kullanılır.
docker run -d --name web-server -p 8080:80 nginx
Bu örnekte bilgisayarın 8080 portuna gelen trafik container içerisindeki 80 portuna gönderilir.
Uygulamaya şu şekilde erişilebilir:
http://localhost:8080
Container Portlarını Görüntüleme
Bir container’ın hangi portları kullandığını hızlıca görüntülemek için:
docker port web-server
Container’a Environment Variable Gönderme
Container çalıştırılırken uygulamaya ortam değişkeni göndermek için -e parametresi kullanılabilir:
docker run -d \ --name uygulama \ -e APP_ENV=production \ -e APP_DEBUG=false \ uygulama-image
Veritabanı bağlantıları, çalışma ortamı ve uygulama ayarları sıklıkla environment variable üzerinden container’a aktarılır.
Container’ı Başlatma
Daha önce oluşturulmuş fakat durmuş bir container’ı tekrar başlatmak için:
docker start web-server
Container’ı Durdurma
Çalışan bir container’ı düzgün şekilde durdurmak için:
docker stop web-server
Container’ı Yeniden Başlatma
Container’ı yeniden başlatmak için:
docker restart web-server
Özellikle yapılandırma değişikliklerinden sonra sık kullanılan komutlardan biridir.
Container’ı Geçici Olarak Dondurma
Container içerisindeki işlemleri container’ı tamamen durdurmadan geçici olarak askıya almak için:
docker pause web-server
Tekrar devam ettirmek için:
docker unpause web-server
Docker Container İçerisine Girme
Çalışan bir container içerisinde terminal açmak için docker exec kullanılabilir.
Bash bulunan container’larda:
docker exec -it web-server bash
Alpine gibi daha minimal image’larda Bash bulunmayabilir. Böyle durumlarda:
docker exec -it web-server sh
Container İçerisinde Tek Komut Çalıştırma
Container’ın terminaline girmeden doğrudan bir komut çalıştırabilirsiniz:
docker exec web-server nginx -v
PHP uygulamalarında örneğin:
docker exec php php -v
Docker Container Loglarını Görüntüleme
Bir container’ın oluşturduğu logları görüntülemek için:
docker logs web-server
Logları Canlı Takip Etme
Yeni loglar geldikçe terminalde anlık olarak görüntülemek için:
docker logs -f web-server
Son 100 Log Satırını Görüntüleme
docker logs --tail 100 web-server
Son 100 Satırı Gösterip Canlı Takip Etme
docker logs -f --tail 100 web-server
Production ortamındaki hataları araştırırken en sık kullanılan Docker komutlarından biridir.
Container Detaylarını Görüntüleme
Container’ın IP adresi, environment variable’ları, network bağlantıları, volume’ları ve diğer ayrıntılarını görüntülemek için:
docker inspect web-server
Container IP Adresini Öğrenme
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web-server
Container Kaynak Kullanımını Görüntüleme
Çalışan container’ların CPU, RAM, network ve disk I/O kullanımını canlı görüntülemek için:
docker stats
Sadece belirli bir container’ı takip etmek için:
docker stats web-server
Bir container’ın beklenenden fazla RAM veya CPU tüketip tüketmediğini anlamak için oldukça kullanışlıdır.
Container İçerisindeki Process’leri Görüntüleme
Container içerisinde çalışan işlemleri görmek için:
docker top web-server
Host ile Container Arasında Dosya Kopyalama
Bilgisayar veya sunucudan container içerisine dosya kopyalamak için:
docker cp dosya.txt web-server:/tmp/dosya.txt
Container içerisinden host sisteme dosya almak için:
docker cp web-server:/var/log/nginx/access.log ./access.log
Container’ı Otomatik Yeniden Başlatma
Sunucu yeniden başladığında container’ın otomatik olarak ayağa kalkmasını istiyorsanız restart policy kullanabilirsiniz.
docker run -d \ --name web-server \ --restart unless-stopped \ nginx
unless-stopped, container kullanıcı tarafından özellikle durdurulmadığı sürece Docker yeniden başladığında container’ın tekrar çalışmasını sağlar.
Docker Image’larını Listeleme
Sistemde bulunan Docker image’larını görüntülemek için:
docker images
Aynı işlemin uzun biçimi:
docker image ls
Docker Hub veya Registry’den Image İndirme
Registry üzerinden image indirmek için docker pull kullanılır:
docker pull nginx
Belirli bir sürümü indirmek için tag belirtilebilir:
docker pull nginx:alpine
Production sistemlerde doğrudan latest kullanmak yerine çalıştığınız image sürümünü açık şekilde belirtmek dağıtımların daha öngörülebilir olmasına yardımcı olur.
Dockerfile’dan Image Oluşturma
Bulunduğunuz dizindeki Dockerfile kullanılarak image oluşturmak için:
docker build -t uygulamam .
Image’a sürüm etiketi vermek için:
docker build -t uygulamam:1.0.0 .
Docker Build Cache Kullanmadan Image Oluşturma
Build sırasında eski cache katmanlarını kullanmak istemiyorsanız:
docker build --no-cache -t uygulamam .
Basit Dockerfile Örneği
Örneğin basit bir Node.js uygulaması için Dockerfile şu şekilde olabilir:
FROM node:22-alpine WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . EXPOSE 3000 CMD ["npm", "start"]
Ardından image oluşturulabilir:
docker build -t node-uygulamam .
Ve container çalıştırılabilir:
docker run -d \ --name node-app \ -p 3000:3000 \ node-uygulamam
Docker Image Geçmişini Görüntüleme
Bir image’ın hangi katmanlardan oluştuğunu ve build geçmişini görüntülemek için:
docker history nginx
Docker Image’a Tag Verme
Bir image’ı Docker Hub veya özel registry’ye göndermeden önce yeniden etiketlemek için:
docker tag uygulamam:1.0 kullaniciadi/uygulamam:1.0
Özel registry kullanıyorsanız:
docker tag uygulamam:1.0 registry.example.com/uygulamam:1.0
Docker Registry’ye Giriş Yapma
Docker Hub hesabına terminal üzerinden giriş yapmak için:
docker login
Özel bir registry kullanıyorsanız:
docker login registry.example.com
Docker Image Push Etme
Hazırlanan image’ı Docker Hub veya başka bir registry’ye göndermek için:
docker push kullaniciadi/uygulamam:1.0
Özel registry örneği:
docker push registry.example.com/uygulamam:1.0
Docker Image’ını Dosya Olarak Yedekleme
Bir image’ı tar dosyasına aktarmak için:
docker save -o uygulamam.tar uygulamam:1.0
Bu yöntem registry kullanmadan image’ı başka bir sunucuya taşımak için kullanılabilir.
Yedeklenen Docker Image’ını Yükleme
Daha önce docker save ile oluşturulan image arşivini Docker’a yüklemek için:
docker load -i uygulamam.tar
Docker Volume’larını Listeleme
Sistemde bulunan Docker volume’larını görüntülemek için:
docker volume ls
Docker Volume Oluşturma
Manuel olarak yeni volume oluşturmak için:
docker volume create veritabani-data
Docker Volume Detaylarını Görüntüleme
Volume’un disk üzerindeki mount noktası ve diğer bilgilerini görüntülemek için:
docker volume inspect veritabani-data
Volume’u Container’a Bağlama
Bir volume’u container içerisine bağlamak için:
docker run -d \ --name postgres \ -v veritabani-data:/var/lib/postgresql/data \ postgres
Bu yapı sayesinde container yeniden oluşturulsa bile veriler volume içerisinde saklanabilir.
Bind Mount Kullanma
Host sistemdeki belirli bir klasörü doğrudan container içerisine bağlamak için:
docker run -d \ --name web-server \ -v /home/user/site:/usr/share/nginx/html \ nginx
Özellikle geliştirme ortamında kaynak kodunun container içerisinden doğrudan kullanılmasını sağlamak için bind mount tercih edilebilir.
Docker Network’lerini Listeleme
Docker tarafından kullanılan ağları görüntülemek için:
docker network ls
Docker Network Oluşturma
Container’ların birbirleriyle iletişim kurabileceği özel bir bridge network oluşturmak için:
docker network create uygulama-network
Container’ı Belirli Network ile Çalıştırma
docker run -d \ --name web-server \ --network uygulama-network \ nginx
Çalışan Container’ı Network’e Bağlama
Mevcut bir container’ı sonradan başka bir Docker network’üne bağlamak için:
docker network connect uygulama-network web-server
Docker Network Detaylarını Görüntüleme
Bir network’e bağlı container’ları, subnet bilgisini ve diğer ağ ayarlarını görüntülemek için:
docker network inspect uygulama-network
Docker Disk Kullanımını Görüntüleme
Docker’ın container, image, volume ve build cache için ne kadar disk alanı kullandığını görmek için:
docker system df
Daha ayrıntılı liste için:
docker system df -v
Özellikle Docker kullanılan sunucularda disk doluluk problemlerini araştırırken oldukça faydalıdır.
Docker Context Görüntüleme
Docker CLI’ın hangi Docker Engine ile iletişim kurduğunu görüntülemek için:
docker context show
Mevcut tüm context’leri listelemek için:
docker context ls
Birden fazla Docker sunucusu veya uzak Docker Engine yönetiyorsanız context özelliği oldukça kullanışlıdır.
Docker Compose Nedir?
Docker Compose, birden fazla container’dan oluşan uygulamaları tek bir compose.yaml dosyası üzerinden tanımlamayı ve yönetmeyi sağlar.
Örneğin bir uygulama; web sunucusu, PHP veya Node.js uygulaması, PostgreSQL ve Redis gibi birden fazla servisten oluşabilir. Bunları ayrı ayrı docker run komutlarıyla çalıştırmak yerine Docker Compose ile birlikte yönetebilirsiniz.
Basit Docker Compose Örneği
services:
nginx:
image: nginx:alpine
ports:
- "8080:80"
postgres:
image: postgres
environment:
POSTGRES_DB: uygulama
POSTGRES_USER: uygulama
POSTGRES_PASSWORD: guclu-bir-sifre
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Docker Compose Servislerini Başlatma
compose.yaml içerisinde tanımlanan servisleri başlatmak için:
docker compose up
Servisleri arka planda çalıştırmak için:
docker compose up -d
Günümüzde Compose v2 ile kullanılan komut docker compose biçimindedir.
Docker Compose ile Build Edip Başlatma
Dockerfile veya uygulama kaynak kodunda değişiklik yaptıysanız image’ları yeniden build ederek servisleri başlatabilirsiniz:
docker compose up -d --build
Docker Compose Servislerini Listeleme
docker compose ps
Docker Compose Loglarını Görüntüleme
Tüm servislerin loglarını görüntülemek için:
docker compose logs
Logları canlı takip etmek için:
docker compose logs -f
Sadece belirli bir servisi takip etmek için:
docker compose logs -f nginx
Docker Compose Container İçerisinde Komut Çalıştırma
Compose içerisindeki bir serviste terminal açmak için:
docker compose exec nginx sh
PHP/Symfony uygulamasında örneğin:
docker compose exec php php bin/console cache:clear
Laravel uygulamasında:
docker compose exec app php artisan migrate
Docker Compose Servislerini Durdurma
Container’ları silmeden çalışan Compose servislerini durdurmak için:
docker compose stop
Tekrar başlatmak için:
docker compose start
Docker Compose Servislerini Yeniden Başlatma
docker compose restart
Sadece belirli bir servisi yeniden başlatmak için:
docker compose restart nginx
Docker Compose Image’larını Güncelleme
Compose dosyasında tanımlanan image’ların güncel sürümlerini registry’den indirmek için:
docker compose pull
Ardından container’ları güncel image’larla yeniden oluşturmak için:
docker compose up -d
Docker Compose Yapılandırmasını Kontrol Etme
Compose dosyasının Docker tarafından nasıl yorumlandığını görmek ve yapılandırmayı kontrol etmek için:
docker compose config
Sık Kullanılan Docker Komutları Kısa Liste
Günlük kullanımda en sık ihtiyaç duyulan Docker komutlarını özetlemek gerekirse:
# Çalışan container'lar docker ps # Tüm container'lar docker ps -a # Image'lar docker images # Volume'lar docker volume ls # Network'ler docker network ls # Container logları docker logs -f container-adi # Container içerisine gir docker exec -it container-adi sh # Container detayları docker inspect container-adi # CPU ve RAM kullanımı docker stats # Docker disk kullanımı docker system df # Container başlat docker start container-adi # Container durdur docker stop container-adi # Container yeniden başlat docker restart container-adi # Image indir docker pull nginx # Image oluştur docker build -t uygulamam . # Docker Compose başlat docker compose up -d # Docker Compose durum docker compose ps # Docker Compose log docker compose logs -f # Docker Compose servis yeniden başlat docker compose restart
Tüm Container’ları Silme
Docker container’ları uygulamalarınızın çalıştığı ortamlardır. Test veya geliştirme sırasında zamanla çok sayıda kullanılmayan container oluşabilir.
Dikkat: Aşağıdaki komut sistemdeki çalışan ve durmuş tüm container’ları hedefler. Production sunucularda çalıştırmadan önce mutlaka mevcut container’ları kontrol edin.
docker rm -f $(docker ps -aq)
Komut, sistemdeki container ID’lerini alarak container’ları zorla kaldırmayı dener.
Tüm Image’ları Silme
Sistemde bulunan Docker image’larını listelemek için öncelikle:
docker images
Tüm image’ları kaldırmak istediğinizden eminseniz:
docker rmi -f $(docker images -aq)
Dikkat: Bu işlem local Docker image’larınızı kaldırır. Daha sonra ihtiyaç duyulan image’ların yeniden indirilmesi veya build edilmesi gerekebilir.
Tüm Volume’ları Silme
Docker volume’ları özellikle PostgreSQL, MySQL, MariaDB ve benzeri veritabanlarının kalıcı verilerini saklamak için kullanılabilir. Bu nedenle volume silmek diğer Docker temizlik işlemlerine göre çok daha kritik olabilir.
Mevcut volume’ları önce kontrol edin:
docker volume ls
Tüm volume’ları kaldırmayı denemek için:
docker volume rm $(docker volume ls -q)
Bir container tarafından kullanılmaya devam eden volume’lar Docker tarafından doğrudan kaldırılamayabilir. Volume silmeden önce içerisindeki verilerin gerekli olmadığından veya yedeklendiğinden emin olun.
Kullanılmayan Docker Ağlarını Silme
Herhangi bir container tarafından kullanılmayan Docker network’lerini temizlemek için:
docker network prune
Bu komut aktif olarak kullanılan ağları değil, kullanılmayan Docker ağlarını temizlemek için kullanılır.
Docker Sistemi Genel Temizlik
Kullanılmayan container, network, image ve build cache gibi Docker nesnelerini toplu olarak temizlemek için:
docker system prune -a
Volume’ların da temizliğe dahil edilmesi isteniyorsa:
docker system prune -a --volumes
Dikkat: Özellikle --volumes parametresi kullanılırken kalıcı uygulama veya veritabanı verilerinin silinmemesi için volume’lar önceden kontrol edilmelidir.
Docker’da Disk Doluluk Sorunu Nasıl Kontrol Edilir?
Docker kullanılan bir sunucunun diski dolmaya başladıysa doğrudan temizlik yapmak yerine öncelikle Docker’ın ne kadar alan kullandığını kontrol etmek daha güvenlidir.
docker system df -v
Ardından container’ları kontrol edin:
docker ps -a
Volume’ları kontrol edin:
docker volume ls
Image’ları kontrol edin:
docker images
Bu şekilde hangi Docker kaynağının disk alanını tükettiğini tespit ettikten sonra yalnızca gerekli temizliği yapmak daha güvenli olacaktır.
Docker Sorunlarında İlk Kontrol Edilecek Komutlar
Bir Docker uygulaması çalışmıyorsa aşağıdaki sırayla kontrol etmek çoğu problemi hızlı şekilde tespit etmeyi sağlar.
1. Container Çalışıyor mu?
docker ps -a
2. Container Loglarında Hata Var mı?
docker logs --tail 100 container-adi
3. Container Yapılandırması Doğru mu?
docker inspect container-adi
4. Port Yönlendirmesi Doğru mu?
docker port container-adi
5. CPU veya RAM Problemi Var mı?
docker stats
6. Disk Alanı Dolmuş mu?
docker system df -v
7. Docker Compose Kullanılıyorsa Servisler Çalışıyor mu?
docker compose ps
Ardından Compose logları kontrol edilebilir:
docker compose logs -f --tail 100
Sonuç
Docker yönetirken yalnızca container oluşturmak veya gereksiz verileri temizlemek yeterli değildir. docker ps, docker logs, docker exec, docker inspect, docker stats, docker system df, docker volume, docker network ve docker compose komutları günlük Docker kullanımının önemli parçalarıdır.
Özellikle production sunucularda herhangi bir container, image veya volume silmeden önce ilgili kaynağın hangi uygulama tarafından kullanıldığını kontrol etmek önemlidir. Veritabanı gibi kalıcı verilerin tutulduğu Docker volume’larının yanlışlıkla silinmesi veri kaybına neden olabilir.
Bu komutları kullanarak Docker container’larınızı yönetebilir, uygulama loglarını takip edebilir, kaynak tüketimini inceleyebilir, Docker network ve volume yapılarını kontrol edebilir, image oluşturup registry’ye gönderebilir ve Docker Compose ile çoklu servis yapılarını daha kolay yönetebilirsiniz.

