Docker Cheatsheet 🔨 Build # Basit build
docker build -t <REGISTRY>/<IMAGE>:<TAG> .
# Specific Dockerfile
docker build -f deploy/Dockerfile.prod -t app:prod .
# Build arg geçir
docker build --build-arg VERSION = 1 .2.3 --build-arg COMMIT = $( git rev-parse HEAD) -t app .
# Multi-platform build (BuildKit/buildx)
docker buildx build --platform linux/amd64,linux/arm64 -t <REGISTRY>/<IMAGE>:<TAG> --push .
# Cache'e öncelik ver (büyük imajlar için)
docker buildx build \
--cache-from type = registry,ref= <REGISTRY>/<IMAGE>:cache \
--cache-to type = registry,ref= <REGISTRY>/<IMAGE>:cache,mode= max \
-t <REGISTRY>/<IMAGE>:<TAG> .
# Secret mount (Dockerfile'da `--mount=type=secret,id=<ID>`)
docker build --secret id = npm,src= $HOME /.npmrc -t app .
# SSH agent forward (private repo install için)
docker build --ssh default -t app .
▶️ Run # Detached + named + port + volume + env
docker run -d \
--name app \
--restart unless-stopped \
-p 8080 :8080 \
-v $( pwd ) /data:/app/data \
-e DB_HOST = postgres \
--env-file .env \
<REGISTRY>/<IMAGE>:<TAG>
# Ephemeral container, exit'te sil
docker run --rm -it ubuntu:22.04 bash
# Read-only filesystem (security)
docker run --rm -it --read-only --tmpfs /tmp <IMAGE>
# Resource limits
docker run -d --memory= 512m --cpus= 0 .5 --pids-limit= 100 <IMAGE>
# Non-root override (image root user'a ayarlanmış olabilir)
docker run --user 1000 :1000 <IMAGE>
# Network seç
docker run --network bridge| host| none| <NET_NAME> <IMAGE>
# Linux capabilities ayarla (least privilege)
docker run --cap-drop= ALL --cap-add= NET_BIND_SERVICE <IMAGE>
🐚 Exec / Logs / Stats # Çalışan container'a gir
docker exec -it app /bin/sh
docker exec -it app /bin/bash
# Tek komut çalıştır
docker exec app printenv DB_HOST
docker exec app cat /etc/hostname
# Loglar
docker logs app
docker logs -f --tail= 100 --since= 10m app
docker logs app 2 >& 1 | grep ERROR
# Resource kullanımı
docker stats
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
# Container detayı (her şey)
docker inspect app
docker inspect app --format '{{.NetworkSettings.IPAddress}}'
docker inspect app --format '{{json .Mounts}}' | jq
🌐 Networks # Network listesi
docker network ls
docker network inspect bridge
# Custom network
docker network create app-net
docker network create --driver bridge --subnet 172 .20.0.0/16 app-net
# Container'ı network'e bağla
docker network connect app-net app
docker network disconnect bridge app
# DNS isim çözümlemesi (custom network'te otomatik)
docker run --network app-net --name api <IMAGE>
docker run --network app-net curlimages/curl curl http://api:8080 # hostname olarak çalışır
💾 Volumes # Volume listesi
docker volume ls
docker volume inspect <VOLUME>
# Named volume
docker run -v pgdata:/var/lib/postgresql/data postgres:16
# Bind mount (host path)
docker run -v $( pwd ) /config:/etc/app:ro <IMAGE>
# tmpfs (RAM'de, disk yazmaz — security için)
docker run --tmpfs /tmp:size= 100M,mode= 1777 <IMAGE>
# Volume backup
docker run --rm -v pgdata:/data -v $( pwd ) :/backup ubuntu \
tar czf /backup/pgdata.tar.gz /data
# Volume restore
docker run --rm -v pgdata:/data -v $( pwd ) :/backup ubuntu \
bash -c "cd /data && tar xzf /backup/pgdata.tar.gz --strip 1"
🧹 Prune (cleanup) # Tüm durmuş container'lar
docker container prune
# Tüm referans verilmemiş image'lar (dangling)
docker image prune
# Tüm kullanılmayan image'lar (dangling + unreferenced)
docker image prune -a
# Volume'lar (DİKKAT: data silinir)
docker volume prune
# Hepsi tek komutla
docker system prune -a --volumes
# Disk kullanımı raporu
docker system df
docker system df -v # detaylı
🔐 Registry # Login
docker login <REGISTRY>
docker login ghcr.io -u <USER> # token stdin'den
# Tag + push
docker tag local-image <REGISTRY>/<IMAGE>:<TAG>
docker push <REGISTRY>/<IMAGE>:<TAG>
# Pull specific platform
docker pull --platform linux/arm64 <IMAGE>
# Image manifest (digest'i öğren)
docker manifest inspect <REGISTRY>/<IMAGE>:<TAG>
🐳 Compose # Up + detached
docker compose up -d
docker compose up -d --build # tekrar build et
docker compose up -d --force-recreate
# Down
docker compose down
docker compose down -v # volume'leri de sil
# Specific service
docker compose up -d api
docker compose restart api
docker compose logs -f api
# Config validate
docker compose config
docker compose config --quiet # syntax check, çıktı yok
# Service exec
docker compose exec api /bin/sh
# Resource sınırı
docker compose ps
docker compose top
docker compose stats
📋 BuildKit özel komutları # BuildKit aktif et
export DOCKER_BUILDKIT = 1
# buildx instance oluştur (multi-platform için gerekli)
docker buildx create --name mybuilder --use
docker buildx ls
docker buildx inspect --bootstrap
# History inspect (cache hit/miss debug)
docker buildx build --progress= plain ...
🔍 Image incele # Layer'lara bak (her birinin boyutu)
docker history <IMAGE>
docker history <IMAGE> --no-trunc
# Image içeriği (filesystem)
docker save <IMAGE> -o image.tar
tar tf image.tar
# veya:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
wagoodman/dive:latest <IMAGE>
# Image labels
docker inspect <IMAGE> --format '{{json .Config.Labels}}' | jq
# Image config
docker inspect <IMAGE> --format '{{json .Config}}' | jq
⚡ Faydalı one-liner'lar # Tüm container'ları durdur
docker stop $( docker ps -q)
# Tüm container'ları sil (durmuş + çalışan)
docker rm -f $( docker ps -aq)
# Bir image'a bağlı tüm container'ları öldür
docker ps -a -q --filter ancestor = <IMAGE> | xargs docker rm -f
# Belirli pattern'lı image'ları sil
docker images --format '{{.Repository}}:{{.Tag}}' | grep '<PATTERN>' | xargs docker rmi
# Container disk kullanımı
docker ps --size
# Image vulnerability scan
docker scout cves <IMAGE>
trivy image <IMAGE>
grype <IMAGE>
🆘 "Acil" senaryolar Sorun Çözüm Cannot connect to Docker daemon sudo systemctl start docker; user docker group'ta mı? permission denied (volume mount) SELinux: :Z ekle (-v $PWD:/app:Z); user/group eşleştir Imaj çok büyük dive ile layer analizi; multi-stage build; .dockerignore Build cache hit etmiyor COPY sırasını değiştir (least-changing önce); --no-cache ile diff'i gör OCI runtime exec failed imaj /bin/sh veya /bin/bash içermiyor; BusyBox ile başla Container restarting (loop) docker logs <NAME> → entrypoint hatası; restart: no ile başlat, docker exec no space left on device docker system prune -a --volumes; df -h /var/lib/docker