Zelfstudie: Een groep met meerdere containers implementeren met behulp van Docker Compose

In deze zelfstudie gebruikt u Docker Compose om een toepassing met meerdere containers lokaal te definiëren en uit te voeren en deze vervolgens te implementeren als een containergroep in Azure Container Instances.

Voer op aanvraag containers uit in Azure Container Instances wanneer u cloud-apps ontwikkelt met Docker en u naadloos wilt kunnen overschakelen van lokaal ontwikkelen naar cloudimplementatie. Deze mogelijkheid wordt ingeschakeld door integratie tussen Docker en Azure. U kunt systeemeigen Docker-opdrachten gebruiken voor het uitvoeren van een instantie met één container of een groep met meerdere containers in Azure.

Belangrijk

Niet alle functies van Azure Container Instances worden ondersteund. Geef feedback over de integratie van Docker en Azure door een probleem aan te maken in de GitHub-opslagplaats Docker ACI-integratie.

Tip

U kunt de Docker-extensie voor Visual Studio Code gebruiken om te werken met een geïntegreerde ervaring voor het ontwikkelen, uitvoeren en beheren van containers, installatiekopieën en contexten.

In dit artikel leert u het volgende:

  • Een Azure-containerregister maken
  • Toepassingsbroncode klonen vanuit GitHub
  • Docker Compose gebruiken om een installatiekopie te bouwen en een toepassing met meerdere containers lokaal uit te voeren
  • De installatiekopie van de toepassing naar het containerregister pushen
  • Een Azure-context maken voor Docker
  • De toepassing openen in Azure Container Instances

Vereisten

  • Azure CLI: de Azure CLI moet op uw lokale computer zijn geïnstalleerd. Versie 2.10.1 of hoger wordt aanbevolen. Voer az --version uit om de versie te bekijken. Als u uw CLI wilt installeren of upgraden, raadpleegt u De Azure CLI installeren.

  • Docker Desktop: u moet Docker Desktop versie 2.3.0.5 of hoger gebruiken. Deze versie is beschikbaar voor Windows of macOS. U kunt ook de Docker ACI Integration CLI voor Linux installeren.

Azure Container Registry maken

Voordat u het containerregister maakt, hebt u een resourcegroep nodig om dit in te implementeren. Een resourcegroep is een logische verzameling waarin alle Azure-resources worden geïmplementeerd en beheerd.

Een resourcegroep maken met de opdracht az group create. In het volgende voorbeeld wordt een resourcegroep met de naam myResourceGroup gemaakt in de regio eastus:

az group create --name myResourceGroup --location eastus

Zodra u de resourcegroep hebt gemaakt, maakt u een Azure Container Registry met de opdracht az acr create. De containerregisternaam moet uniek zijn binnen Azure en mag 5 tot 50 alfanumerieke tekens bevatten. Vervang <acrName> door een unieke naam voor het register:

az acr create --resource-group myResourceGroup --name <acrName> --sku Basic

Hier volgt een gedeeltelijke uitvoer voor een nieuw Azure-containerregister met de naam 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"
}

In de rest van de zelfstudie wordt naar <acrName> verwezen als tijdelijke aanduiding voor de containerregisternaam die u in deze stap hebt gekozen.

Aanmelden bij het containerregister

U moet u aanmelden bij het Azure Container Registry-exemplaar voordat u installatiekopieën kunt pushen. Gebruik de opdracht az acr login om de bewerking te voltooien. U moet de unieke naam van het containerregister opgeven die u hebt gekozen toen u het maakte.

az acr login --name <acrName>

Bijvoorbeeld:

az acr login --name mycontainerregistry082

De opdracht retourneert Login Succeeded nadat deze is voltooid:

Login Succeeded

Toepassingscode ophalen

De voorbeeldtoepassing die wordt gebruikt in deze zelfstudie, is een eenvoudige stem-app. De toepassing bestaat uit een front-endwebonderdeel en een back-end-Redis-exemplaar. Het webonderdeel is verpakt in een aangepaste containerinstallatiekopie. Het Redis-exemplaar gebruikt een ongewijzigde installatiekopie van Docker Hub.

