Güvenlik Best Practices
1. Root Olmayan Kullanıcı
FROM node:18-alpine
# Kullanıcı oluştur
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
WORKDIR /app
COPY --chown=appuser:appgroup . .
# Kullanıcıyı değiştir
USER appuser
CMD ["node", "server.js"]
2. Read-Only Filesystem
docker run --read-only \
--tmpfs /tmp \
--tmpfs /var/run \
myapp
3. Capabilities Kısıtlama
# Tüm capabilities'i kaldır
docker run --cap-drop ALL myapp
# Gerekli olanları ekle
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE myapp
4. Resource Limits
docker run -d \
--memory 512m \
--memory-swap 512m \
--cpus 0.5 \
--pids-limit 100 \
myapp
Image Güvenliği
# Image tarama
docker scan myapp:latest
# Trivy ile tarama
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy image myapp:latest
Secrets Yönetimi
# Docker secret oluştur
echo "mysecret" | docker secret create db_password -
# Compose'da kullanım
version: '3.8'
services:
db:
image: mysql
secrets:
- db_password
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_password
secrets:
db_password:
external: true
.dockerignore
# .dockerignore
.git
.env
*.log
node_modules
Dockerfile
docker-compose.yml
.dockerignore
*.md
tests/
.coverage