جدا کردن پیکربندی از کد
یک اصل مهم در توسعهی نرمافزار مدرن این است که تنظیمات حساس یا وابسته به محیط (مثل رمز پایگاهداده، کلید API، آدرس سرویسهای خارجی) هرگز مستقیماً داخل کد یا Dockerfile نوشته نشوند. داکر برای این منظور از متغیرهای محیطی (Environment Variables) پشتیبانی میکند.
روش اول، تعیین مستقیم متغیر هنگام اجرا:
docker run -e DATABASE_URL=postgres://user:pass@db:5432/mydb my-app:1.0
روش دوم و رایجتر، استفاده از یک فایل .env:
DATABASE_URL=postgres://user:pass@db:5432/mydb
DEBUG=False
SECRET_KEY=change-this-in-production
docker run --env-file .env my-app:1.0
فایل .env باید حتماً در .gitignore و .dockerignore قرار بگیرد تا هرگز وارد تاریخچهی گیت یا داخل image نشود. در داخل کد پایتون یا جنگو، این مقادیر معمولاً با کتابخانههایی مثل os.environ.get() یا django-environ خوانده میشوند.
یک نکتهی مهم امنیتی: متغیرهای محیطی که با -e یا --env-file ست میشوند، با دستور docker inspect قابل مشاهده هستند؛ برای اطلاعات بسیار حساس در محیط production، ابزارهای مدیریت رمز (Secret Management) مانند Docker Secrets یا Vault گزینهی امنتری هستند که در دورههای پیشرفتهتر بررسی میشوند.