Gebruik git om de voorbeeldtoepassing te klonen naar uw ontwikkelomgeving:

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

Wijzig in de gekloonde map.

cd azure-voting-app-redis

In de map bevindt zich de broncode van de toepassing en een vooraf gemaakt Docker-compositiebestand, docker-compose.yaml.

Docker-compositiebestand wijzigen

Open docker-compose.yaml in een teksteditor. Het bestand configureert de azure-vote-back- en 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"

Breng de volgende twee wijzigingen aan in de azure-vote-front-configuratie:

  1. Werk de eigenschap image in de azure-vote-front-service bij. Geef de naam van de installatiekopie een voorvoegsel met de aanmeldingsservernaam van uw Azure-containerregister, <acrName>. azurecr.io. Als uw register bijvoorbeeld de myregistry heeft, wordt de naam van de aanmeldingsserver myregistry.azurecr.io (allemaal kleine letters). De eigenschap van de installatiekopie is dan myregistry.azurecr.io/azure-vote-front.
  2. Wijzig de ports-toewijzing in 80:80. Sla het bestand op.

Het bijgewerkte bestand moet er ongeveer als volgt uitzien:

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"

Als u deze vervangingen aanbrengt, wordt de azure-vote-front-installatiekopie die u in de volgende stap gaat maken, gelabeld voor uw Azure-containerregister en kan de installatiekopie worden opgehaald om te worden uitgevoerd in Azure Container Instances.

Tip

U hoeft geen Azure-containerregister te gebruiken voor dit scenario. U kunt bijvoorbeeld een privé-opslagplaats in Docker Hub kiezen om uw toepassingsinstallatiekopie te hosten. Als u een ander register kiest, werkt u de eigenschap van de installatiekopie aan de hand hiervan bij.

Toepassing met meerdere containers lokaal uitvoeren

Voer docker-compose up uit, dat het voorbeeldbestand docker-compose.yaml gebruikt om de containerinstallatiekopie te maken, de Redis-installatiekopie te downloaden en de toepassing te starten:

docker-compose up --build -d

Wanneer dit is voltooid, gebruikt u de opdracht docker images om de gemaakte installatiekopieën te bekijken. Er zijn drie installatiekopieën gedownload of gemaakt. De installatiekopie azure-vote-front bevat de front-endtoepassing, die de installatiekopie uwsgi-nginx-flask bevat als basis. De redis-installatiekopie wordt gebruikt om een Redis-exemplaar te starten.

$ 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

Voer de opdracht docker ps uit om de actieve containers te zien:

$ 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

Als u wilt zien hoe de toepassing wordt uitgevoerd, typt u http://localhost:80 in een lokale browser. De voorbeeldtoepassing wordt dan geladen, zoals wordt weergegeven in het volgende voorbeeld:

Installatiekopie van stem-app

Nadat u de lokale toepassing hebt geprobeerd, voert u docker-compose down uit om de toepassing te stoppen en de containers te verwijderen.

docker-compose down

Installatiekopie pushen naar containerregister

Als u de toepassing wilt implementeren op Azure Container Instances, moet u de azure-vote-front-installatiekopie naar het containerregister pushen. Voer docker-compose push uit om de installatiekopie te pushen:

docker-compose push

Het kan een paar minuten duren om naar het register te pushen.

Als u wilt controleren of de installatiekopie in het register is opgeslagen, voert u de opdracht az acr repository show uit:

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

Azure-context maken

Als u Docker-opdrachten wilt gebruiken voor het uitvoeren van containers in Azure Container Instances, meldt u zich eerst aan bij Azure:

docker login azure

Voer uw Azure-referenties in of selecteer deze wanneer dit wordt gevraagd.

