Azure bietet ein Sammelsurium an Services, die mit Docker oder OCI Containern arbeiten können. Wie du einen eigenen Azure Kubernetes Service anlegst, lernst du hier.

Da liegt der Gedanke nicht fern, dass du deine eigenen Container auch in Azure hosten willst. Mit der Azure Container Registry kannst du genau das einrichten.

Vorteil ist zum einen das bekannte Management über das Azure Portal. Dadurch kannst du deine Container zum Beispiel gesondert über eine Firewall oder gar virtuelle Netzwerke schützen. Zum anderen werden deine Images von dieser Registry viel schneller geladen, wenn sie im selben Rechenzentrum wie deine restlichen Services liegen.

In diesem Tutorial erfährst du, wie du die Azure Container Registry verwendest.

Azure Container Registry erzeugen

Bei Azure gibt es viele Wege eine Ressource zu erzeugen: CLI, Portal, PowerShell, ARM-Template, Bicep, Terraform… In diesem Beitrag zeige ich dir stellvertretend nur die ersten beiden Wege. Bei der Benennung der Ressource musst du beachten, dass der Name einzigartig sein muss. Das hat den Hintergrund, dass Azure dir einen Link zu deiner Registry als Subdomäne von azurecr.io bereitstellt, der diesen Namen enthält.

Mit dem CLI

Informationen zur Installation des command line interfaces findest du hier.

Deine Container Registry ist schnell erzeugt: Anmelden > Ressourcengruppe erzeugen > ACR erzeugen.

az login
az group create --name RESSOURCENGRUPPENNAME --location westeurope
az acr create --resource-group westeurope --name RESSOURCENNAME --sku Basic

Die Namen RESSOURCENGRUPPENNAME und RESSOURCENNAME sowie die SKU Basic kannst du natürlich entsprechend abändern.

Hast du einen Unternehmensaccount oder sind aus anderen Gründen mehrere Subscriptions mit deinem Account verknüpft, musst du nach dem Login deine Subscription wählen. Alle anderen können den Punkt ignorieren.

az account set --subscription "NAME DER SUBSCRIPTION"

Mit dem Portal

Im Azure Portal auf Ressource erstellen und dort in der Kategorie Container auf Container Registry. Dort kannst du neben dem Namen zusätzlich noch die Subscription, Ressourcengruppe, Location sowie die SKU konfigurieren. Mehr zur SKU unter dem Punkt Azure Container Registry Kosten.

Imagenutzung

Jetzt wo die Registry erstellt ist willst du sie natürlich auch benutzen. Dazu musst du dich zunächst anmelden.

Login

Hier hab ich prinzipiell 2 funktionierende Wege gefunden. 1) Anmeldung mit dem Azure CLI oder 2) Anmeldung über den Admin Account.

Mit dem CLI

Dies ist der von Microsoft bevorzugte Weg, da er die Berechtigungen im Azure Portal berücksichtigt. Anmerkung: Du musst in deinem CLI angemeldet sein (siehe “Mit dem CLI”).

az acr login --name RESSOURCENNAME
Login Succeeded

Dieser Befehl fügt die Credentials automatisch in deine lokale Docker Installation hinzu, sodass du deine neue Registry ab sofort mit den üblichen Docker Befehlen benutzen kannst. Bei dieser Variante musst du mit Ausnahme des CLI-Logins kein Passwort mehr eingeben.

Mit dem Admin

Falls du die CLI nicht verwenden willst oder gar nicht installiert hast, gibt es noch eine andere Variante. Im Portal klickst du auf deine Container Registry Ressource und dort unter “Settings” auf “Access Keys”. Hier kannst du den Adminuser aktivieren. Der Benutzername ist identisch mit dem der Registryname und zusätzlich werden zwei Passwörter erzeugt. Mit diesen Passwörtern kannst du dich mit den Docker Befehlen anmelden.

docker login RESSOURCENNAME.azurecr.io
Username: RESSOURCENNAME
Password:
Login Succeeded

Image pushen

Bevor du ein Image auf die Registry pushst, musst du es zunächst mit der neuen Adresse taggen. Das ist zum einen nötig, da du ein privates Repository, nicht das Docker Hub verwenden und zum anderen muss jedes Image sowieso getaggt sein. Hier ein Beispiel anhand des offiziellen hello-world Container Images:

Herunterladen von hello-world:

docker pull hello-world

Lokales Image taggen:

docker tag hello-world RESSOURCENNAME.azurecr.io/hello-world:v1

Den Tag v1 kannst du natürlich frei ändern.

In vielen Tutorials sehe ich, dass der Tag latest verwendet wird. Dies kann zu Verwirrung führen da latest vom Docker System als das zuletzt gepushte Image übersetzt wird. Das bedeutet, dass dein latest Tag automatisch überschrieben wird, wenn du später ein Image mit einem anderen Tag hochlädst.

Nachdem du das Image mit der Adresse getaggt hast du es pushen:

docker push RESSOURCENNAME.azurecr.io/hello-world:v1

Image ausführen

Da du angemeldet bist, kannst du dein gepushtes Image mit den ganz normalen Dockerbefehlen ausführen. Du musst nur darauf achten, dass du die ganze Adresse mitgibst.

docker run RESSOURCENNAME.azurecr.io/hello-world:v1  
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:

The Docker client contacted the Docker daemon.
The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/


For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Azure Container Registry Kosten

Nun zum ungemütlichen Teil. Natürlich bietet Azure diesen Service nur gegen Bares an. Wie oben erwähnt kannst du eine SKU wählen. Aktuell gibt es drei zur Auswahl: Basic, Standard und Premium

Basic Standard Premium
Preis pro Tag in € 0,144 0,575
Gratisspeicher in GB 10 100
Zusätzlicher Speicher pro GB in € 0,003 0,003
Kosten pro CPU pro Sekunde bei Containerbau in € 0,00009 0,00009
Anzahl möglicher Webhooks 2 10
Manche Features wie limitierten Netzwerkzugang, erhöhter
Bandbreite oder mehreren Nodes sind nur in der Premiumversion verfügbar.

Die Preise ändern sich natürlich regelmäßig. Die Zahlen oben sind vom November 2021 in der Region West Europa (Amsterdam). Hier findest du die aktuellen Preise.

Alternativen zur Container Registry

Zu guter Letzt sei dir noch auf dem Weg gegeben, dass es auch kostenlose Repositoryanbieter gibt, bei denen es sich lohnt mal rein zu schauen.

  • Im DockerHub kannst du kostenlos so viele Images hosten wie du willst. Aber leider kann man nur ein einziges privates Image hochladen.
  • Auf GitHub kannst du nicht nur Quellcode hochladen, sondern auch ein Docker Image pro Repository. Wenn das Repository privat ist, ist das Dockerimage ebenfalls privat. Die Adresse der Images lautet dann: “ghcr.io/USERNAME/REPOSITORYNAME”. Leider bietet Github aktuell noch keine Weboberfläche, um die Images im Browser zu listen.

Viele der gratis Provider kommen allerdings auch häufig mit anderen Limitierungen wie etwa ein downloadlimit daher. Daher solltest du vorher abwägen was deine Anforderungen sind um die richtige Wahl zu treffen.


Konnte ich helfen? Ich freue mich über einen Drink! 💙