Använda emulatorn i Docker för Windows

GÄLLER FÖR: Nosql Mongodb Cassandra Gremlin Tabell

Du kan köra Azure Cosmos DB-emulatorn på en Windows Docker-container. Mer information finns i DockerfileGitHub. För närvarande fungerar inte emulatorn på Docker för Oracle Linux. Använd följande instruktioner för att köra emulatorn på Docker för Windows:

  1. När du har installerat Docker för Windows växlar du till Windows-containrar genom att högerklicka på Docker-ikonen i verktygsfältet och välja Växla till Windows-containrar.

  2. Hämta därefter emulatoravbildningen från Docker-hubben genom att köra följande kommando i ditt favoritgränssnitt.

    docker pull mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
    
  3. Starta avbildningen genom att köra följande kommandon beroende på kommandoraden eller PowerShell-miljön:

    
    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
    

    Windows-baserade Docker-avbildningar kanske inte är allmänt kompatibla med alla Windows-värdoperativsystem. Till exempel är standard-Avbildningen av Azure Cosmos DB-emulatorn endast kompatibel med Windows 10 och Windows Server 2016. Om du behöver en avbildning som är kompatibel med Windows Server 2019 kör du följande kommando i stället:

    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
    

    Anteckning

    Om du ser ett portkonfliktfel (om den angivna porten redan används) när du kör docker run kommandot skickar du en anpassad port genom att ändra portnumren. Du kan till exempel ändra parametern "-p 8081:8081" till "-p 443:8081"

  4. Använd nu emulatorns slutpunkt och primärnyckel från svaret och importera TLS/SSL-certifikatet till värden. Om du vill importera TLS/SSL-certifikatet kör du följande steg från en kommandotolk för administratörer:

    cd  %LOCALAPPDATA%\CosmosDBEmulator\bind-mount
    powershell .\importcert.ps1
    
  5. Om du stänger det interaktiva gränssnittet när emulatorn har startat stängs emulatorns container av. Om du vill öppna datautforskaren igen går du till följande URL i webbläsaren. Emulatorns slutpunkt finns i svarsmeddelandet ovan.

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

Om du har ett .NET-klientprogram som körs på en Linux Docker-container och om du kör Azure Cosmos DB-emulatorn på en värddator använder du anvisningarna i nästa avsnitt för att importera certifikatet till Linux Docker-containern.

Återskapa emulatorcertifikaten

När du kör emulatorn i en Docker-container återskapas certifikaten som är associerade med emulatorn varje gång du stoppar och startar om respektive container. Därför måste du importera certifikaten igen när varje container har startats. Om du vill undvika den här begränsningen kan du använda en Docker Compose-fil för att binda Docker-containern till en viss IP-adress och en containeravbildning.

Du kan till exempel använda följande konfiguration i Docker Compose-filen och se till att formatera den enligt dina behov:

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'

Nästa steg

I den här artikeln har du lärt dig hur du använder den lokala emulatorn för kostnadsfri lokal utveckling. Nu kan du gå vidare till nästa artiklar: