Tutorial: Bereitstellen einer Gruppe mit mehreren Containern mithilfe von Docker ComposeTutorial: Deploy a multi-container group using 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.In this tutorial, you use Docker Compose to define and run a multi-container application locally and then deploy it as a container group in Azure Container Instances.

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.Run containers in Azure Container Instances on-demand when you develop cloud-native apps with Docker and you want to switch seamlessly from local development to cloud deployment. Diese Funktion wird durch die Integration zwischen Docker und Azure ermöglicht.This capability is enabled by integration between Docker and Azure. Sie können native Docker-Befehle verwenden, um entweder eine einzelne Containerinstanz oder eine Gruppe mit mehreren Containern in Azure auszuführen.You can use native Docker commands to run either a single container instance or multi-container group in Azure.

Wichtig

Nicht alle Funktionen von Azure Container Instances werden unterstützt.Not all features of Azure Container Instances are supported. Geben Sie Feedback zur Integration von Docker und Azure ab, indem Sie im GitHub-Repository Docker-ACI-Integration ein Problem erstellen.Provide feedback about the Docker-Azure integration by creating an issue in the Docker ACI Integration GitHub repository.

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.You can use the Docker extension for Visual Studio Code for an integrated experience to develop, run, and manage containers, images, and contexts.

In diesem Artikel führen Sie folgende Schritte aus:In this article, you:

  • Erstellen einer Azure Container Registry-InstanzCreate an Azure container registry
  • Klonen des Anwendungsquellcodes von GitHubClone application source code from GitHub
  • Verwenden von Docker Compose zum lokalen Erstellen und Ausführen einer Anwendung mit mehreren ContainernUse Docker Compose to build an image and run a multi-container application locally
  • Übertragen des Anwendungsimages mithilfe von Push in Ihre ContainerregistrierungPush the application image to your container registry
  • Erstellen eines Azure-Kontexts für DockerCreate an Azure context for Docker
  • Aufrufen der Anwendung in Azure Container InstancesBring up the application in Azure Container Instances

VoraussetzungenPrerequisites

  • Azure CLI : Auf Ihrem lokalen Computer muss die Azure CLI installiert sein.Azure CLI - You must have the Azure CLI installed on your local computer. Empfohlen wird mindestens die Version 2.10.1.Version 2.10.1 or later is recommended. Führen Sie az --version aus, um die Version zu ermitteln.Run az --version to find the version. Installations- und Upgradeinformationen finden Sie bei Bedarf unter Installieren von Azure CLI.If you need to install or upgrade, see Install the 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.Docker Desktop - You must use Docker Desktop version 2.3.0.5 or later, available for Windows or macOS. Oder installieren Sie die Docker ACI-Integrations-CLI für Linux.Or install the Docker ACI Integration CLI for Linux.

Erstellen einer Azure-ContainerregistrierungCreate Azure container registry

Bevor Sie Ihre Containerregistrierung erstellen können, benötigen Sie eine Ressourcengruppe für die Bereitstellung.Before you create your container registry, you need a resource group to deploy it to. Eine Azure-Ressourcengruppe ist eine logische Sammlung, in der alle Azure-Ressourcen bereitgestellt und verwaltet werden.A resource group is a logical collection into which all Azure resources are deployed and managed.

Erstellen Sie mithilfe des Befehls az group create eine Ressourcengruppe.Create a resource group with the az group create command. Im folgenden Beispiel wird eine Ressourcengruppe mit dem Namen myResourceGroup in der Region eastus erstellt:In the following example, a resource group named myResourceGroup is created in the eastus region:

az group create --name myResourceGroup --location eastus

Erstellen Sie nach der Erstellung der Ressourcengruppe mit dem Befehl az acr create eine Azure-Containerregistrierung.Once you've created the resource group, create an Azure container registry with the az acr create command. Der Containerregistrierungsname muss innerhalb von Azure eindeutig sein und zwischen 5 und 50 alphanumerische Zeichen enthalten.The container registry name must be unique within Azure, and contain 5-50 alphanumeric characters. Ersetzen Sie <acrName> durch einen eindeutigen Namen für die Registrierung:Replace <acrName> with a unique name for your registry:

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:Here's partial output for a new Azure container registry named mycontainerregistry082 :

