Docker und Web-App in Azure

Ein Selbstversuch…

Vorbereitungen

Ein kostenloses Azure- Konto holen

Installieren der Docker Compose CLI for Linux:

curl -L https://raw.githubusercontent.com/docker/compose-cli/main/scripts/install/install_linux.sh | sh

Anlegen eines Bastelverzeichnisses:

mkdir -p ~/Playground/docker_Azure
cd ~/Playground/docker_Azure

Verbinden von Docker und Azure

docker login azure

Erstellen eines ACI- Kontests

docker context create aci murmel

Prüfen, ob's geklappt hat

docker context ls

Ein erster Test

In den Kontext wechseln

docker context use murmel

ein öffentliches Image starten

docker run -p 80:80 mcr.microsoft.com/azuredocs/aci-helloworld

Nach dem Lauf kann man den Container mit docker rm wieder entfernen - um das Image braucht man sich keine Sorgen zu machen, denn ich hab's versucht zu löschen, aber die Fehlermeldung erinnerte mich daran, das die Cloud keine Images speichert (muss man die dann für jeden Run erst wieder hochladen??)

Nächster Versuch: Wir basteln uns ein Zip- Image

FROM javieraviles/zip CMD ["zip", "--help"]

docker build -t zip .
docker run --rm zip

Als nächstes packen wir ein Verzeichnis

FROM javieraviles/zip CMD ["zip", "-r" , "/zip/out.zip", "/etc"]

docker build -t zip .
docker run -v $(pwd):/zip --rm zip

Jetzt versuchen wir mal, eine Azure Datei Freigabe als Ziel- Verzeichnis in einen Azure docker container einzuhängen…

Das Azure CLI installieren

sudo apt install azure-cli

Erstellen der Freigabe 1)https://docs.microsoft.com/de-de/azure/container-instances/container-instances-volume-azure-files#create-an-azure-file-share

az login

Die notwendige Resourcengruppe erzeugen

export ACI_PERS_RESOURCE_GROUP=murmel
az group create -l northeurope -n $ACI_PERS_RESOURCE_GROUP

und nun legen wir innerhalb der Resourcengruppe eine Azure Container Registry an, in der man dann die eigenen Container speichert

export ACR_PERS_NAME=murmelimages
az acr create --resource-group $ACI_PERS_RESOURCE_GROUP --name $ACR_PERS_NAME --sku Basic

# Change these four parameters as needed export ACI_PERS_RESOURCE_GROUP=murmel export ACI_PERS_STORAGE_ACCOUNT_NAME=steffen$RANDOM export ACI_PERS_LOCATION=northeurope export ACI_PERS_SHARE_NAME=murmelshare # Create the storage account with the parameters az storage account create \ --resource-group $ACI_PERS_RESOURCE_GROUP \ --name $ACI_PERS_STORAGE_ACCOUNT_NAME \ --location $ACI_PERS_LOCATION \ --sku Standard_LRS # Create the file share az storage share create \ --name $ACI_PERS_SHARE_NAME \ --account-name $ACI_PERS_STORAGE_ACCOUNT_NAME

az login
./create_share.sh

Erhalten der Anmeldeinformationen für das Speicherkonto2)https://docs.microsoft.com/de-de/azure/container-instances/container-instances-volume-azure-files#get-storage-credentials Um eine Azure-Dateifreigabe als Volume in Azure Container Instances einzubinden, benötigen Sie drei Werte: den Namen des Speicherkontos, den Freigabenamen und den Speicherzugriffsschlüssel.

Speicherkontoname: Wenn Sie das obige Skript verwendet haben, wurde der Name des Speicherkontos in der Variablen $ACI_PERS_STORAGE_ACCOUNT_NAME gespeichert. Um den Kontonamen einzusehen, geben Sie Folgendes ein:

echo $ACI_PERS_STORAGE_ACCOUNT_NAME

Freigabename: Dieser Wert ist bereits definiert als $ACI_PERS_SHARE_NAME.

Speicherkontoschlüssel: Diesen Wert finden Sie mithilfe des folgenden Befehls:

export STORAGE_KEY=$(az storage account keys list --resource-group $ACI_PERS_RESOURCE_GROUP --account-name \
$ACI_PERS_STORAGE_ACCOUNT_NAME --query "[0].value" --output tsv)

echo $STORAGE_KEY

Zuerst bauen wir das Image lokal mit dem passenden Tag für die ACR. Der Tag setzt sich zusammen aus murmelimages+ .azurecr.io/

FROM javieraviles/zip CMD ["zip", "-r" , "/zip/out.zip", "/etc"]

docker build -t $ACR_PERS_NAME.azurecr.io/zip:v1 .

anmelden an den ACR

az acr login --name $ACR_PERS_NAME

image pushen

docker push $ACR_PERS_NAME.azurecr.io/zip:v1

den Container starten

az container create \ --resource-group $ACI_PERS_RESOURCE_GROUP \ --name $ACR_PERS_NAME \ --image $ACR_PERS_NAME.azurecr.io/zip:v1 \ --azure-file-volume-account-name $ACI_PERS_STORAGE_ACCOUNT_NAME \ --azure-file-volume-account-key $STORAGE_KEY \ --azure-file-volume-share-name $ACI_PERS_SHARE_NAME \ --azure-file-volume-mount-path /zip \ --registry-username $ACR_PERS_NAME \ --registry-password <registry-password>

Die erzeugte Datei findet sich dann in der $ACI_PERS_SHARE_NAME Dateifreigabe

Einbinden eines Git Repositories

Zuerst wird der Aufruf so anpasst, das er auf das Eingaben- Verzeichnis zeigt, was dann als git eingebunden werden soll

FROM javieraviles/zip CMD ["zip", "-r" , "/zip/git.zip", "/git"]

docker build -t $ACR_PERS_NAME.azurecr.io/git:v1 .

anmelden an den ACR

az acr login --name $ACR_PERS_NAME

image pushen

docker push $ACR_PERS_NAME.azurecr.io/git:v1

Das Ganze ist ähnlich wie der „normale“ Aufruf, aber mit zusätzlichen Parametern:

–gitrepo-url: Der gewünschte Repository- Link

–gitrepo-mount-path : Wohin das Rep im container gemountet werden soll

–gitrepo-dir: Optional das Verzeichnis innerhalb des zu klonenden Volumes

–gitrepo-revision: Optional der Commithash der zu klonenden Revision

den Container starten

az container create \ --resource-group $ACI_PERS_RESOURCE_GROUP \ --name $ACR_PERS_NAME \ --image $ACR_PERS_NAME.azurecr.io/git:v1 \ --azure-file-volume-account-name $ACI_PERS_STORAGE_ACCOUNT_NAME \ --azure-file-volume-account-key $STORAGE_KEY \ --azure-file-volume-share-name $ACI_PERS_SHARE_NAME \ --azure-file-volume-mount-path /zip \ --registry-username $ACR_PERS_NAME \ --registry-password <registry-password>\ --gitrepo-url https://github.com/stko/valuepipe.git \ --gitrepo-mount-path /git