Maak een ACI-context door docker context create aci uit te voeren. Deze context koppelt Docker aan een Azure-abonnement en een resourcegroep, zodat u containerinstanties kunt maken en beheren. Stel dat u een context wilt maken met de naam myacicontext:

docker context create aci myacicontext

Wanneer u hierom wordt gevraagd, selecteert u de id van uw Azure-abonnement en selecteert u een bestaande resourcegroep of maakt u een nieuwe. Als u een nieuwe resourcegroep maakt, krijgt deze een door het systeem gegenereerde naam. Azure Container Instances moeten, zoals alle Azure-resources, worden geïmplementeerd in een resourcegroep. Met resourcegroepen kunt u gerelateerde Azure-resources organiseren en beheren.

Voer docker context ls uit om te bevestigen dat u de ACI-context hebt toegevoegd aan uw Docker-contexten:

docker context ls

Toepassing implementeren in Azure Container Instances

Schakel vervolgens naar de ACI-context. Alle volgende Docker-opdrachten worden uitgevoerd in deze context.

docker context use myacicontext

Voer docker compose up uit om de toepassing te starten in Azure Container Instances. De azure-vote-front-installatie kopie wordt opgehaald uit het containerregister en de containergroep wordt gemaakt in Azure Container Instances.

docker compose up

Notitie

Docke Compose-opdrachten die momenteel beschikbaar zijn in een ACI-context, zijn docker compose up en docker compose down. Er staat geen streepje tussen docker en compose in deze opdrachten.

In korte tijd wordt de containergroep geïmplementeerd. Voorbeelduitvoer:

[+] Running 3/3
 ⠿ Group azurevotingappredis  Created                          3.6s
 ⠿ azure-vote-back            Done                             10.6s
 ⠿ azure-vote-front           Done                             10.6s

Voer docker ps uit om de actieve containers en het IP-adres dat is toegewezen aan de container groep weer te geven.

docker ps

Voorbeelduitvoer:

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

Als u de actieve toepassing in de cloud wilt zien, voert u het weergegeven IP-adres in een lokale webbrowser in. In dit voorbeeld voert u 52.179.23.131 in. De voorbeeldtoepassing wordt dan geladen, zoals wordt weergegeven in het volgende voorbeeld:

Installatiekopie van stem-app in ACI

Als u de logboeken van de front-endcontainer wilt weergeven, voert u de opdracht docker logs uit. Bijvoorbeeld:

docker logs azurevotingappredis_azure-vote-front

U kunt ook de Azure Portal of andere Azure-hulpprogramma's gebruiken om de eigenschappen en status van de door u geïmplementeerde containergroep te bekijken.

Wanneer u klaar bent met het uitvoeren van de toepassing, stopt u de toepassing en de containers met docker compose down:

docker compose down

Met deze opdracht wordt de containergroep verwijderd uit Azure Container Instances.

Volgende stappen

In deze zelfstudie hebt u Docker Compose gebruikt om te schakelen van het lokaal uitvoeren van een toepassing met meerdere containers naar het uitvoeren in Azure Container Instances. U hebt geleerd hoe u:

  • Een Azure-containerregister maken
  • Toepassingsbroncode klonen vanuit GitHub
  • Docker Compose gebruiken om een installatiekopie te bouwen en een toepassing met meerdere containers lokaal uit te voeren
  • De installatiekopie van de toepassing naar het containerregister pushen
  • Een Azure-context maken voor Docker
  • De toepassing openen in Azure Container Instances

U kunt ook de Docker-extensie voor Visual Studio Code gebruiken om te werken met een geïntegreerde ervaring voor het ontwikkelen, uitvoeren en beheren van containers, installatiekopieën en contexten.

Als u gebruik wilt maken van meer functies in Azure Container Instances, kunt u de Azure-hulpprogramma's gebruiken om een groep met meerdere containers op te geven. Raadpleeg bijvoorbeeld de zelfstudies voor het implementeren van een containergroep met behulp van de Azure CLI met een YAML-bestandof implementeren met behulp van een Azure Resource Manager-sjabloon.