🐳 Docker

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
Yayınlanma Tarihi

31 Ağustos 2025

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

test1 deposundan latest etiketli imajı sil

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

container adlı konteyner içinde etkileşimli bash shell aç

docker exec container ls /app

Konteyner içinde /app dizininde ls komutunu çalıştır

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

container adlı konteynerin tüm loglarını göster

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

container konteynerinin detaylarını göster

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

old_name olan konteyneri new_name olarak yeniden adlandır

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

container adlı konteynerin işlemlerini göster

docker container pause Bir konteynerdeki tüm işlemleri duraklat
docker pause container

container konteynerini duraklat

docker container unpause Duraklatılmış bir konteyneri devam ettir
docker unpause container

container konteynerini devam ettir

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 my_image etiketli imaj oluştur

docker build -t my_image:1.0 .

1.0 etiketli imaj oluştur

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

container konteynerinden v1 etiketli my_img imajını oluştur

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

myrepo kayıt defterine göndermek için etiket ekle

docker tag my_image:1.0 my_image:stable

1.0 etiketli imaj için stable etiketi oluştur

docker tag my_image my_image:backup

Yerel imaja backup etiketi ekle

docker image push Bir imajı Docker Hub veya başka bir kayıt defterine gönder
docker push myrepo/my_image:latest

latest etiketli imajı myrepo deposuna gönder

docker push myrepo/my_image:1.0

1.0 etiketli imajı gönder

docker push myrepo/my_image

Varsayılan latest etiketi ile imaj gönder

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

bridge sürücüsüne sahip ağları göster

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 my_net adlı ağ oluştur

docker network create --driver bridge my_bridge_net

bridge sürücüsüyle ağ oluştur

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

container adlı konteyneri my_net ağına bağla

docker network connect --alias db_net my_net container

db_net takma adıyla bağla

docker network disconnect Bir konteyneri ağdan ayır
docker network disconnect my_net container

container konteynerini my_net ağından ayır

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

my_vol adlı volume oluştur

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

my_vol volume detaylarını JSON formatında görüntüle

docker volume rm Bir veya daha fazla volume sil
docker volume rm my_vol

my_vol adlı volume sil

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.yml iç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 up ile 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 web servisine ait logları göster

docker compose exec Çalışan bir servis konteynerinde komut çalıştır
docker compose exec web bash

web servisi konteynerinde etkileşimli bash shell aç

docker compose exec db ls /var/lib/postgresql

Veritabanı konteynerinde ls komutunu çalıştır

docker compose exec -d worker touch /tmp/done

worker konteynerinde detached modda komut çalıştır

docker compose build Servis imajlarını oluştur veya yeniden oluştur
docker compose build

docker-compose.yml’de tanımlı tüm imajları oluştur

docker compose build web

Yalnızca web servisi imajını oluştur

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 web servisi için imaj indir

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 db servisini yeniden başlat

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

web servisini başlat

docker compose start db api

Birden fazla servisi aynı anda başlat

docker compose stop Servisleri konteynerleri silmeden durdur
docker compose stop web

web servisini durdur

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

-o bayrağı ile konteyner ID’sine göre dışa aktar

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

mystack stack’ini kaldır

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 build yerine 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'

nginx imajıyla ilgili olayları göster

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ı unless-stopped yap

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 (A — Added)

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 alpine veya scratch gibi temel imajlar kullanın.
    Katmanları birleştirmek için build sırasında --squash kullanabilirsiniz (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 RUN iç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
    .env dosyaları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=value veya .env)
    • yapılandırmalar için harici volumeler

  • Build zamanı sırları (BuildKit)
    Güvenli secret aktarımı için --secret bayrağını kullanın:

    docker buildx build --secret id=mysecret,src=./secret.txt .

    Dockerfile’da secret /run/secrets/mysecret yolunda 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 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 (with strace) Başka bir işlemin namespace’lerine girmek için Linux aracı (burada konteyner). strace ile 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 ps benzeri, 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

ps aux gibi alternatif çıktı formatı kullan

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 (A — Added)

docker diff my_container | grep '^C'

Yalnızca değiştirilen dosyaları göster (C — Changed)

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, gdb ve 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.yml dosyası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 web ve db servislerini detached modda çalıştır

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 web servisi için imaj oluştur

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 db servisi için imaj indir

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 worker servisini yeniden başlat

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

db servisi konteynerinde psql çalıştır

docker compose exec web sh

web konteynerinde shell aç

docker compose exec api curl http://localhost:8080

api servisi konteynerinden curl isteği çalıştır

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

web ve db servislerinin konteynerlerini kaldır

docker compose pause Servis işlemini duraklat
docker compose pause api

api servisini duraklat

docker compose unpause Duraklatılmış servisleri devam ettir
docker compose unpause api

api servisini devam ettir

docker compose create Konteynerleri başlatmadan oluştur
docker compose create web db

web ve db için konteynerler oluştur ama başlatma

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

web servisi konteynerlerindeki işlemleri göster

🛠 Docker Compose ile Faydalı Uygulamalar ve Otomasyon

  • Ortam Ayrımı
    Farklı ortamlar için ayrı docker-compose.override.yml dosyaları 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ı -f bayrağı 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ı .env dosyaları (.env.dev, .env.prod vb.) 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 .env dosyaları (not: .env dosyaları şifrelenmez ve herkese açık repolara yüklenmemelidir)
    • Docker Swarm’da güvenli secret ve yapılandırma yönetimi için docker secret ve docker config
    • Gizli bilgileri içeren yapılandırma dosyaları için harici volumeler
    • Harici secret yönetim sistemleri (örn. HashiCorp Vault, AWS Secrets Manager)

  • depends_on ve healthcheck ile 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

    -d seçeneği konteynerleri arka planda çalıştırır, --remove-orphans mevcut 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 volumes kullanı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.yml dosyası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-stopped değ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

web servisi konteynerinde shell aç

docker compose exec db psql -U user -d database

db servisi konteynerinde psql komutunu çalıştır

docker compose logs Tanılama ve izleme için servis loglarını görüntüle
docker compose logs -f db

db servisi loglarını gerçek zamanlı izle

docker compose logs --tail=50 api

api servisi konteynerinden son 50 satırı göster

docker compose logs --since=1h web

web servisi için son bir saatin loglarını göster

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)

web servisi konteyneri hakkında ayrıntılı JSON bilgisi al

docker container stats Servis konteynerlerinin kaynak kullanımını izle
docker stats $(docker compose ps -q worker)

worker servisi konteynerinin CPU, bellek ve diğer kaynak kullanımını takip et

docker compose run --rm Hata ayıklama için servis ayarlarıyla geçici konteyner çalıştır
docker compose run --rm web sh

web servisi için etkileşimli shell ile tek seferlik konteyner başlat

docker container cp Host ile konteyner arasında dosya kopyala
docker cp $(docker compose ps -q db):/dump.sql ./dump.sql

db servisi konteynerinden hosta dosya kopyala

💡 Çok servisli karmaşık kurulumların hata ayıklamasında docker compose run --rm kullanarak 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 --help veya docker <command> --help kullanın.
  • Düzenli olarak pratik yapın ve basit projelerle deneyin.
  • İmaj boyutlarını takip edin ve .dockerignore ile 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/