The goal of this readme is to show how to build a container WebApi image that can be used to deploy the application into a container registry and that can be used later to run the service.
Use docker
to build the WebApi images. (Note: Make sure the run docker
at
the root branch)
cd ./$(git rev-parse --show-cdup)/src
docker build -t carbon_aware:v1 -f CarbonAware.WebApi/src/Dockerfile .
List carbon_aware
image
docker image ls carbon_aware
REPOSITORY TAG IMAGE ID CREATED SIZE
carbon_aware v1 6293e2528bf2 About an hour ago 230MB
-
Run the image using
docker run
with host port 8000 mapped to the WebApi port 80 and configure environment variable settings for WattTime provider.docker run --rm -p 8000:80 \ > -e DataSources__EmissionsDataSource="WattTime" \ > -e DataSources__ForecastDataSource="WattTime" \ > -e DataSources__Configurations__WattTime__Type="WattTime" \ > -e DataSources__Configurations__WattTime__password="username" \ > carbon_aware:v1
or the ElectricityMaps provider
docker run --rm -p 8000:80 \ > -e DataSources__EmissionsDataSource="ElectricityMaps" \ > -e DataSources__ForecastDataSource="ElectricityMaps" \ > -e DataSources__Configurations__ElectricityMaps__Type="ElectricityMaps" \ > -e DataSources__Configurations__ElectricityMaps__APITokenHeader="auth-token" \ > -e DataSources__Configurations__ElectricityMaps__APIToken="<YOUR_ELECTRICITYMAPS_TOKEN>" \ > carbon_aware:v1
or the ElectricityMapsFree provider
docker run --rm -p 8000:80 \ > -e DataSources__EmissionsDataSource="ElectricityMapsFree" \ > -e DataSources__Configurations__ElectricityMapsFree__Type="ElectricityMapsFree" \ > -e DataSources__Configurations__ElectricityMapsFree__token="<YOUR_CO2SIGNAL_TOKEN>" \ > carbon_aware:v1
-
Verify that the WebApi is responding to requests using an HTTP client tool (e.g.
postman
,curl
)curl -v -s -X 'POST' http://localhost:8000/emissions/forecasts/batch -H 'accept: */*' -H 'Content-Type: application/json' -d '[ { "requestedAt": "2021-11-01T00:00:00Z", "dataStartAt": "2021-11-01T00:05:00Z", "dataEndAt": "2021-11-01T23:55:00Z", "windowSize": 5, "location": "eastus" } ]' ... > POST /emissions/forecasts/batch HTTP/1.1 > Host: localhost:8000 ... < HTTP/1.1 200 OK < Content-Type: application/json; charset=utf-8 ... < [{"generatedAt":"2021-11-01T00:00:00+00:00","optimalDataPoint":{ ... }}]
For easy image consumption, upload it to a well-known container registry, self-hosted or managed. The following are examples of using docker hub or Azure Container Registry
Sign in to Docker Hub and create a private (or public) repository (e.g <your-username>/my-private-repo)
-
Build and Push
docker login --username=your-username cd ./$(git rev-parse --show-cdup)/src docker build -t <your-username>/my-private-repo/carbon_aware:v1 -f CarbonAware.WebApi/src/Dockerfile . docker push <your-username>/my-private-repo/carbon_aware:v1
-
Pull
docker login --username=your-username docker pull <your-username>/my-private-repo/carbon_aware:v1
-
Build and Push image Assuming the container registry is already created, use the user's credentials push the image using
docker
(it can be done also using Azure CLI)docker login <myacrname>.azurecr.io -u username -p <CopiedKeyFromAzurePortal> cd ./$(git rev-parse --show-cdup)/src docker build -t <myacrname>.azurecr.io/carbon_aware:v1 -f arbonAware.WebApi/src/Dockerfile . docker push <myacrname>.azurecr.io/carbon_aware:v1
-
Pull image
docker login <myacrname>.azurecr.io -u username -p <CopiedKeyFromAzurePortal> docker pull <myacrname>.azurecr.io/carbon_aware:v1
To automate an image deployment from a GitHub CI/CD pipeline, the following link
provides detailed information on how to build a workflow
with all the
necesarily tools in order to push an image to a container registry of user's
preference (i.e. Docker Hub).