Tutorial: Bereitstellen einer Gruppe mit mehreren Containern mithilfe von Docker Compose
In diesem Tutorial verwenden Sie Docker Compose, um eine Anwendung mit mehreren Containern lokal zu definieren und auszuführen, und stellen sie dann als Containergruppe in Azure Container Instances bereit.
Führen Sie Container bei Bedarf in Azure Container Instances aus, wenn Sie cloudnative Apps mit Docker entwickeln und nahtlos von der lokalen Entwicklung zur Cloudbereitstellung wechseln möchten. Diese Funktion wird durch die Integration zwischen Docker und Azure ermöglicht. Sie können native Docker-Befehle verwenden, um entweder eine einzelne Containerinstanz oder eine Gruppe mit mehreren Containern in Azure auszuführen.
Wichtig
Nicht alle Funktionen von Azure Container Instances werden unterstützt. Geben Sie Feedback zur Integration von Docker und Azure ab, indem Sie im GitHub-Repository Docker-ACI-Integration ein Problem erstellen.
Tipp
Sie können die Docker-Erweiterung für Visual Studio Code verwenden, um eine integrierte Erfahrung zum Entwickeln, Ausführen und Verwalten von Containern, Images und Kontexten zu erhalten.
In diesem Artikel führen Sie folgende Schritte aus:
- Erstellen einer Azure Container Registry-Instanz
- Klonen des Anwendungsquellcodes von GitHub
- Verwenden von Docker Compose zum lokalen Erstellen und Ausführen einer Anwendung mit mehreren Containern
- Übertragen des Anwendungsimages mithilfe von Push in Ihre Containerregistrierung
- Erstellen eines Azure-Kontexts für Docker
- Aufrufen der Anwendung in Azure Container Instances
Voraussetzungen
Azure CLI: Auf Ihrem lokalen Computer muss die Azure CLI installiert sein. Empfohlen wird mindestens die Version 2.10.1. Führen Sie
az --versionaus, um die Version zu ermitteln. Installations- und Upgradeinformationen finden Sie bei Bedarf unter Installieren von Azure CLI.Docker Desktop: Sie müssen Docker Desktop, Version 2.3.0.5 oder höher, verwenden, verfügbar für Windows oder macOS. Oder installieren Sie die Docker ACI-Integrations-CLI für Linux.
Erstellen einer Azure-Containerregistrierung
Bevor Sie Ihre Containerregistrierung erstellen können, benötigen Sie eine Ressourcengruppe für die Bereitstellung. Eine Azure-Ressourcengruppe ist eine logische Sammlung, in der alle Azure-Ressourcen bereitgestellt und verwaltet werden.
Erstellen Sie mithilfe des Befehls az group create eine Ressourcengruppe. Im folgenden Beispiel wird eine Ressourcengruppe mit dem Namen myResourceGroup in der Region eastus erstellt:
az group create --name myResourceGroup --location eastus
Erstellen Sie nach der Erstellung der Ressourcengruppe mit dem Befehl az acr create eine Azure-Containerregistrierung. Der Containerregistrierungsname muss innerhalb von Azure eindeutig sein und zwischen 5 und 50 alphanumerische Zeichen enthalten. Ersetzen Sie <acrName> durch einen eindeutigen Namen für die Registrierung:
az acr create --resource-group myResourceGroup --name <acrName> --sku Basic
Hier ist ein Teil einer Ausgabe für eine neue Azure-Containerregistrierung mit dem Namen mycontainerregistry082 angegeben:
{
"creationDate": "2020-07-16T21:54:47.297875+00:00",
"id": "/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/mycontainerregistry082",
"location": "eastus",
"loginServer": "mycontainerregistry082.azurecr.io",
"name": "mycontainerregistry082",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sku": {
"name": "Basic",
"tier": "Basic"
},
"status": null,
"storageAccount": null,
"tags": {},
"type": "Microsoft.ContainerRegistry/registries"
}
Im restlichen Teil dieses Tutorials wird <acrName> als Platzhalter für den von Ihnen in diesem Schritt gewählten Namen der Containerregistrierung bezeichnet.
Anmelden an der Containerregistrierung
Sie müssen sich bei der Azure-Containerregistrierung anmelden, damit Sie Images mithilfe von Push an sie übertragen können. Verwenden Sie den Befehl az acr login, um den Vorgang abzuschließen. Geben Sie den eindeutigen Namen an, den Sie beim Erstellen der Containerregistrierung gewählt haben.
az acr login --name <acrName>
Beispiel:
az acr login --name mycontainerregistry082
Der Befehl gibt nach Abschluss des Vorgangs Login Succeeded zurück:
Login Succeeded
Abrufen von Anwendungscode
Die in diesem Tutorial verwendete Beispielanwendung ist eine einfache Abstimmungs-App. Die Anwendung besteht aus einer Front-End-Webkomponente und einer Back-End-Redis-Instanz. Die Webkomponente wird in ein benutzerdefiniertes Containerimage gepackt. Die Redis-Instanz verwendet ein nicht modifiziertes Image aus Docker Hub.
Verwenden Sie Git, um die Beispielanwendung in Ihrer Entwicklungsumgebung zu klonen:
git clone https://github.com/Azure-Samples/azure-voting-app-redis.git
Wechseln Sie in das geklonte Verzeichnis.
cd azure-voting-app-redis
Im Verzeichnis befinden sich der Anwendungsquellcode und eine vorab erstellte Docker Compose-Datei namens „docker-compose.yaml“.
Ändern der Docker Compose-Datei
Öffnen Sie „docker-compose.yaml“ in einem Text-Editor. Die Datei konfiguriert die Dienste azure-vote-back und azure-vote-front.
version: '3'
services:
azure-vote-back:
image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
container_name: azure-vote-back
environment:
ALLOW_EMPTY_PASSWORD: "yes"
ports:
- "6379:6379"
azure-vote-front:
build: ./azure-vote
image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
container_name: azure-vote-front
environment:
REDIS: azure-vote-back
ports:
- "8080:80"
Nehmen Sie in der azure-vote-front-Konfiguration folgende zwei Änderungen vor:
- Aktualisieren Sie die Eigenschaft
imageimazure-vote-front-Dienst. Präfigieren Sie den Imagenamen mit dem Anmeldeservernamen Ihrer Azure-Containerregistrierung, <acrName>.azurecr.io. Wenn Ihre Registrierung beispielsweise myregistry heißt, und der Name des Anmeldeservers myregistry.azurecr.io (alles Kleinbuchstaben) lautet, heißt die Image-Eigenschaft dannmyregistry.azurecr.io/azure-vote-front. - Ändern Sie die
ports-Zuordnung in80:80. Speichern Sie die Datei.
Die aktualisierte Datei sollte in etwa wie folgt aussehen:
version: '3'
services:
azure-vote-back:
image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
container_name: azure-vote-back
environment:
ALLOW_EMPTY_PASSWORD: "yes"
ports:
- "6379:6379"
azure-vote-front:
build: ./azure-vote
image: myregistry.azurecr.io/azure-vote-front
container_name: azure-vote-front
environment:
REDIS: azure-vote-back
ports:
- "80:80"
Indem Sie diese Ersetzungen vornehmen, wird das azure-vote-front-Image, das Sie im nächsten Schritt erstellen, für Ihre Azure-Containerregistrierung gekennzeichnet, und das Image kann für die Ausführung in Azure Container Instances abgerufen werden.
Tipp
Für dieses Szenario müssen Sie keine Azure-Containerregistrierung verwenden. Beispielsweise könnten Sie ein privates Repository in Docker Hub auswählen, um Ihr Anwendungsimage zu hosten. Wenn Sie eine andere Registrierung auswählen, aktualisieren Sie die Image-Eigenschaft entsprechend.
Lokales Ausführen der Anwendung mit mehreren Containern
Führen Sie docker-compos up aus, wobei die Beispieldatei docker-compose.yaml verwendet wird, um das Containerimage zu erstellen, das Redis-Image herunterzuladen und die Anwendung zu starten:
docker-compose up --build -d
Verwenden Sie anschließend den Befehl docker-images, um die erstellten Images anzuzeigen. Drei Images wurden heruntergeladen oder erstellt. Das azure-vote-front-Image enthält die Front-End-Anwendung, die das uwsgi-nginx-flask-Image als Basis verwendet. Das redis-Image wird zum Starten einer Redis-Instanz verwendet.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myregistry.azurecr.io/azure-vote-front latest 9cc914e25834 40 seconds ago 944MB
mcr.microsoft.com/oss/bitnami/redis 6.0.8 3a54a920bb6c 4 weeks ago 103MB
tiangolo/uwsgi-nginx-flask python3.6 788ca94b2313 9 months ago 9444MB
Führen Sie den Befehl docker ps aus, um die ausgeführten Container anzuzeigen:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82411933e8f9 myregistry.azurecr.io/azure-vote-front "/entrypoint.sh /sta…" 57 seconds ago Up 30 seconds 443/tcp, 0.0.0.0:80->80/tcp azure-vote-front
b62b47a7d313 mcr.microsoft.com/oss/bitnami/redis:6.0.8 "/opt/bitnami/script…" 57 seconds ago Up 30 seconds 0.0.0.0:6379->6379/tcp azure-vote-back
Zum Anzeigen der ausgeführten Anwendungen geben Sie http://localhost:80 in einem lokalen Webbrowser ein. Die Beispielanwendung wird wie im folgenden Beispiel geladen:
Nachdem Sie die lokale Anwendung ausprobiert haben, führen Sie docker-compose down aus, um die Anwendung zu beenden und die Container zu entfernen.
docker-compose down
Übertragen des Images in die Containerregistrierung per Pushvorgang
Um die Anwendung in Azure Container Instances bereitzustellen, müssen Sie das azure-vote-front-Image in Ihre Containerregistrierung pushen. Führen Sie docker-compose push aus, um das Image zu pushen:
docker-compose push
Der Pushvorgang in die Registrierung kann ein paar Minuten dauern.
Um zu überprüfen, ob das Image in Ihrer Registrierung gespeichert wurde, führen Sie den Befehl az acr repository show aus:
az acr repository show --name <acrName> --repository azuredocs/azure-vote-front
Erstellen eines Azure-Kontexts
Um mithilfe von Docker-Befehlen Container in Azure Container Instances auszuführen, melden Sie sich zuerst bei Azure an:
docker login azure
Wenn Sie dazu aufgefordert werden, geben Sie Ihre Azure-Anmeldeinformationen ein, oder wählen Sie sie aus.
Führen Sie docker context create aci aus, um einen ACI-Kontext zu erstellen. Durch diesen Kontext wird Docker einem Azure-Abonnement und einer Ressourcengruppe zugeordnet, um die Erstellung und Verwaltung von Containerinstanzen zu ermöglichen. Um beispielsweise einen Kontext namens myacicontext zu erstellen:
docker context create aci myacicontext
Wählen Sie bei Aufforderung Ihre Azure-Abonnement-ID aus, wählen Sie dann eine vorhandene Ressourcengruppe aus, oder erstellen Sie eine neue Ressourcengruppe. Wenn Sie eine neue Ressourcengruppe ausgewählt haben, wird diese mit einem systemseitig generierten Namen erstellt. Azure Container Instances muss wie alle Azure-Ressourcen in einer Ressourcengruppe bereitgestellt werden. Mit Ressourcengruppen können verwandte Azure-Ressourcen organisiert und verwaltet werden.
Führen Sie docker context ls aus, um zu bestätigen, dass Sie Ihren Docker-Kontexten den ACI-Kontext hinzugefügt haben:
docker context ls
Bereitstellen der Anwendung in Azure Container Instances
Ändern Sie als Nächstes den ACI-Kontext. Nachfolgende Docker-Befehle werden in diesem Kontext ausgeführt.
docker context use myacicontext
Führen Sie docker compose up aus, um die Anwendung in Azure Container Instances zu starten. Das azure-vote-front-Image wird aus ihrer Containerregistrierung abgerufen, und die Containergruppe wird in Azure Container Instances erstellt.
docker compose up
Hinweis
Die derzeit in einem ACI-Kontext verfügbaren Docker Compose-Befehle sind docker compose up und docker compose down. In diesen Befehlen steht zwischen docker und compose kein Bindestrich.
In kurzer Zeit wird die Containergruppe bereitgestellt. Beispielausgabe:
[+] Running 3/3
⠿ Group azurevotingappredis Created 3.6s
⠿ azure-vote-back Done 10.6s
⠿ azure-vote-front Done 10.6s
Führen Sie docker ps aus, um die in Ausführung befindlichen Container sowie die IP-Adresse anzuzeigen, die der Containergruppe zugewiesen ist.
docker ps
Beispielausgabe:
CONTAINER ID IMAGE COMMAND STATUS PORTS
azurevotingappredis_azure-vote-back mcr.microsoft.com/oss/bitnami/redis:6.0.8 Running 52.179.23.131:6379->6379/tcp
azurevotingappredis_azure-vote-front myregistry.azurecr.io/azure-vote-front Running 52.179.23.131:80->80/tcp
Zum Anzeigen der ausgeführten Anwendung in der Cloud geben Sie die angezeigte IP-Adresse in einem lokalen Webbrowser ein. Geben Sie für dieses Beispiel 52.179.23.131 ein. Die Beispielanwendung wird wie im folgenden Beispiel geladen:
Um die Protokolle des Front-End-Containers anzuzeigen, führen Sie den Befehl docker logs aus. Zum Beispiel:
docker logs azurevotingappredis_azure-vote-front
Sie können auch das Azure-Portal oder andere Azure-Tools verwenden, um die Eigenschaften und den Status der von Ihnen bereitgestellten Containergruppe anzuzeigen.
Wenn Sie mit dem Ausprobieren der Anwendung fertig sind, beenden Sie die Anwendung und die Container mit docker compose down:
docker compose down
Dieser Befehl löscht die Containergruppe in Azure Container Instances.
Nächste Schritte
In diesem Tutorial haben Sie Docker Compose verwendet, um von der lokalen Ausführung einer Anwendung mit mehreren Containern zur Ausführung in Azure Container Instances zu wechseln. Sie haben Folgendes gelernt:
- Erstellen einer Azure Container Registry-Instanz
- Klonen des Anwendungsquellcodes von GitHub
- Verwenden von Docker Compose zum lokalen Erstellen und Ausführen einer Anwendung mit mehreren Containern
- Übertragen des Anwendungsimages mithilfe von Push in Ihre Containerregistrierung
- Erstellen eines Azure-Kontexts für Docker
- Aufrufen der Anwendung in Azure Container Instances
Sie können auch die Docker-Erweiterung für Visual Studio Code verwenden, um eine integrierte Erfahrung zum Entwickeln, Ausführen und Verwalten von Containern, Images und Kontexten zu erhalten.
Wenn Sie weitere Features in Azure Container Instances nutzen möchten, verwenden Sie die Azure-Tools, um eine Gruppe mit mehreren Containern anzugeben. Informationen finden Sie beispielsweise in den Tutorials zum Bereitstellen einer Containergruppe mithilfe der Azure CLI mit einer YAML-Datei oder zum Bereitstellen mithilfe einer Azure Resource Manager-Vorlage.