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.

Blog'a Dön