format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightDocker Compose Projelerinde Environment (.env) Dosyası Kullanımı
- arrow_right.env Dosyası Nedir ve Neden Kullanılır?
- arrow_right.env Dosyası Temel Sözdizimi
- arrow_rightDocker Compose ile .env Dosyası Kullanımı
- arrow_rightTemel docker-compose.yml Yapılandırması
- arrow_rightargs Parametresi ile Kullanım
- arrow_rightDocker Compose .env Dosyası Öncelik Sırası
- arrow_right--env-file Seçeneği
- arrow_rightGüvenlik En İyi Uygulamaları
- arrow_right1. .gitignore'a Ekleyin
- arrow_right2. Örnek Dosya Oluşturun
- arrow_right3. Docker Secrets Kullanın
- arrow_rightPratik Kullanım Senaryoları
- arrow_rightÇoklu Ortam Yapılandırması
- arrow_rightVeritabanı Yapılandırması
- arrow_rightSık Yapılan Hatalar ve Çözümleri
- arrow_rightHata 1: Değişken Değeri Boş Geliyor
- arrow_rightHata 2: Tırnak İşareti Sorunları
- arrow_rightHata 3: Varsayılan Değer Kullanımı
- arrow_rightDocker Compose ve .env İle İlgili Diğer Kaynaklar
- arrow_rightSonuç
Docker Compose Projelerinde Environment (.env) Dosyası Kullanımı
Docker Compose, çoklu konteyner uygulamalarını tanımlamak ve çalıştırmak için kullanılan güçlü bir araçtır. Bu araçla birlikte .env dosyası kullanmak, uygulama yapılandırmasını esnek ve güvenli hale getirir. Environment değişkenleri, uygulamanızın farklı ortamlarda (geliştirme, test, üretim) sorunsuz çalışmasını sağlar.
Modern yazılım geliştirme süreçlerinde, deployment ve konfigürasyon yönetimi kritik öneme sahiptir. Docker Compose ile .env dosyası kullanımı, bu süreçleri standardize eder.
.env Dosyası Nedir ve Neden Kullanılır?
.env dosyası, ortam değişkenlerini anahtar-değer çiftleri halinde saklayan basit bir metin dosyasıdır. Bu dosya, uygulama yapılandırmasını kod tabanından ayrı tutarak önemli avantajlar sağlar:
- Güvenlik: Hassas bilgiler (API anahtarları, veritabanı şifreleri) kaynak kodunda saklanmaz
- Taşınabilirlik: Aynı proje farklı geliştiriciler veya ortamlar arasında kolayca paylaşılabilir
- Esneklik: Ortam bazlı yapılandırma değişiklikleri kod değişikliği gerektirmez
- Kolay Yönetim: Yapılandırma tek bir yerden yönetilir
.env Dosyası Temel Sözdizimi
.env dosyasındaki her satır bir ortam değişkenini temsil eder. Temel format şu şekildedir:
VERITABANI_HOST=localhost
VERITABANI_KULLANICI=root
VERITABANI_SIFRE=gizli_sifre_123
API Anahtarı=your_api_key_here
PORT=5432
Docker Compose, bu dosyayı otomatik olarak okur ve ortam değişkenlerini konteynerlere aktarır.
Docker Compose ile .env Dosyası Kullanımı
Temel docker-compose.yml Yapılandırması
Docker Compose, projenizin kök dizinindeki .env dosyasını otomatik olarak okur. İşte temel bir örnek:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "${PORT}:80"
environment:
- VERITABANI_HOST=${VERITABANI_HOST}
- VERITABANI_KULLANICI=${VERITABANI_KULLANICI}
postgres:
image: postgres:15
environment:
POSTGRES_USER: ${VERITABANI_KULLANICI}
POSTGRES_PASSWORD: ${VERITABANI_SIFRE}
POSTGRES_DB: uygulama_db
volumes:
- postgres_data:/var/lib/postgresql/data
Bu yapılandırmada, ${DEGISKEN_ADI} sözdizimi ile .env dosyasındaki değerler referans alınır.
args Parametresi ile Kullanım
Docker Compose'da build argümanları için de .env dosyası kullanılabilir:
version: '3.8'
services:
web:
build:
context: .
args:
NODE_VERSION: ${NODE_VERSION}
API_URL: ${API_URL}
image: myapp:latest
Docker Compose .env Dosyası Öncelik Sırası
Docker Compose, ortam değişkenlerini farklı kaynaklardan okur ve belirli bir öncelik sırasına göre işler. Bu sıralamayı anlamak, yapılandırma hatalarını önlemek için kritiktir.
| Öncelik | Kaynak | Açıklama |
|---|---|---|
| 1 | Komut satırı ortam değişkenleri | Terminalden aktarılan değişkenler |
| 2 | shell ortamı | Kabuk oturumunda tanımlı değişkenler |
| 3 | .env dosyası | Proje kökündeki .env dosyası |
| 4 | docker-compose.override.yml | Geçersiz kılma yapılandırması |
--env-file Seçeneği
Varsayılan .env dosyası yerine farklı bir dosya kullanmak istediğinizde --env-file parametresini kullanabilirsiniz:
docker-compose --env-file .env.production up
Bu komut, .env.production dosyasını kullanarak konteynerleri başlatır. Bu özellik, farklı ortamlar arasında geçiş yapmak için idealdir.
Güvenlik En İyi Uygulamaları
.env dosyası kullanırken güvenlik en üst düzeyde tutulmalıdır. İşte dikkat edilmesi gereken kritik noktalar:
1. .gitignore'a Ekleyin
.env dosyasının versiyon kontrol sistemine eklenmemesi gerekir. Projenizin .gitignore dosyasına şu satırı ekleyin:
# .gitignore dosyasına ekleyin
.env
.env.local
.env.*.local
2. Örnek Dosya Oluşturun
Ekip üyelerinin hangi değişkenlere ihtiyaç duyduğunu bilmesi için bir .env.example dosyası oluşturun:
# .env.example - Bu dosyayı kopyalayıp .env olarak yeniden adlandırın
VERITABANI_HOST=localhost
VERITABANI_KULLANICI=myapp
VERITABANI_SIFRE=
API_URL=http://localhost:3000
3. Docker Secrets Kullanın
Üretim ortamında daha yüksek güvenlik için Docker Secrets'ı tercih edin. Özellikle veri merkezi altyapılarında bu kritik öneme sahiptir.
Pratik Kullanım Senaryoları
Çoklu Ortam Yapılandırması
Farklı ortamlar için ayrı .env dosyaları oluşturabilirsiniz:
# .env.development
NODE_ENV=development
API_URL=http://localhost:3000
LOG_LEVEL=debug
# .env.production
NODE_ENV=production
API_URL=https://api.example.com
LOG_LEVEL=error
Ortamlar arası geçiş için şu komutları kullanabilirsiniz:
# Geliştirme ortamı
docker-compose --env-file .env.development up
# Üretim ortamı
docker-compose --env-file .env.production up
Veritabanı Yapılandırması
Veritabanı bağlantıları için .env dosyası kullanımı yaygın bir pratiktir:
version: '3.8'
services:
app:
image: node:18-alpine
environment:
- DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@postgres:5432/${DB_NAME}
depends_on:
- postgres
postgres:
image: postgres:15-alpine
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
Sık Yapılan Hatalar ve Çözümleri
Hata 1: Değişken Değeri Boş Geliyor
.env dosyasındaki değerler okunmuyorsa, dosya yolunu kontrol edin. .env dosyası mutlaka docker-compose.yml ile aynı dizinde olmalıdır.
Hata 2: Tırnak İşareti Sorunları
Değerlerde özel karakterler varsa tırnak kullanın:
# Doğru kullanım
API_KEY="abc123!@#$%"
DATABASE_URL="postgres://user:pass@host:5432/db"
# Yanlış kullanım
API_KEY=abc123!@#$%
Hata 3: Varsayılan Değer Kullanımı
Bazı değişkenler için varsayılan değer tanımlamak isterseniz:
services:
web:
environment:
- PORT=${PORT:-80} # PORT tanımlanmamışsa 80 kullanılır
- HOST=${HOST:-localhost}
Docker Compose ve .env İle İlgili Diğer Kaynaklar
Docker Compose becerilerinizi geliştirmek için şu kaynaklara göz atabilirsiniz:
- Nginx Önbellekleme Performans Ayarları - Web sunucu optimizasyonu
- Sunucu İşlemci Soğutma Rehberi - Altyapı yönetimi
- Resmi Docker Dokümantasyonu - Kapsamlı teknik referans
Sonuç
Docker Compose projelerinde .env dosyası kullanımı, modern yazılım geliştirme pratiğinin temel taşlarından biridir. Doğru uygulandığında, uygulamanızı daha güvenli, taşınabilir ve bakımı kolay hale getirir.
Bu rehberde ele aldığımız konuları özetleyecek olursak:
- .env dosyası ile ortam değişkenlerini merkezi olarak yönetin
- Güvenlik için dosyayı .gitignore'a ekleyin
- Ekibiniz için .env.example dosyası oluşturun
- Farklı ortamlar için ayrı .env dosyaları kullanın
- Varsayılan değerlerle hata olasılığını azaltın
Bu pratikleri uygulayarak Docker Compose projelerinizde profesyonel düzeyde yapılandırma yönetimi sağlayabilirsiniz.