TL;DR: Die Integration von ACI und Docker CLI ist ausgezeichnet. Sobald ich es konfiguriert hatte, konnte ich erfolgreich zahlreiche Container erstellen. Die Unterstützung umfasst auch Multi-Container-Anwendungen, die auf Docker Compose basieren. Es gibt aber einen Nachteil: Das Abrufen von Images aus Container-Registries war im Vergleich zu meiner lokalen Maschine langsamer. Insgesamt gefällt es mir gut und ich teile in diesem Artikel alles mit Ihnen, was Sie darüber wissen müssen.
Dieser Artikel ist eine deutsche Übersetzung. Den Originalartikel in englischer Sprache finden Sie in Thorsten Hans’ Blog.
Konfigurieren der Integration von Azure Container Instances
# Interaktiven Login Flow starten
docker login azure
Alternativ können Sie sich mit einem Service Principal (SP) anmelden. Geben Sie die ID und das Kennwort des SP mit den Parametern --client-id
und --client-secret
an, wenn Sie docker login azure
aufrufen.
Sobald Sie eingeloggt sind, erstellen Sie einen neuen Kontext. Der Kontext ist für das Weiterleiten von Anfragen verantwortlich, die von Docker CLI an Knoten oder Cluster ausgegeben werden. In diesem Kontext werden Konfigurationsdaten und vertrauliche Informationen gespeichert, um eine sichere Verbindung mit dem Ziel herzustellen (Azure Container Instances in diesem Fall).
docker context create
ist ein interaktiver Befehl. Er führt Sie durch den Prozess der Konfiguration eines neuen Docker-Kontexts.
Im Rahmen dieses Assistenten erstellt Docker CLI in eastus eine neue Azure-Ressourcengruppe und legt eine neue uuid
als den Namen fest. Sie können einen benutzerdefinierten Speicherort für die Azure-Ressourcengruppe unter Verwendung des Arguments --location
angeben. Den Namen der Azure-Ressourcengruppe können Sie nicht anpassen. Sie können jedoch das Argument --resource-group
verwenden und den Kontext mit einem vorhandenen verknüpfen.
# Docker-Kontext erzeugen, um Container-Ausführung an ACI auszulagern
docker context create aci lets-try-aci
# (Optional) Benutzerdefinierte Location angeben und zu existierender Ressourcengruppe verlinken
az group create -n rg-lets-try-aci -l westeurope
docker context create aci lets-try-aci \
--resource-group rg-lets-try-aci \
--location westeurope
Alle konfigurierten Kontexte fragen Sie mit docker context ls
ab. Um in einen bestimmten Kontext zu wechseln oder ihn zu verwenden, nutzen Sie den Befehl docker context use
und übermitteln Sie den Namen des gewünschten Kontexts:
# Zum Kontext lets-try-aci wechseln
docker context use lets-try-aci
Werfen Sie gerne einen Blick in die offizielle Docker-Dokumentation, um mehr über Kontexte in Docker zu erfahren.
Ausführen von Einzelcontaineranwendungen in ACI
Sie können zu diesem Zeitpunkt jeden Container in ACI ausführen. Erstellen wir zum Beispiel eine kleine Webanwendung, die einige Kontextinformationen zum Ausführungshost zurückgibt.
docker run -d -p 80:80 nginxdemos/hello
# [+] Running 2/2
# ⠿ Group busy-zhukovsky Created 3.4s
# ⠿ busy-zhukovsky Done 25.7s
# busy-zhukovsky
Es dauerte ungefähr 30 Sekunden, um diesen Container hochzufahren. Denken Sie jedoch daran, was hinter den Kulissen passiert. Docker stellt eine sichere Verbindung her, wie im Docker-Kontext angegeben. Es weist die ARM-API von Azure an, eine Containergruppe zu erstellen. Es bezieht das gewünschte Container-Image und weist eine öffentliche IP-Adresse zu. Am Ende startet es den Container mit der angegebenen Portweiterleitung.
Stellen Sie nun sicher, dass der Container ausgeführt wird (docker ls
), und browsen Sie die Anwendung mit einer öffentlichen IP-Adresse.
Sie können den Container wieder löschen, indem Sie docker rm
, gefolgt von der ID des Containers, verwenden.
Port Mapping wird nicht unterstützt
Wir haben Port 80 des Docker-Containers auf Port 80 der öffentlichen IP-Adresse (von Azure selbst akquiriert) veröffentlicht. Das Veröffentlichen eines Containers funktioniert sehr gut. Port Mapping (Ändern der Portnummer während der Offenlegung) wird jedoch nicht unterstützt.
Datenträger
Echte Anwendungen müssen ihren Zustand persistieren. Sie sollten den Zustand immer außerhalb des Container-Dateisystems speichern. Bei der Arbeit mit ACI können Sie Azure Files (Teil von Azure Storage Accounts) als Datenträger verwenden. Sie können einen neue Azure File Share in Kombination mit dem erforderlichen Azure Storage Account erstellen, indem Sie docker volume create
verwenden.
# Neues Azure File Share (aci-test-volume) erzeugen
# und notwendigen Azure Storage Account (acidockerstorage)
docker volume create aci-test-volume --storage-account acidockerstorage
Wenn der Datenträger erstellt ist, können wir zustandsbehaftete Anwendungen in ACI ausführen, wie im nächsten Abschnitt gezeigt wird.
Multi-Container-Anwendungen in ACI mit Docker Compose ausführen
Viele Teams verwenden Docker Compose für den Inner-Loop. Mit Docker Compose können Sie Multi-Container-Anwendungen mit Inter-Container-Kommunikation schnell starten.
Sie führen Multi-Container-Anwendungen mit Docker Compose auch in ACI aus. Docker Compose verwendet den Docker-Kontext wieder. Alles, was Sie brauchen, ist eine docker-compose.yml
, die eine Multi-Container-Anwendung beschreibt. Als Beispiel werden wir WordPress in ACI ausführen. Diese Konfiguration von WordPress verwendet MySQL, um den Zustand zu persistieren. Verwenden Sie den im vorherigen Abschnitt erstellten Datenträger, um den Zustand in Azure File Share auszulagern.
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
data:
driver: azure_file
driver_opts:
share_name: aci-test-volume
storage_account_name: acidockerstorage
Führen Sie docker compose up
aus (beachten Sie den Docker CLI-Unterbefehl zum Starten einer Compose-Datei -> kein Bindestrich zwischen docker
und compose
).
Jetzt ist die richtige Zeit für einen Kaffee oder Tee gekommen. Das Starten beider Container hat bei mir etwa 2 Minuten gedauert …
… sind Sie mit heißem Kaffee oder Tee zurück? Super! Prüfen Sie, ob die Container laufen (docker ps
). Greifen Sie mit Ihrem Browser auf die öffentliche IP zu und überprüfen Sie, ob Ihre WordPress-Instanz auf Sie wartet.
Wenn Sie mit dem Bloggen fertig sind, können Sie beide Container mit docker compose down
und den darunterliegenden Datenträger mit docker volume rm acidockerstorage/aci-test-volume
löschen.
Benutzerdefinierter DNS-Name
Wenn Sie Anwendungen mit mehreren Containern in ACI ausführen, können Sie einen benutzerdefinierten DNS-Namen anfordern. Genauer gesagt weisen Sie Azure an, eine Unterdomäne von azurecontainer.io mit der öffentlichen IP-Adresse des verfügbar gemachten Containers zu verknüpfen. Der FQDN folgt immer dem Schema yourdomain.region.azurecontainer.io
.
Das Hinzufügen der Eigenschaft domainname
zum Container wordpress
in der Datei docker-compose.yml
und Zuweisen von letstryaci
als Wert führt zu letstryaci.westeurope.azurecontainer.io
.
Hinweis: Sie können pro docker-compose.yml
nur eine Domäne zuweisen.
Kosten überwachen
ACI ist günstig, wenn kurzlebige Container ausgeführt werden. Dafür ist es ausgelegt. Allerdings ist das Ausführen von Containern rund um die Uhr auf ACI – verglichen mit anderen Hosting-Funktionen in Azure – etwas zu teuer. Vergessen Sie nicht, die Prognose für Ihre monatlichen Azure-Kosten zu verfolgen.
Aufräumen
Vergessen Sie nicht, zum Standard-Docker-Kontext zurückzukehren. Andernfalls leiten alle Operationen (wie docker ps
oder docker run
) Anfragen an ACI weiter. Wenn Sie den in diesem Artikel erstellten Docker-Kontext entfernen möchten, verwenden Sie den Befehl docker context rm lets-try-aci
, nachdem Sie zum Standardkontext zurückgeschaltet haben:
# Zum Default-Kontext zurück wechseln
docker context use default
# Den lets-try-aci Kontext löschen
docker context rm lets-try-aci
Überprüfen Sie Ihr Azure-Abonnement, nachdem Sie einen ACI-Kontext entfernt haben. Docker CLI löscht keine laufenden Containerinstanzen. Das war zumindest meine Erfahrung.Überprüfen Sie Ihr Azure-Abonnement, nachdem Sie einen ACI-Kontext entfernt haben. Docker CLI löscht keine laufenden Containerinstanzen. Das war zumindest meine Erfahrung.
Schlussfolgerung
Ich verwende ACI regelmäßig und mag das Erlebnis. Es ist gut, neben Azure Kubernetes Service (AKS) einen einfachen (sprich: serverlosen) Ansatz zu haben. Beachten Sie jedoch, dass das Beziehen des Container-Images zu ACI einige Zeit in Anspruch nehmen kann. Das heißt, es eignet sich hervorragend für Jobs und Aufgaben, bei denen die Bootstrap-Dauer nicht kritisch ist.
Die nahtlose Integration mit Docker CLI ist ein großer Vorteil und wird die Einführung von ACI vorantreiben.
Auf der Ignite 2021 hat Microsoft zudem einen weiteren Azure-Dienst für Serverless Containers, Azure Container Apps, vorgestellt. Erste Infos zur Preview findet man bei Microsoft Docs. Dort finden Sie auch einen Vergleich der Optionen für Container-Anwendungen in Azure.
Wenn Sie keine weiteren Artikel unserer Experten verpassen möchten, melden Sie sich zu unserem kostenlosen monatlichen Newsletter an.