🐳 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.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 |
|
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 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' |
|
|
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çinalpineveyascratchgibi 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ı tekRUNiç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:$PATHKontrol:
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_imageVeya yeni CLI’yı kullanın:
docker scout cves my_imageBu, 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 myimageBu, 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 myimageDisk 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 (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 |
|
|
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.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 |
|
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 -dOrtam 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_onvehealthcheckile 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_healthyGü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-orphansBu, 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çinvolumeskullanı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: /appServislerin 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-stoppedDiğ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/