What is Docker Environment Variables
Environment Variable (Ortam Değişkeni), bir uygulamaya kodunu değiştirmeden dışarıdan ayar vermek için kullanılan anahtar–değer çiftleridir. Docker’da environment variable’lar ise, container çalışırken uygulamaya, kullanıcı adı, parola, port, çalışma modu, bağlantı bilgileri gibi değişken değerleri aktarmak için kullanılır. Basitçe, ben uygulamaya şunu söylüyorum. Çalışırken bu değeri kullan.
Neden Kullanılır?
- Koddan ayarları ayırmak için kullanılır. Yani aynı image’i, test, staging, production ortamlarında farklı ayarlarla çalıştırabilirsin.
- Güvenlik için kullanılır. Parola gibi bilgileri, kodun içine yazmak yerine environment variable olarak verirsin.
- Image’i tekrar tekrar kullanabilmek için kullanılır. Tek bir Docker image ile farklı konfigürasyonlar yapabilirsin.
Docker Secrets, parola ve gizli bilgileri güvenli şekilde saklamak için kullanılan Docker mekanizmasıdır. Production ortamlarda bunun kullanılması daha doğru olacaktır.
Docker Environment Variable
Örneğin, bir web sitesi var.
- Backend: PHP / Node.js / Python (fark etmez)
- Web Server: Apache/Nginx
- Veritabanı: MySQL
Docker ile çalışıyor, aynı image test ve canlı (production) ortamlarında kullanılacak. Kodun içine aşağıdakilerin yazdığını düşün.
- Veritabanı IP: 192.168.1.10
- Kullanıcı: admin
- Parola: 123456
- Ortam: production
Yukarıdaki bu yaklaşım yanlıştır. Çünkü, Parola kodun içinde, Git’e push edilirse herkes görür. Test ortamı için kodu değiştirmek gerekir ve canlıda hata riski yüksektir.
Doğru yaklaşım ise Environment Variable kullanmaktır. Kod sabit, ayarlar dışarıdan verilir. Biraz önce verdiğimiz örnek için aşağıdaki gibi ortam değişkenlerini vermeniz yeterli olacaktır.
docker run -d \
--name web_container \
-p 8080:80 \
-e APP_ENV=production \
-e APP_PORT=8080 \
-e DB_HOST=db_container \
-e DB_NAME=website_db \
-e DB_USER=website_user \
-e DB_PASSWORD=StrongPassword123 \
my-web-app

Container içinde environment variable’ı görmek için env komutunu çalıştırmanız yeterlidir.
env

Her seferinde uzun uzun -e parametrelerini yazmak yerine environment variable’ları aşağıdaki gibi tek dosyada tutmak için .env file kullanabilirsiniz.
.env dosya içeriği aşağıdaki gibidir.
APP_ENV=production
APP_PORT=8080
DB_HOST=db_container
DB_NAME=website_db
DB_USER=website_user
DB_PASSWORD=StrongPassword123
Docker üzerinde bu env dosyasını kullanmak için, --env-file opsiyonunu ekleyerek container kaldırabilirsiniz.
docker run -d \
--name web_container \
--env-file .env \
-p 8080:80 \
my-web-app
Özetle, Environment variable Container’a dışarıdan verilen ayarlardır. Kod değişmeden farklı ortamlar oluşturulur. Güvenlik ve esneklik sağlar. Docker’da en kritik yapı taşlarından biridir.