Environment variables are key-value pairs that can be set in your shell, allowing applications to read them and adjust their behavior accordingly. Docker environment variables enhance the flexibility and portability of containers by enabling runtime configuration changes without modifying the underlying image. They can be set using various techniques such as CLI flags, .env files, or Docker Compose's environment option. Best practices for using environment variables include using Docker Secrets for sensitive values, ensuring containerized processes are designed to use them, preferring file-based approaches like .env files, and maintaining a consistent naming scheme.