With the increasing popularity of the cloud computing model and rapid proliferation of cloud infrastructures there are increasing concerns about energy consumption and consequent impact of cloud computing as a contributor to global CO2 emissions. To date, little is known about how to incorporate energy consumption and CO2 concerns into cloud application development and deployment decision models. In this respect, this paper describes an eco-aware approach that relies on the definition, monitoring and utilization of energy and CO2 metrics combined with the use of innovative application scheduling and runtime adaptation techniques to optimize energy consumption and CO2 footprint of cloud applications as well as the underlying infrastructure. The eco-aware approach involves measuring or quantifying the energy consumption and CO2 at different levels of cloud computing, using that information to create scheduling and adaptation techniques that contribute towards reducing the energy consumption and CO2 emissions, and finally testing and validating the developed solutions in a multi-site cloud environment with the help of challenging case study applications. The experimental and validation results show the potential of the eco-aware approach to significantly reduce the CO2 footprint and consequent environmental impact of cloud applications.