De emulator in Docker voor Windows gebruiken

U kunt de Emulator Azure Cosmos DB uitvoeren in een Windows Docker-container. Zie de Docker Hub voor de docker pull-opdracht en GitHub voor de Dockerfile en meer informatie. Op dit moment werkt de emulator niet in Docker voor Oracle Linux. Gebruik de volgende instructies om de emulator uit te voeren op Docker voor Windows:

  1. Nadat u Docker voor Windows hebt geïnstalleerd, schakelt u over naar Windows-containers door met de rechtermuisknop op het Docker-pictogram op de werkbalk te klikken en Overschakelen naar Windows-containers te selecteren.

  2. Haal vervolgens de installatiekopie van de emulator op van Docker Hub met de volgende opdracht in uw favoriete shell.

    docker pull mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
    
  3. Als u de afbeelding wilt starten, voert u de volgende opdrachten uit, afhankelijk van de opdrachtregel of de PowerShell-omgeving:

    
    md %LOCALAPPDATA%\CosmosDBEmulator\bind-mount
    
    docker run --name azure-cosmosdb-emulator --memory 2GB --mount "type=bind,source=%LOCALAPPDATA%\CosmosDBEmulator\bind-mount,destination=C:\CosmosDB.Emulator\bind-mount" --interactive --tty -p 8081:8081 -p 8900:8900 -p 8901:8901 -p 8902:8902 -p 10250:10250 -p 10251:10251 -p 10252:10252 -p 10253:10253 -p 10254:10254 -p 10255:10255 -p 10256:10256 -p 10350:10350 mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
    

    Docker-afbeeldingen op basis van Windows zijn mogelijk niet algemeen compatibel met elk Windows-host-besturingssysteem. De standaard-Emulator Azure Cosmos DB is bijvoorbeeld alleen compatibel met Windows 10 en Windows Server 2016. Als u een afbeelding nodig hebt die compatibel is met Windows Server 2019, moet u in plaats daarvan de volgende opdracht uitvoeren:

    docker run --name azure-cosmosdb-emulator --memory 2GB --mount "type=bind,source=%hostDirectory%,destination=C:\CosmosDB.Emulator\bind-mount" --interactive --tty -p 8081:8081 -p 8900:8900 -p 8901:8901 -p 8902:8902 -p 10250:10250 -p 10251:10251 -p 10252:10252 -p 10253:10253 -p 10254:10254 -p 10255:10255 -p 10256:10256 -p 10350:10350 mcr.microsoft.com/cosmosdb/winsrv2019/azure-cosmos-emulator:latest
    

    Notitie

    Als u bij het uitvoeren van de opdracht een fout met een poortconflict ziet (dat wil zeggen als de opgegeven poort al in gebruik is), geeft u een aangepaste poort door door de poortnummers docker run te wijzigen. U kunt bijvoorbeeld de parameter '-p 8081:8081' wijzigen in '-p 443:8081'

  4. Gebruik nu het emulator-eindpunt en de primaire sleutel uit het antwoord en importeer het TLS/SSL-certificaat in uw host. Voer de volgende stappen uit vanaf een opdrachtprompt van de beheerder om het TLS/SSL-certificaat te importeren:

    cd  %LOCALAPPDATA%\CosmosDBEmulator\bind-mount
    powershell .\importcert.ps1
    
  5. Als u de interactieve shell sluit nadat de emulator is gestart, wordt de container van de emulator afgesloten. Als u data explorer opnieuw wilt openen, gaat u naar de volgende URL in uw browser. Het eindpunt van de emulator wordt vermeld in het reactiebericht dat hierboven wordt getoond.

    https://<emulator endpoint provided in response>/_explorer/index.html

Als u een .NET-clienttoepassing hebt die wordt uitgevoerd op een Linux Docker-container en als u Azure Cosmos DB Emulator op een hostmachine gebruikt, gebruikt u de instructies in de volgende sectie om het certificaat te importeren in de Linux Docker-container.

De emulatorcertificaten opnieuw maken

Bij het uitvoeren van de emulator in een Docker-container worden de certificaten die zijn gekoppeld aan de emulator telkens opnieuw gemaakt wanneer u de desbetreffende container stopt en opnieuw start. Daarom moet u de certificaten opnieuw importeren nadat elke container is begonnen. U kunt deze beperking omzeilen door een Docker Compose-bestand te gebruiken om de Docker-container te binden aan een bepaald IP-adres en een container-afbeelding.

U kunt bijvoorbeeld de volgende configuratie gebruiken in het Docker Compose-bestand. Zorg ervoor dat u het opmaken op basis van uw vereisten:

version: '2.4' # Do not upgrade to 3.x yet, unless you plan to use swarm/docker stack: https://github.com/docker/compose/issues/4513

networks:
  default:
    external: false
    ipam:
      driver: default
      config:
        - subnet: "172.16.238.0/24"

services:

  # First create a directory that will hold the emulator traces and certificate to be imported
  # set hostDirectory=C:\emulator\bind-mount
  # mkdir %hostDirectory%

  cosmosdb:
    container_name: "azurecosmosemulator"
    hostname: "azurecosmosemulator"
    image: 'mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator'
    platform: windows
    tty: true
    mem_limit: 3GB
    ports:
        - '8081:8081'
        - '8900:8900'
        - '8901:8901'
        - '8902:8902'
        - '10250:10250'
        - '10251:10251'
        - '10252:10252'
        - '10253:10253'
        - '10254:10254'
        - '10255:10255'
        - '10256:10256'
        - '10350:10350'
    networks:
      default:
        ipv4_address: 172.16.238.246
    volumes:
        - '${hostDirectory}:C:\CosmosDB.Emulator\bind-mount'

Volgende stappen

In dit artikel hebt u geleerd hoe u de lokale emulator kunt gebruiken voor gratis lokale ontwikkeling. U kunt nu doorgaan met de volgende artikelen: