🐳 Docker
Docker, uygulamaları izole edilmiş konteynerlerde çalıştırmak için bir platformdur. Bu hızlı başvuru kılavuzu; imajlar, konteynerler, ağlar, volumeler, ayrıca Docker Compose ve Swarm ile çalışma komutlarını içerir.
📦 Temel Komutlar
| Komut | Örnek | Açıklama | 
|---|---|---|
| docker | Alt komutları çalıştırmak ve konteynerleri, imajları, ağları ve volumeleri yönetmek için kullanılan ana Docker CLI komutu | |
| docker version | Kurulu Docker sürümünü (istemci ve sunucu) göster. Kurulum doğrulaması için faydalıdır | |
| docker version --format '{{.Client.APIVersion}}' | Yalnızca Docker istemci API sürümünü göster | |
| docker version --format '{{.Server.Version}}' | Yalnızca Docker sunucu (Engine) sürümünü göster | |
| docker version --format '{{json .}}' | Tam sürüm bilgisini JSON formatında çıktıla | |
| docker system info | Genel Docker sistem bilgilerini göster: konteyner sayısı, imajlar, kaynaklar | |
| docker info | Docker verilerini göster: sürümler, ağlar, konteyner ve imaj sayıları | |
| docker info --format '{{json .}}' | Bilgiyi JSON formatında çıktıla — otomasyon için faydalı | |
| docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM' | CPU sayısını ve toplam belleği göster | |
| docker info --format '{{.Driver}}' | Docker tarafından kullanılan depolama sürücüsünü göster | |
| docker image pull | Docker Hub veya başka bir kayıt defterinden imaj indir. Konteynerler imajsız çalışamaz | |
| docker pull ubuntu | En son mevcut Ubuntu imajını indir | |
| docker pull nginx:alpine | Alpine Linux tabanlı hafif Nginx imajını indir | |
| docker pull redis:7 | Redis imajının 7. sürümünü indir | |
| docker container run | Bir imajdan yeni bir konteyner oluştur ve çalıştır | |
| docker run -it ubuntu bash | Ubuntu’yu etkileşimli Bash terminali ile çalıştır | |
| docker run -d nginx | Nginx’i detached (arka plan) modunda çalıştır | |
| docker run -p 8080:80 nginx | Nginx çalıştır ve konteyner 80. portunu host 8080’e bağla | |
| docker container ls | Çalışan konteynerleri listele | |
| docker ps | Yalnızca çalışan konteynerleri göster | |
| docker ps -a | Durdurulmuş olanlar dahil tüm konteynerleri göster | |
| docker ps --format '{{.Names}}' | Yalnızca konteyner adlarını çıktıla | |
| docker container start | Bir veya daha fazla durdurulmuş konteyneri başlat | |
| docker start container_name | Konteyneri adına göre başlat | |
| docker start $(docker ps -aq) | Tüm konteynerleri başlat | |
| docker start -ai container_name | Konteyneri başlat ve etkileşimli terminale bağlan | |
| docker container stop | Çalışan bir konteyneri durdur | |
| docker stop container_name | Bir konteyneri adına göre durdur | |
| docker stop $(docker ps -q) | Tüm çalışan konteynerleri durdur | |
| docker stop -t 5 container_name | Konteyneri durdurmadan önce işlemleri bitirmesi için 5 saniye tanı | |
| docker container restart | Bir konteyneri yeniden başlat | |
| docker restart container_name | Belirli bir konteyneri yeniden başlat | |
| docker restart $(docker ps -q) | Tüm çalışan konteynerleri yeniden başlat | |
| docker restart -t 10 container_name | Konteyneri 10 saniyelik gecikmeyle yeniden başlat | |
| docker container rm | Bir konteyneri sil | |
| docker rm container_name | Belirli bir durdurulmuş konteyneri sil | |
| docker rm $(docker ps -aq) | Tüm durdurulmuş konteynerleri sil | |
| docker rm -f container_name | Çalışan bir konteyneri zorla sil | |
| docker image ls | İndirilen imajları listele | |
| docker images | Host üzerindeki tüm imajları göster | |
| docker images -a | Ara katmanlar dahil tüm imajları göster | |
| docker images --format '{{.Repository}}:{{.Tag}}' | Yalnızca imaj adlarını ve etiketlerini çıktıla | |
| docker image rm | Yerel depodan bir veya daha fazla imajı sil | |
| docker rmi test1:latest | 
 | |
| docker rmi 1a2b3c4d5e6f | İmajı kimliğine göre sil | |
| docker rmi $(docker images -q) | Tüm imajları sil (dikkatli kullan!) | 
🔁 Konteyner Yönetimi
| Komut | Örnek | Açıklama | 
|---|---|---|
| docker container exec | Çalışan bir konteyner içinde komut çalıştır | |
| docker exec -it container bash | 
 | |
| docker exec container ls /app | Konteyner içinde  | |
| docker exec -d container touch /tmp/testfile | Konteynerde detached modda (beklemeden) komut çalıştır | |
| docker container logs | Konteyner loglarını görüntüle | |
| docker logs container | 
 | |
| docker logs -f container | Konteyner loglarını gerçek zamanlı takip et | |
| docker logs --tail 50 container | Son 50 satır logu göster | |
| docker inspect | Bir konteyner veya imaj hakkında ayrıntılı JSON bilgisi al | |
| docker inspect container | 
 | |
| docker inspect --format '{{.NetworkSettings.IPAddress}}' container | Konteynerin IP adresini göster | |
| docker container stats | Konteynerlerin gerçek zamanlı kaynak kullanım istatistiklerini göster | |
| docker stats | Tüm konteynerler için CPU, bellek, ağ ve disk kullanımını görüntüle | |
| docker stats container_name | Yalnızca belirli bir konteynerin istatistiklerini göster | |
| docker stats --no-stream | Tek seferlik istatistik anlık görüntüsü al ve çık | |
| docker container rename | Bir konteynerin adını değiştir | |
| docker rename old_name new_name | 
 | |
| docker container cp | Konteyner ile host arasında dosya kopyala | |
| docker cp container:/src/file.txt ./file.txt | Konteynerden host dizinine dosya kopyala | |
| docker cp ./config.yaml container:/app/config.yaml | Hosttan konteynere dosya kopyala | |
| docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR" | Konteynerden log dosyasını akışla al ve “ERROR” satırlarını diske kaydetmeden filtrele | |
| docker container top | Bir konteyner içindeki çalışan işlemleri görüntüle | |
| docker top container | 
 | |
| docker container pause | Bir konteynerdeki tüm işlemleri duraklat | |
| docker pause container | 
 | |
| docker container unpause | Duraklatılmış bir konteyneri devam ettir | |
| docker unpause container | 
 | |
| docker container update | Konteyner ayarlarını yeniden başlatmadan güncelle | |
| docker update --memory 500m container | Konteyner bellek kullanımını 500 MB ile sınırla | 
🧱 İmajlar ve Dockerfile
| Komut | Örnek | Açıklama | 
|---|---|---|
| docker buildx build | Bir Dockerfile’dan Docker imajı oluştur | |
| docker build -t my_image . | Geçerli dizinden  | |
| docker build -t my_image:1.0 . | 
 | |
| docker build --no-cache -t my_image . | Önbellek kullanmadan temiz bir imaj oluştur | |
| docker container commit | Bir konteynerin mevcut durumundan imaj oluştur | |
| docker commit container my_img:v1 | 
 | |
| docker commit -m "Added config" container my_img:v2 | Commit mesajı ile imaj oluştur | |
| docker commit -a "John Doe" container my_img:latest | Yazarı belirterek imaj oluştur | |
| docker image tag | Bir imaja etiket ekle veya değiştir | |
| docker tag my_image myrepo/my_image:latest | 
 | |
| docker tag my_image:1.0 my_image:stable | 
 | |
| docker tag my_image my_image:backup | Yerel imaja  | |
| docker image push | Bir imajı Docker Hub veya başka bir kayıt defterine gönder | |
| docker push myrepo/my_image:latest | 
 | |
| docker push myrepo/my_image:1.0 | 
 | |
| docker push myrepo/my_image | Varsayılan  | |
| docker login | Docker Hub veya başka bir kayıt defterine kimlik doğrula | |
| docker login | Docker Hub için kullanıcı adı ve şifreyi etkileşimli gir | |
| docker login myregistry.local:5000 | Özel kayıt defterine giriş yap | |
| docker login -u username -p password | Kullanıcı adı ve şifre ile giriş yap (önerilmez) | |
| docker logout | Docker Hub veya başka bir kayıt defterinden çıkış yap | |
| docker logout | Docker Hub’tan çıkış yap | |
| docker logout myregistry.local:5000 | Özel kayıt defterinden çıkış yap | |
| HEALTHCHECK | Dockerfile yönergesi ile konteyner sağlık durumunu otomatik kontrol et | |
| HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1 | Her 30 saniyede hizmet erişilebilirliğini kontrol eden healthcheck ekle | |
| docker inspect --format='{{json .State.Health}}' container_name | Çalışan konteynerin healthcheck durumunu kontrol et | 
🔌 Ağlar ve Volumeler
| Komut | Örnek | Açıklama | 
|---|---|---|
| docker network ls | Tüm Docker ağlarını listele | |
| docker network ls | Oluşturulmuş tüm Docker ağlarını göster | |
| docker network ls --filter driver=bridge | 
 | |
| docker network ls --format '{{.Name}}' | Yalnızca ağ adlarını göster | |
| docker network create | Yeni bir Docker ağı oluştur | |
| docker network create my_net | Varsayılan ayarlarla  | |
| docker network create --driver bridge my_bridge_net | 
 | |
| docker network create --subnet=192.168.10.0/24 my_custom_net | Belirtilen alt ağ ile ağ oluştur | |
| docker network connect | Bir konteyneri ağa bağla | |
| docker network connect my_net container | 
 | |
| docker network connect --alias db_net my_net container | 
 | |
| docker network disconnect | Bir konteyneri ağdan ayır | |
| docker network disconnect my_net container | 
 | |
| docker volume ls | Tüm Docker volumelerini listele | |
| docker volume ls | Tüm volumeleri göster | |
| docker volume ls --filter dangling=true | Kullanılmayan volumeleri göster | |
| docker volume create | Yeni bir Docker volume oluştur | |
| docker volume create my_vol | 
 | |
| docker volume create --driver local --opt type=tmpfs my_tmp_vol | tmpfs kullanarak geçici volume oluştur | |
| docker volume inspect | Bir volume hakkında ayrıntılı bilgi göster | |
| docker volume inspect my_vol | 
 | |
| docker volume rm | Bir veya daha fazla volume sil | |
| docker volume rm my_vol | 
 | |
| docker volume rm $(docker volume ls -qf dangling=true) | Tüm kullanılmayan volumeleri sil | 
🧩 Docker Eklentileri
| Komut | Örnek | Açıklama | 
|---|---|---|
| docker plugin ls | Kurulu Docker eklentilerini listele | |
| docker plugin ls | Tüm eklentileri ve durumlarını göster | |
| docker plugin install | Kayıt defterinden Docker eklentisi kur | |
| docker plugin install vieux/sshfs | SSHFS volume eklentisini kur | |
| docker plugin install store/weaveworks/net-plugin:latest_release | Weave ağ eklentisini kur | |
| docker plugin disable | Kurulu bir eklentiyi devre dışı bırak | |
| docker plugin disable vieux/sshfs | SSHFS eklentisini devre dışı bırak | |
| docker plugin enable | Önceden devre dışı bırakılmış eklentiyi etkinleştir | |
| docker plugin enable vieux/sshfs | SSHFS eklentisini etkinleştir | |
| docker plugin rm | Bir Docker eklentisini sil | |
| docker plugin rm vieux/sshfs | SSHFS eklentisini sil | 
📋 Docker Compose
| Komut | Örnek | Açıklama | 
|---|---|---|
| docker compose up | docker-compose.ymliçinde tanımlı konteynerleri başlat | |
| docker compose up | Geçerli dizindeki tüm servisleri etkileşimli modda başlat | |
| docker compose up -d | Servisleri detached (arka plan) modunda başlat | |
| docker compose up --build | Servisleri başlatmadan önce imajları oluştur | |
| docker compose down | upile oluşturulan konteyner, ağ ve volumeleri durdur ve sil | |
| docker compose down | Tüm çalışan servisleri durdur ve ilgili kaynakları kaldır | |
| docker compose down --volumes | Compose tarafından oluşturulan volumeleri de sil | |
| docker compose down --rmi all | Compose tarafından oluşturulan imajları da sil | |
| docker compose logs | Tüm veya belirli servislerin loglarını görüntüle | |
| docker compose logs | Tüm servislerin loglarını göster | |
| docker compose logs -f | Logları gerçek zamanlı takip et | |
| docker compose logs web | Yalnızca  | |
| docker compose exec | Çalışan bir servis konteynerinde komut çalıştır | |
| docker compose exec web bash | 
 | |
| docker compose exec db ls /var/lib/postgresql | Veritabanı konteynerinde  | |
| docker compose exec -d worker touch /tmp/done | 
 | |
| docker compose build | Servis imajlarını oluştur veya yeniden oluştur | |
| docker compose build | 
 | |
| docker compose build web | Yalnızca  | |
| docker compose build --no-cache | Önbellek kullanmadan imajları oluştur | |
| docker compose ps | Tüm servis ve konteynerlerin durumunu göster | |
| docker compose ps -a | Durdurulmuş olanlar dahil tüm konteynerleri göster | |
| docker compose ps --services | Yalnızca servis adlarını göster | |
| docker compose pull | Kayıt defterinden servis imajlarını indir/güncelle | |
| docker compose pull web | Yalnızca  | |
| docker compose pull --ignore-pull-failures | Bazı imajlar başarısız olsa bile indirmeye devam et | |
| docker compose restart | Tüm veya belirli servisleri yeniden başlat | |
| docker compose restart db | Yalnızca  | |
| docker compose restart -t 10 | Servisleri 10 saniye zaman aşımıyla yeniden başlat | |
| docker compose config | Son Compose yapılandırmasını YAML formatında göster | |
| docker compose config --services | Yapılandırmadaki tüm servisleri listele | |
| docker compose config --volumes | Tanımlı tüm volumeleri listele | |
| docker compose start | Konteynerleri yeniden oluşturmadan durdurulmuş servisleri başlat | |
| docker compose start web | 
 | |
| docker compose start db api | Birden fazla servisi aynı anda başlat | |
| docker compose stop | Servisleri konteynerleri silmeden durdur | |
| docker compose stop web | 
 | |
| docker compose stop -t 5 | Servisleri 5 saniyelik zaman aşımıyla durdur | 
📤 Dışa Aktarma ve İçe Aktarma
| Komut | Örnek | Açıklama | 
|---|---|---|
| docker image save | Bir veya daha fazla Docker imajını daha sonra içe aktarma veya transfer için tar arşivine kaydet | |
| docker save -o image.tar my_img:tag | Bir Docker imajını tar arşiv dosyasına kaydet | |
| docker save my_image > my_image.tar | İmajı bir dosyaya kaydetmenin alternatif yolu | |
| docker save -o redis_latest.tar redis:latest | Belirli bir Redis imajını dosyaya kaydet | |
| docker image load | Önceden kaydedilmiş tar arşivinden Docker imajlarını yükle | |
| docker load < image.tar | Docker imajını tar arşiv dosyasından yükle | |
| docker load --input redis_latest.tar | Dosyayı parametre ile belirterek imaj yükle | |
| docker load --quiet < my_image.tar | İlerleme çıktısı olmadan imaj yükle | |
| docker container export | Bir konteynerin dosya sistemini imaj geçmişi veya metadata olmadan tar arşivine aktar | |
| docker export container > file.tar | Konteyner dosya sistemini arşive aktar | |
| docker export my_container > my_container_fs.tar | Konteyneri adına göre dışa aktar | |
| docker export -o container_fs.tar container_id | 
 | |
| docker image import | Bir dosya sistemi tar arşivinden yeni bir imaj oluştur | |
| docker import file.tar new_img | Arşiv dosyasını yeni Docker imajı olarak içe aktar | |
| docker import https://example.com/image.tar my_new_image | İmajı doğrudan bir URL’den içe aktar | |
| docker import - my_image < file.tar | Standart girdiden (stdin) içe aktar | 
🧹 Temizlik ve Teşhis
| Komut | Örnek | Açıklama | 
|---|---|---|
| docker system df | Docker disk kullanımını göster: volumeler, imajlar, konteynerler ve build önbelleği | |
| docker system df -v | Her imaj, konteyner ve volume hakkında ayrıntılı çıktı | |
| docker system df --format '{{json .}}' | Bilgiyi JSON formatında çıktıla | |
| docker system prune | Kullanılmayan tüm Docker verilerini sil: durdurulmuş konteynerler, kullanılmayan ağlar, dangling imajlar ve build önbelleği | |
| docker system prune -a | Ara katmanlar dahil kullanılmayan imajları sil | |
| docker system prune --volumes | Kullanılmayan volumeleri diğer kaynaklarla birlikte sil | |
| docker image prune | Kullanılmayan Docker imajlarını sil (dangling katmanlar dahil) | |
| docker image prune -a | Kullanılmayan tüm imajları, dangling olanlar dahil, sil | |
| docker image prune --filter "until=24h" | 24 saatten eski imajları sil | |
| docker container prune | Filtrelere uyan durdurulmuş konteynerleri veya belirtilmezse tümünü sil | |
| docker container prune --filter "until=24h" | 24 saatten eski durdurulmuş konteynerleri sil | |
| docker container prune --force | Onay istemeden sil | 
🐝 Docker Swarm
| Komut | Örnek | Açıklama | 
|---|---|---|
| docker swarm init | Mevcut düğümde yeni bir Docker Swarm kümesi başlat | |
| docker swarm init --advertise-addr 192.168.1.100 | IP adresi belirterek kümeyi başlat | |
| docker swarm init --listen-addr 0.0.0.0:2377 | Belirli bir dinleme portu ile başlat | |
| docker service create | Swarm kümesinde yeni bir servis oluştur | |
| docker service create --name nginx nginx | Swarm içinde bir Nginx servisi oluştur | |
| docker service create --replicas 3 --name web webserver | 3 replika ile servis oluştur | |
| docker service create --name redis --publish 6379:6379 redis | Port eşlemesi ile servis oluştur | |
| docker stack deploy | Compose dosyasına dayalı olarak Swarm kümesine servis yığını dağıt | |
| docker stack deploy -c docker-compose.yml mystack | Stack’i compose dosyasından dağıt | |
| docker stack deploy --with-registry-auth -c compose.yml mystack | Kayıt defteri kimlik doğrulama ile dağıt | |
| docker stack deploy -c swarm-compose.yml mystack | Alternatif bir compose dosyası ile stack dağıt | |
| docker stack rm | Swarm kümesinden bir veya daha fazla stack kaldır | |
| docker stack rm mystack | 
 | |
| docker stack rm | Tüm stack’leri kaldır (önerilmez) | |
| docker stack rm mystack && docker swarm leave --force | Stack’i kaldır ve Swarm’dan ayrıl | 
💼 İleri Düzey Docker Kullanımı
🚀 Profesyonel Docker Komutları
| Komut | Örnek | Açıklama | 
|---|---|---|
| docker buildx | docker buildyerine geçen gelişmiş imaj oluşturma aracı. Çoklu platform desteği, önbellekleme, paralel build ve çeşitli formatlara aktarma sağlar. CI/CD ve çapraz platform geliştirme için faydalıdır | |
| docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi . | Çoklu platform imaj oluştur (ARM ve x86 aynı anda) | |
| docker buildx build --load -t localimg . | İmaj oluştur ve yerel Docker Engine önbelleğine yükle | |
| docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest . | Çoklu platform imaj oluştur ve kayıt defterine gönder | |
| docker context | Uzak veya çoklu ortamlarla çalışmak için Docker contextlerini yönet. Yerel ve uzak Docker Engine arasında hızlı geçiş sağlar | |
| docker context create myremote --docker "host=ssh://user@host" | Uzak Docker hostuna bağlanmak için bir context oluştur | |
| docker context use myremote | Uzak context’e geç | |
| docker context ls | Mevcut contextleri ve aktif olanı listele | |
| docker system events | Docker olaylarını gerçek zamanlı dinle, olay türüne göre filtrele (örn. konteyner başlatma). İzleme ve otomasyon için faydalı | |
| docker events --filter 'event=start' | Yalnızca konteyner başlatma olaylarını göster | |
| docker events --since 1h --until 10m | Son 1 saatten 10 dakika öncesine kadar olayları göster | |
| docker events --filter 'type=network' | Yalnızca ağ ile ilgili olayları göster | |
| docker events --filter 'image=nginx' | 
 | |
| docker container update | Çalışan bir konteynerin kaynak sınırlarını ve ayarlarını yeniden başlatmadan değiştir | |
| docker update --cpus 2 --memory 1g my_container | 2 CPU ve 1 GB RAM sınırı ayarla | |
| docker update --restart unless-stopped my_container | Otomatik yeniden başlatma politikasını  | |
| docker update --pids-limit 200 my_container | İşlem sayısını 200 ile sınırla | |
| docker container diff | Bir konteynerde imajına kıyasla dosya sistemi değişikliklerini göster. Hata ayıklama ve denetim için faydalıdır | |
| docker diff my_container | Konteynerdeki tüm dosya sistemi değişikliklerini göster | |
| docker diff my_container | grep '^A' | Yalnızca eklenen dosyaları göster ( | |
| docker image history | İmaj katmanlarının geçmişini göster: build komutları, her katmanın boyutu ve oluşturulma zamanı. Optimizasyon ve denetim için faydalıdır | |
| docker history my_image | Bir imajın katman geçmişini göster | |
| docker history --no-trunc my_image | Tam build komutlarını kesilmeden göster | |
| docker history --format "{{.CreatedBy}}: {{.Size}}" my_image | Yalnızca build komutlarını ve katman boyutlarını çıktıla | 
🛠 Faydalı Docker Uygulamaları ve Otomasyon
- İmaj boyutunu küçült 
 Minimal boyut için- alpineveya- scratchgibi temel imajlar kullanın.
 Katmanları birleştirmek için build sırasında- --squashkullanabilirsiniz (deneysel özellikler etkin olmalı).
 Ayrıca geçici dosyaları ve önbellekleri tek katmanda silin:- RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
- Katman sayısını azalt 
 Katman ve son imaj boyutunu azaltmak için komutları tek- RUNiçinde birleştirin:- RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
- Dockerfile build sürecini optimize et 
 Sadece gerekli dosyaların kalması için çok aşamalı (multi-stage) build kullanın.
 Önce bağımlılıkları kopyalayın ve yükleyin, ardından kodu kopyalayın — bu, katman önbelleklemesini iyileştirir ve yeniden build hızını artırır.
- Gizli bilgileri ve yapılandırmaları ayır 
 - .envdosyalarını, API anahtarlarını veya özel sertifikaları asla imajın içine koymayın.
 Yapılandırma için şunları kullanın:- docker secret(Swarm içinde)
 
- ortam değişkenleri (-e VAR=valueveya.env)
 
- yapılandırmalar için harici volumeler 
 
- Build zamanı sırları (BuildKit) 
 Güvenli secret aktarımı için- --secretbayrağını kullanın:- docker buildx build --secret id=mysecret,src=./secret.txt .- Dockerfile’da secret - /run/secrets/mysecretyolunda bulunur:- RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret- 🛡 Bu yöntem, secretların imaj katmanlarına kaydedilmesini engeller. 
- Rootless Docker 
 Docker’ı root yetkileri olmadan çalıştırmak güvenliği artırır ve hostun ele geçirilme riskini azaltır.
 Etkinleştirmek için:- dockerd-rootless-setuptool.sh install export PATH=/usr/bin:$PATH- Kontrol: - docker info | grep Rootless- ⚠ Bazı özellikler (örn. <1024 port yönlendirme) kullanılamaz. 
- İmajları güvenlik açıklarına tarayın 
 Yerleşik araçları kullanın:- docker scan my_image- Veya yeni CLI’yı kullanın: - docker scout cves my_image- Bu, temel imajlarda ve bağımlılıklarda güvenlik açıklarını tespit etmeye yardımcı olur. 
- Kaynak kullanımını izleyin 
 Konteynerleri bellek, CPU ve işlem sayısına göre sınırlayın:- docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage- Bu, kaynakların aşırı kullanımını önler. 
 Ayrıca G/Ç’yi sınırlayabilirsiniz:- docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage- Disk alt sistemini aşırı yüklememesi gereken konteynerler için faydalı. 
- Otomatik temizlik 
 Kullanılmayan imajları, konteynerleri, volumeleri ve ağları düzenli olarak silin:- docker system prune -af --volumes- ⚠ Dikkat: bu komut tüm kullanılmayan kaynakları siler. - Seçici temizlik için şunu kullanın: - docker image prune --filter "until=24h"
- CI/CD entegrasyonu 
 Build, test ve dağıtımı GitHub Actions, GitLab CI, Jenkins pipeline’larına entegre edin.
 Örnek GitHub Actions adımı:- - run: docker build -t myapp:${GITHUB_SHA} . - run: docker push myapp:${GITHUB_SHA}
- Loglama ve izleme 
 Merkezi sistemlere (- --log-driver) log sürücülerini ekleyin: ELK, Loki, Splunk.
 Konteyner metrikleri için Prometheus + cAdvisor kullanın.
- Üretim dağıtımı 
 Geliştirme ve üretim için ayrı yapılandırmalar kullanın:- docker-compose.override.yml.
 Yüksek erişilebilirlik ve ölçeklenebilirlik için şunları kullanın:- Docker Swarm
 
- Kubernetes 
 
- Docker Swarm
🐞 Docker Konteynerlerinde Hata Ayıklama ve Profilleme
| Komut | Örnek | Açıklama | 
|---|---|---|
| docker container exec | Çalışan bir konteyner içinde komut çalıştırır, etkileşimli erişim veya izole ortamda işlem çalıştırma imkanı sağlar | |
| docker exec -it my_container bash | Çalışan konteynerde etkileşimli terminal (bash) başlat | |
| docker exec -it my_container sh | Bash yoksa minimal shell başlat | |
| docker exec my_container ls /app | Etkileşimli mod olmadan komut çalıştır | |
| docker container logs | Belirli bir konteynerin loglarını gösterir, tanılama ve izleme için çıktı ve olayları görüntülemeye olanak tanır | |
| docker logs -f --tail 100 my_container | Son 100 satır logu gerçek zamanlı göster | |
| docker logs my_container | Konteynerin tüm mevcut loglarını göster | |
| docker logs --since 1h my_container | Son bir saatlik logları göster | |
| docker inspect | Bir Docker nesnesi (konteyner, imaj, ağ vb.) hakkında JSON formatında ayrıntılı bilgi verir, yapılandırma ve durumu içerir | |
| docker inspect my_container | Konteyner hakkında tam JSON bilgisi al | |
| docker inspect --format '{{.State.Pid}}' my_container | Konteynerin ana işleminin PID’sini al | |
| docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container | Konteynerin IP adresini göster | |
| nsenter(withstrace) | Başka bir işlemin namespace’lerine girmek için Linux aracı (burada konteyner). straceile birlikte konteyner içindeki sistem çağrılarını izlemek için kullanılır | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1 | Konteyner namespace’lerine gir ve işlem 1’in sistem çağrılarını izle | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash | Konteyner namespace’lerinde bash shell aç | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp | Konteyner içindeki açık portları görüntüle | |
| tcpdump(inside container) | Ağ trafiğini yakalama ve analiz için konsol aracı. Konteynerde ağ sorunlarını teşhis, paketleri analiz ve bağlantıları izlemek için kullanılır | |
| docker exec -it my_container tcpdump -i any | Konteyner içinde ağ trafiğini yakala ve analiz et | |
| docker exec -it my_container tcpdump -nn port 80 | Yalnızca 80. porttaki trafiği yakala | |
| docker exec -it my_container tcpdump -w /tmp/dump.pcap | Trafiği daha sonra analiz için dosyaya kaydet | |
| docker container stats | Bir veya birden fazla konteyner için CPU, bellek, ağ ve disk gibi mevcut kaynak kullanımını gerçek zamanlı gösterir | |
| docker stats my_container | Konteynerin gerçek zamanlı CPU, bellek, ağ ve disk kullanımını göster | |
| docker stats | Tüm konteynerler için istatistikleri göster | |
| docker stats --no-stream | İstatistikleri bir kez çıktıla ve çık | |
| docker container top | Konteyner içinde çalışan işlemleri gösterir, Linux’taki psbenzeri, konteyner etkinliğini analiz etmek için | |
| docker top my_container | Konteyner içinde çalışan işlemleri göster | |
| docker top my_container aux | 
 | |
| docker top my_container -eo pid,cmd | Yalnızca PID ve komut bilgilerini göster | |
| docker diff | Konteynerin dosya sistemindeki değişiklikleri temel imajına kıyasla gösterir; eklenen, değiştirilen veya silinen dosyaları belirtir | |
| docker diff my_container | Konteynerdeki dosya sistemi değişikliklerini göster | |
| docker diff my_container | grep '^A' | Yalnızca eklenen dosyaları göster ( | |
| docker diff my_container | grep '^C' | Yalnızca değiştirilen dosyaları göster ( | |
| docker cp | Konteyner ile host arasında dosya ve dizin kopyalar, veri paylaşımı ve yedekleme sağlar | |
| — | — | — | 
| docker cp my_container:/path/to/file ./file | Dosyayı konteynerden hosta kopyala | |
| docker cp ./config.yaml my_container:/app/config.yaml | Dosyayı hosttan konteynere kopyala | |
| docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR" | Log dosyasını kopyala ve hata satırlarını diske kaydetmeden filtrele | 
💡 İleri düzey hata ayıklama için
nsenter,strace,tcpdump,gdbve diğer düşük seviye araçları kullanabilirsiniz.
💼 İleri Düzey Docker Compose Kullanımı
🚀 Profesyonel Docker Compose Komutları
| Komut | Örnek | Açıklama | 
|---|---|---|
| docker compose up | docker-compose.ymldosyasındaki belirtilen servisleri başlat ve yaşam döngüsünü yönet; arka planda çalıştırma seçeneğiyle | |
| docker compose up -d web db | Yalnızca  | |
| docker compose up --build | Servisleri başlatmadan önce imajları yeniden oluştur | |
| docker compose up --remove-orphans | Geçerli compose dosyasında tanımlı olmayan konteynerleri kaldır | |
| docker compose build | Compose dosyasında tanımlı servislerin imajlarını önbellek kontrolü ve paralel derleme ile oluştur | |
| docker compose build --no-cache | Önbellek kullanmadan imajları tamamen yeniden oluştur | |
| docker compose build --parallel | Tüm servisleri aynı anda derle, süreci hızlandır | |
| docker compose build web | Yalnızca  | |
| docker compose pull | Tüm veya belirli servisler için kayıt defterinden en son imajları indir | |
| docker compose pull | Tüm servislerin imajlarını indir | |
| docker compose pull db | Yalnızca  | |
| docker compose pull --ignore-pull-failures | İmaj indirirken hataları yoksay ve devam et | |
| docker compose restart | Konteynerleri yeniden oluşturmadan tüm veya belirli servisleri yeniden başlat | |
| docker compose restart | Geçerli projedeki tüm servisleri yeniden başlat | |
| docker compose restart worker | Yalnızca  | |
| docker compose restart web db | Birden fazla servisi aynı anda yeniden başlat | |
| docker compose exec | Çalışan bir servis konteynerinde komut çalıştır; isteğe bağlı etkileşimli mod ile | |
| docker compose exec db psql -U user -d database | 
 | |
| docker compose exec web sh | 
 | |
| docker compose exec api curl http://localhost:8080 | 
 | |
| docker compose config | Tüm dosya ve ortam değişkenlerini dikkate alarak nihai Compose yapılandırmasını çıktıla | |
| docker compose config | Birleştirilmiş yapılandırmayı YAML formatında göster | |
| docker compose config --services | Tüm servisleri listele | |
| docker compose config --environment | Servisler tarafından kullanılan tüm ortam değişkenlerini göster | |
| docker compose watch | Kaynak dosyalar değiştiğinde servisleri otomatik olarak yeniden başlat — geliştirme için faydalı | |
| docker compose watch | Dosyaları izle ve değişikliklerde servisleri yeniden başlat | |
| docker compose events | Compose olaylarını akışla izle: servis başlatma, durdurma, güncelleme | |
| docker compose events --json | Olayları JSON formatında al | |
| docker compose rm | Durdurulmuş servis konteynerlerini kaldır | |
| docker compose rm web db | 
 | |
| docker compose pause | Servis işlemini duraklat | |
| docker compose pause api | 
 | |
| docker compose unpause | Duraklatılmış servisleri devam ettir | |
| docker compose unpause api | 
 | |
| docker compose create | Konteynerleri başlatmadan oluştur | |
| docker compose create web db | 
 | |
| docker compose images | Servisler tarafından kullanılan imaj listesini göster | |
| docker compose images | Tüm servislerin imajlarını görüntüle | |
| docker compose top | Servis konteynerlerinde çalışan işlemleri göster | |
| docker compose top web | 
 | 
🛠 Docker Compose ile Faydalı Uygulamalar ve Otomasyon
- Ortam Ayrımı 
 Farklı ortamlar için ayrı- docker-compose.override.ymldosyaları kullanın —- development,- staging,- production. Bu, yapılandırmaları izole eder ve ayarların çakışmasını önler.
 Ayrıca birden fazla config dosyasını- -fbayrağı ile birleştirebilirsiniz:- docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d- Ortam değişkenlerini yönetmek için farklı - .envdosyaları (- .env.dev,- .env.prodvb.) kullanın.
- Gizli Bilgilerin Güvenli Saklanması 
 Hassas verileri (parola, token) doğrudan Compose dosyalarına koymayın. Bunun yerine şunları kullanın:- Ortam değişkenleri için .envdosyaları (not:.envdosyaları şifrelenmez ve herkese açık repolara yüklenmemelidir)
 
- Docker Swarm’da güvenli secret ve yapılandırma yönetimi için docker secretvedocker config
 
- Gizli bilgileri içeren yapılandırma dosyaları için harici volumeler
 
- Harici secret yönetim sistemleri (örn. HashiCorp Vault, AWS Secrets Manager) 
 
- Ortam değişkenleri için 
- depends_onve- healthcheckile Başlatma Sırası
 Servislerin bağımlı oldukları servisler hazır olana kadar beklemesini sağlamak için:- services: db: image: postgres healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s retries: 5 api: image: my_api depends_on: db: condition: service_healthy
- Güncellemeler Sırasında Minimum Kesinti 
 Servisleri güncellemeden önce şunu çalıştırın:- docker compose pull && docker compose up -d --remove-orphans- -dseçeneği konteynerleri arka planda çalıştırır,- --remove-orphansmevcut konfiglerde tanımlı olmayan konteynerleri kaldırır.
 Gerekirse eski konteynerleri tamamen durdurmak ve kaldırmak için:- docker compose down --remove-orphans- Bu, yeni imajların yüklenmesini ve kullanılmayan konteynerlerin kesinti olmadan kaldırılmasını sağlar. 
- Geliştirme için Hot Code Reloading 
 Yerel dizinleri konteynerlere bağlamak için- volumeskullanın. Böylece imajları yeniden oluşturmadan kod değişiklikleri anında uygulanır.
 Özellikle Windows ve macOS’ta dosya izinleri ve dosya sistemi önbellek sorunlarına dikkat edin, aksi halde performans sorunları yaşanabilir.
- Volume’suz Hot Code Reloading (Compose 2.22+) - develop: watch: - path: ./src action: sync target: /app
- Servislerin Merkezi Loglaması 
 Konteyner loglarını ELK Stack, Loki, Prometheus ve Fluentd gibi sistemlere yönlendirerek kolay analiz ve uyarı sağlanabilir.
 Merkezi log toplama ve işleme için Docker log sürücülerini (- --log-driver) kullanın.
 Compose’da konteynerler için log sürücülerini yapılandırın:- services: api: image: my_api logging: driver: "json-file" options: max-size: "10m" max-file: "3"
- Otomatik Servis Yeniden Başlatma 
 - docker-compose.ymldosyasında restart politikası yapılandırın:- restart: unless-stopped- Diğer restart politikaları şunlardır: - no— otomatik yeniden başlatma yok (varsayılan)
 
- always— konteyneri her zaman yeniden başlat
 
- on-failure— yalnızca hatalarda yeniden başlat (isteğe bağlı tekrar deneme sayısı ile)
 - Üretimde, servis dayanıklılığı için en uygun seçim - unless-stoppeddeğeridir.
 Bu, servislerin hata veya host yeniden başlatmasından sonra otomatik olarak toparlanmasını sağlar.
- Servis Profilleri 
 Yalnızca belirli servis gruplarını çalıştırmaya izin verir:- services: db: image: postgres profiles: ["backend"] web: image: nginx profiles: ["frontend"]- Yalnızca frontend profilini çalıştırmak için: - docker compose --profile frontend up
🐞 Docker Compose Servislerinde Hata Ayıklama ve Profilleme
| Komut | Örnek | Açıklama | 
|---|---|---|
| docker compose exec | Çalışan bir servisin konteynerinde komut çalıştır; konteynere erişim veya ayrı işlemler çalıştırma imkanı sağlar | |
| docker compose exec web sh | 
 | |
| docker compose exec db psql -U user -d database | 
 | |
| docker compose logs | Tanılama ve izleme için servis loglarını görüntüle | |
| docker compose logs -f db | 
 | |
| docker compose logs --tail=50 api | 
 | |
| docker compose logs --since=1h web | 
 | |
| docker inspect | Bir servisi çalıştıran konteyner hakkında ayrıntılı bilgi görüntüle | |
| docker inspect $(docker compose ps -q web) | 
 | |
| docker container stats | Servis konteynerlerinin kaynak kullanımını izle | |
| docker stats $(docker compose ps -q worker) | 
 | |
| docker compose run --rm | Hata ayıklama için servis ayarlarıyla geçici konteyner çalıştır | |
| docker compose run --rm web sh | 
 | |
| docker container cp | Host ile konteyner arasında dosya kopyala | |
| docker cp $(docker compose ps -q db):/dump.sql ./dump.sql | 
 | 
💡 Çok servisli karmaşık kurulumların hata ayıklamasında
docker compose run --rmkullanarak gerekli ağlar ve volumeler ile bireysel konteynerler başlatabilirsiniz; ana servisler etkilenmez.
📚 Ek Kaynaklar
🚫 .dockerignore ile Dosyaları Hariç Tutma
İmaj boyutunu küçültmek ve build süresini hızlandırmak için imaja dahil edilmemesi gereken dosya ve klasörleri .dockerignore dosyasına ekleyin:
node_modules/
*.log
.env⚡ Komutları Kısayollarla Basitleştirme
Sık kullanılan komutlar için alias tanımlayarak daha hızlı çalıştırabilirsiniz:
alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"🧠 İpucu: Docker Kullanım Tavsiyeleri
- Her şeyi ezberlemeye çalışmayın — komutları keşfetmek için docker --helpveyadocker <command> --helpkullanın.
 
- Düzenli olarak pratik yapın ve basit projelerle deneyin.
 
- İmaj boyutlarını takip edin ve - .dockerignoreile gereksiz dosyaları kaldırın.
🌐 Faydalı Bağlantılar
📘 Resmi Docker Dokümantasyonu — tüm Docker konuları hakkında kapsamlı rehberler ve referanslar:
https://docs.docker.com/
📙 Docker Cheat Sheet — resmi tam Docker hızlı başvuru kılavuzu:
https://dockerlabs.collabnix.com/docker/cheatsheet/
📗 Docker Hub — imajlar ve kayıt defterleri:
https://hub.docker.com/