{
  "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.The rest of the tutorial refers to <acrName> as a placeholder for the container registry name that you chose in this step.

Anmelden an der ContainerregistrierungLog in to container registry

Sie müssen sich bei der Azure-Containerregistrierung anmelden, damit Sie Images mithilfe von Push an sie übertragen können.You must log in to your Azure Container Registry instance before pushing images to it. Verwenden Sie den Befehl az acr login, um den Vorgang abzuschließen.Use the az acr login command to complete the operation. Geben Sie den eindeutigen Namen an, den Sie beim Erstellen der Containerregistrierung gewählt haben.You must provide the unique name you chose for the container registry when you created it.

az acr login --name <acrName>

Beispiel:For example:

az acr login --name mycontainerregistry082

Der Befehl gibt nach Abschluss des Vorgangs Login Succeeded zurück:The command returns Login Succeeded once completed:

Login Succeeded

Abrufen von AnwendungscodeGet application code

Die in diesem Tutorial verwendete Beispielanwendung ist eine einfache Abstimmungs-App.The sample application used in this tutorial is a basic voting app. Die Anwendung besteht aus einer Front-End-Webkomponente und einer Back-End-Redis-Instanz.The application consists of a front-end web component and a back-end Redis instance. Die Webkomponente wird in ein benutzerdefiniertes Containerimage gepackt.The web component is packaged into a custom container image. Die Redis-Instanz verwendet ein nicht modifiziertes Image aus Docker Hub.The Redis instance uses an unmodified image from Docker Hub.

Verwenden Sie Git, um die Beispielanwendung in Ihrer Entwicklungsumgebung zu klonen:Use git to clone the sample application to your development environment:

git clone https://github.com/Azure-Samples/azure-voting-app-redis.git

Wechseln Sie in das geklonte Verzeichnis.Change into the cloned directory.

cd azure-voting-app-redis

Im Verzeichnis befinden sich der Anwendungsquellcode und eine vorab erstellte Docker Compose-Datei namens „docker-compose.yaml“.Inside the directory is the application source code and a pre-created Docker compose file, docker-compose.yaml.

Ändern der Docker Compose-DateiModify Docker compose file

Öffnen Sie „docker-compose.yaml“ in einem Text-Editor.Open docker-compose.yaml in a text editor. Die Datei konfiguriert die Dienste azure-vote-back und azure-vote-front.The file configures the azure-vote-back and azure-vote-front services.

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:In the azure-vote-front configuration, make the following two changes:

  1. Aktualisieren Sie die Eigenschaft image im azure-vote-front-Dienst.Update the image property in the azure-vote-front service. Präfigieren Sie den Imagenamen mit dem Anmeldeservernamen Ihrer Azure-Containerregistrierung, <acrName>.azure.io.Prefix the image name with the login server name of your Azure container registry, <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.For example, if your registry is named myregistry , the login server name is myregistry.azurecr.io (all lowercase), and the image property is then myregistry.azurecr.io/azure-vote-front.
  2. Ändern Sie die ports-Zuordnung in 80:80.Change the ports mapping to 80:80. Speichern Sie die Datei.Save the file.

Die aktualisierte Datei sollte in etwa wie folgt aussehen:The updated file should look similar to the following:

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.By making these substitutions, the azure-vote-front image you build in the next step is tagged for your Azure container registry, and the image can be pulled to run in Azure Container Instances.

Tipp

Für dieses Szenario müssen Sie keine Azure-Containerregistrierung verwenden.You don't have to use an Azure container registry for this scenario. Beispielsweise könnten Sie ein privates Repository in Docker Hub auswählen, um Ihr Anwendungsimage zu hosten.For example, you could choose a private repository in Docker Hub to host your application image. Wenn Sie eine andere Registrierung auswählen, aktualisieren Sie die Image-Eigenschaft entsprechend.If you choose a different registry, update the image property appropriately.

Lokales Ausführen der Anwendung mit mehreren ContainernRun multi-container application locally

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:Run docker-compose up, which uses the sample docker-compose.yaml file to build the container image, download the Redis image, and start the application:

docker-compose up --build -d

Verwenden Sie anschließend den Befehl docker-images, um die erstellten Images anzuzeigen.When completed, use the docker images command to see the created images. Drei Images wurden heruntergeladen oder erstellt.Three images have been downloaded or created. Das azure-vote-front-Image enthält die Front-End-Anwendung, die das uwsgi-nginx-flask-Image als Basis verwendet.The azure-vote-front image contains the front-end application, which uses the uwsgi-nginx-flask image as a base. Das redis-Image wird zum Starten einer Redis-Instanz verwendet.The redis image is used to start a Redis instance.

$ 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:Run the docker ps command to see the running containers:

$ 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.To see the running application, enter http://localhost:80 in a local web browser. Die Beispielanwendung wird wie im folgenden Beispiel geladen:The sample application loads, as shown in the following example:

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.After trying the local application, run docker-compose down to stop the application and remove the containers.

docker-compose down

Übertragen des Images in die Containerregistrierung per PushvorgangPush image to container registry

Um die Anwendung in Azure Container Instances bereitzustellen, müssen Sie das azure-vote-front-Image in Ihre Containerregistrierung pushen.To deploy the application to Azure Container Instances, you need to push the azure-vote-front image to your container registry. Führen Sie docker-compose push aus, um das Image zu pushen:Run docker-compose push to push the image:

docker-compose push

Der Pushvorgang in die Registrierung kann ein paar Minuten dauern.It can take a few minutes to push to the registry.

Um zu überprüfen, ob das Image in Ihrer Registrierung gespeichert wurde, führen Sie den Befehl az acr repository show aus:To verify the image is stored in your registry, run the az acr repository show command:

az acr repository show --name <acrName> --repository azure-vote-front

Erstellen eines Azure-KontextsCreate Azure context

Um mithilfe von Docker-Befehlen Container in Azure Container Instances auszuführen, melden Sie sich zuerst bei Azure an:To use Docker commands to run containers in Azure Container Instances, first log into Azure:

docker login azure

Wenn Sie dazu aufgefordert werden, geben Sie Ihre Azure-Anmeldeinformationen ein, oder wählen Sie sie aus.When prompted, enter or select your Azure credentials.

Führen Sie docker context create aci aus, um einen ACI-Kontext zu erstellen.Create an ACI context by running docker context create aci. Durch diesen Kontext wird Docker einem Azure-Abonnement und einer Ressourcengruppe zugeordnet, um die Erstellung und Verwaltung von Containerinstanzen zu ermöglichen.This context associates Docker with an Azure subscription and resource group so you can create and manage container instances. Um beispielsweise einen Kontext namens myacicontext zu erstellen:For example, to create a context called myacicontext:

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.When prompted, select your Azure subscription ID, then select an existing resource group or create a new resource group. Wenn Sie eine neue Ressourcengruppe ausgewählt haben, wird diese mit einem systemseitig generierten Namen erstellt.If you choose a new resource group, it's created with a system-generated name. Azure Container Instances muss wie alle Azure-Ressourcen in einer Ressourcengruppe bereitgestellt werden.Azure container instances, like all Azure resources, must be deployed into a resource group. Mit Ressourcengruppen können verwandte Azure-Ressourcen organisiert und verwaltet werden.Resource groups allow you to organize and manage related Azure resources.

Führen Sie docker context ls aus, um zu bestätigen, dass Sie Ihren Docker-Kontexten den ACI-Kontext hinzugefügt haben:Run docker context ls to confirm that you added the ACI context to your Docker contexts:

docker context ls

Bereitstellen der Anwendung in Azure Container InstancesDeploy application to Azure Container instances

Ändern Sie als Nächstes den ACI-Kontext.Next, change to the ACI context. Nachfolgende Docker-Befehle werden in diesem Kontext ausgeführt.Subsequent Docker commands run in this context.

docker context use myacicontext

Führen Sie docker compose up aus, um die Anwendung in Azure Container Instances zu starten.Run docker compose up to start the application in Azure Container Instances. Das azure-vote-front-Image wird aus ihrer Containerregistrierung abgerufen, und die Containergruppe wird in Azure Container Instances erstellt.The azure-vote-front image is pulled from your container registry and the container group is created in Azure Container Instances.

docker compose up

Hinweis

Die derzeit in einem ACI-Kontext verfügbaren Docker Compose-Befehle sind docker compose up und docker compose down.Docker Compose commands currently available in an ACI context are docker compose up and docker compose down. In diesen Befehlen steht zwischen docker und compose kein Bindestrich.There is no hyphen between docker and compose in these commands.

In kurzer Zeit wird die Containergruppe bereitgestellt.In a short time, the container group is deployed. Beispielausgabe:Sample output:

[+] 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.Run docker ps to see the running containers and the IP address assigned to the container group.

docker ps

Beispielausgabe:Sample output:

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.To see the running application in the cloud, enter the displayed IP address in a local web browser. Geben Sie für dieses Beispiel 52.179.23.131 ein.In this example, enter 52.179.23.131. Die Beispielanwendung wird wie im folgenden Beispiel geladen:The sample application loads, as shown in the following example:

Abbildung der Voting-App in ACI

Um die Protokolle des Front-End-Containers anzuzeigen, führen Sie den Befehl docker logs aus.To see the logs of the front-end container, run the docker logs command. Zum Beispiel:For example:

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.You can also use the Azure portal or other Azure tools to see the properties and status of the container group you deployed.

Wenn Sie mit dem Ausprobieren der Anwendung fertig sind, beenden Sie die Anwendung und die Container mit docker compose down:When you finish trying the application, stop the application and containers with docker compose down:

docker compose down

Dieser Befehl löscht die Containergruppe in Azure Container Instances.This command deletes the container group in Azure Container Instances.

Nächste SchritteNext steps

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.In this tutorial, you used Docker Compose to switch from running a multi-container application locally to running in Azure Container Instances. Sie haben Folgendes gelernt:You learned how to:

  • Erstellen einer Azure Container Registry-InstanzCreate an Azure container registry
  • Klonen des Anwendungsquellcodes von GitHubClone application source code from GitHub
  • Verwenden von Docker Compose zum lokalen Erstellen und Ausführen einer Anwendung mit mehreren ContainernUse Docker Compose to build an image and run a multi-container application locally
  • Übertragen des Anwendungsimages mithilfe von Push in Ihre ContainerregistrierungPush the application image to your container registry
  • Erstellen eines Azure-Kontexts für DockerCreate an Azure context for Docker
  • Aufrufen der Anwendung in Azure Container InstancesBring up the application 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.You can also use the Docker extension for Visual Studio Code for an integrated experience to develop, run, and manage containers, images, and contexts.

Wenn Sie weitere Features in Azure Container Instances nutzen möchten, verwenden Sie die Azure-Tools, um eine Gruppe mit mehreren Containern anzugeben.If you want to take advantage of more features in Azure Container Instances, use Azure tools to specify a multi-container group. 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.For example, see the tutorials to deploy a container group using the Azure CLI with a YAML file, or deploy using an Azure Resource Manager template.