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 --version aus, 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:

  1. Aktualisieren Sie die Eigenschaft image im azure-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 dann myregistry.azurecr.io/azure-vote-front.
  2. Ändern Sie die ports-Zuordnung in 80: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:

Image der Voting-App

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:

Abbildung der Voting-App in ACI

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.