format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightDocker Konteynerlarında Çevresel Değişkenler: Kapsamlı Rehber
- arrow_rightDocker'da Çevresel Değişkenlerin Önemi
- arrow_rightNeden Environment Variables Kullanılmalı?
- arrow_rightDocker Environment Variables Nasıl Ayarlanır?
- arrow_rightDockerfile ile ENV Kullanımı
- arrow_rightdocker run Komutu ile -e Bayrağı
- arrow_rightDocker Compose ile Ortam Değişkenleri
- arrow_rightÇevresel Değişkenlerin Uygulama İçinde Okunması
- arrow_rightNode.js Örneği
- arrow_rightPython Örneği
- arrow_rightPHP Örneği
- arrow_rightProduction En İyi Uygulamaları
- arrow_right.env Dosyaları Kullanımı
- arrow_rightSecret Yönetimi
- arrow_rightSık Yapılan Hatalar ve Çözümleri
- arrow_right1. Hassas Verilerin Dockerfile'da Saklanması
- arrow_right2. Varsayılan Değer Eksikliği
- arrow_right3. Ortam Değişkenlerinin Tutarsız Kullanımı
- arrow_rightÖrnek Senaryolar ve Uygulamalar
- arrow_rightÇoklu Ortam Yapılandırması
- arrow_rightRedis Entegrasyonu
- arrow_rightWebhook ve API Entegrasyonları
- arrow_rightDocker Environment Variables Performans İpuçları
- arrow_rightSonuç ve Öneriler
Docker Konteynerlarında Çevresel Değişkenler: Kapsamlı Rehber
Çevresel değişkenler (environment variables), Docker konteynerlarının çalışma zamanında alması gereken yapılandırma değerlerini taşıyan temel mekanizmalardır. Uygulamalarınızın farklı ortamlarda (geliştirme, test, üretim) tutarlı şekilde çalışmasını sağlayan bu değişkenler, modern mikroservis mimarilerinin vazgeçilmez bir parçası haline gelmiştir. Docker volume yapılandırması gibi konfigürasyon araçlarıyla birlikte kullanıldığında, konteynerlarınız tamamen taşınabilir hale gelir.
Docker'da Çevresel Değişkenlerin Önemi
Çevresel değişkenler, konteynerlaştırılmış uygulamalar için kritik öneme sahiptir. Statik yapılandırma dosyalarının aksine, environment variable'lar konteyner yeniden oluşturulmadan değerlerin değiştirilmesine olanak tanır. Docker'ın 2023 verilerine göre, kurumsal kullanıcların %87'si üretim ortamlarında çevresel değişkenlere güvenmektedir.
Neden Environment Variables Kullanılmalı?
- Taşınabilirlik: Aynı imaj farklı ortamlarda farklı değerlerle çalışabilir
- Güvenlik: Hassas bilgiler (API anahtarları, şifreler) kod deposunda saklanmaz
- Esneklik: Konteyner yeniden build edilmeden yapılandırma değiştirilebilir
- 12-Factor App: Modern uygulama mimarisinin temel prensiplerinden biridir
Docker Environment Variables Nasıl Ayarlanır?
Docker'da çevresel değişkenleri ayarlamanın birden fazla yöntemi bulunmaktadır. Her yöntemin avantajları ve kullanım senaryoları farklıdır.
Dockerfile ile ENV Kullanımı
Dockerfile'da ENV komutu ile sabit değerler tanımlanabilir. Bu yöntem, varsayılan değerleri imaja gömmek için idealdir:
FROM node:18-alpine
ENV NODE_ENV=production
ENV APP_PORT=3000
ENV DATABASE_URL=postgres://localhost:5432/myapp
Dockerfile'da tanımlanan değişkenler, konteyner oluşturulduğunda otomatik olarak ayarlanır. Ancak bu yöntem, hassas bilgiler için önerilmez çünkü imaj geçmişi incelenerek bu değerler görülebilir.
docker run Komutu ile -e Bayrağı
Çalışma zamanında environment variable eklemek için -e bayrağı kullanılır:
docker run -e APP_ENV=production -e DB_PASSWORD=secret123 myapp:latest
Birden fazla değişken için kısayol:
docker run --env-file .env myapp:latest
Bu yöntem, Ansible ile sunucu yapılandırma otomasyonu süreçlerinizle entegre edilebilir ve CI/CD pipeline'larında dinamik değerler sağlayabilir.
Docker Compose ile Ortam Değişkenleri
Docker Compose, çoklu konteyner uygulamaları için ideal bir yapılandırma sunar:
version: '3.8'
services:
web:
image: myapp:latest
environment:
- NODE_ENV=production
- DB_HOST=postgres
env_file:
- ./config/production.env
postgres:
image: postgres:15
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
Docker Compose, özel bulut altyapılarında çalışan konteyner orkestrasyonu için de yaygın olarak kullanılmaktadır.
Çevresel Değişkenlerin Uygulama İçinde Okunması
Docker konteynerlarında çevresel değişkenler, uygulama tarafından standart yöntemlerle okunabilir. Farklı programlama dillerinde kullanım örnekleri:
Node.js Örneği
const dbHost = process.env.DB_HOST || 'localhost';
const dbPort = process.env.DB_PORT || 5432;
console.log(`Veritabanı bağlantısı: ${dbHost}:${dbPort}`);
Python Örneği
import os
api_key = os.environ.get('API_KEY', 'default_key')
debug_mode = os.environ.get('DEBUG', 'false').lower() == 'true'
PHP Örneği
$dbHost = getenv('DB_HOST') ?: 'localhost';
$appEnv = $_ENV['APP_ENV'] ?? 'development';
PHP sürüm güncelleme süreçlerinde, environment variable'ların doğru okunması için PHP-FPM konfigürasyonunun kontrol edilmesi önemlidir.
Production En İyi Uygulamaları
Üretim ortamlarında çevresel değişken yönetimi, güvenlik ve bakım açısından dikkatli bir yaklaşım gerektirir.
.env Dosyaları Kullanımı
Yerel geliştirme ortamında .env dosyası kullanımı yaygındır:
# .env dosyası
DB_PASSWORD=gizli_sifre_123
API_KEY=xxx-yyy-zzz
REDIS_URL=redis://cache:6379
.env dosyası .gitignore'a eklenmelidir:
echo ".env" >> .gitignore
Secret Yönetimi
Hassas veriler için Docker Secrets veya harici secret yönetim araçları kullanılmalıdır:
| Yöntem | Açıklama | Kullanım Senaryosu |
|---|---|---|
| Docker Secrets | Swarm mode'da şifrelenmiş depolama | Docker Swarm kullanan projeler |
| HashiCorp Vault | Dış secret yönetim servisi | Kurumsal ortamlar, mikroservisler |
| AWS Secrets Manager | Bulut tabanlı secret yönetimi | AWS üzerinde çalışan konteynerler |
| Kubernetes Secrets | K8s native secret yönetimi | Kubernetes orchestrator kullanımı |
Bu secret yönetimi yaklaşımları, sunucu güvenliği stratejilerinizin önemli bir parçası olmalıdır.
Sık Yapılan Hatalar ve Çözümleri
1. Hassas Verilerin Dockerfile'da Saklanması
Hatalı:
ENV API_KEY=secret123 # Güvensiz!
Doğru:
# Çalışma zamanında verilir
docker run -e API_KEY myapp:latest
# veya secret kullanılır
echo "$API_KEY" | docker secret create api_key -
2. Varsayılan Değer Eksikliği
Uygulamalar çökmemek için varsayılan değerler içermelidir:
// Kötü örnek
const dbUrl = process.env.DB_URL; // undefined olabilir
// İyi örnek
const dbUrl = process.env.DB_URL || 'postgres://localhost:5432/dev';
3. Ortam Değişkenlerinin Tutarsız Kullanımı
Tüm ortamlar için aynı değişken adları kullanılmalıdır. MySQL slow query log yapılandırmasında olduğu gibi, veritabanı bağlantı ayarları tüm ortamlarda tutarlı olmalıdır.
Örnek Senaryolar ve Uygulamalar
Çoklu Ortam Yapılandırması
Farklı ortamlar için ayrı .env dosyaları oluşturulabilir:
# .env.development
DEBUG=true
LOG_LEVEL=debug
DB_HOST=localhost
# .env.production
DEBUG=false
LOG_LEVEL=error
DB_HOST=prod-db.example.com
# .env.test
DEBUG=true
LOG_LEVEL=debug
DB_HOST=test-db.example.com
Redis Entegrasyonu
Cache yapılandırması için environment variables:
docker run -e REDIS_HOST=redis-server \
-e REDIS_PORT=6379 \
-e REDIS_TLS=true \
myapp:latest
Bu yapılandırma, Redis object cache kullanımıyla WordPress performansını artırmak için de kullanılabilir.
Webhook ve API Entegrasyonları
Harici servisler için API anahtarları environment variable ile yönetilir:
docker run -e STRIPE_API_KEY=sk_live_xxx \
-e SENDGRID_API_KEY=SG.xxx \
-e TWILIO_AUTH_TOKEN=xxx \
payment-service:latest
Docker Environment Variables Performans İpuçları
Environment variable kullanımında performans optimizasyonları:
- Az sayıda değişken kullanın: Çok fazla environment variable, konteyner başlatma süresini uzatabilir
- Değerleri önbelleğe alın: Sık kullanılan değerler uygulama başlangıcında okunup değişkende saklanabilir
- Validation ekleyin: Gerekli değişkenlerin mevcut olduğunu uygulama başında kontrol edin
- Monitoring kurun: Environment variable değişikliklerini izlemek için ELK Stack kullanılabilir
Sonuç ve Öneriler
Docker konteynerlarında çevresel değişkenler, modern uygulama geliştirme süreçlerinin temel yapı taşlarından biridir. Doğru kullanıldığında uygulamalarınızın taşınabilirliğini, güvenliğini ve yönetilebilirliğini artırır. Ancak hassas verilerin korunması, tutarlı yapılandırma ve uygun secret yönetimi konularında dikkatli olunmalıdır.
Production ortamlarında environment variable yönetimi için Docker Secrets, HashiCorp Vault veya bulut tabanlı secret servisleri kullanmanızı öneriyoruz. Geliştirme süreçlerinizde Docker CI/CD pipeline'larını entegre ederek environment variable'ların otomatik yönetimini sağlayabilirsiniz.