Använda emulatorn på Docker för Windows

Du kan köra Azure Cosmos DB på en Windows Docker-container. Se Docker Hub för docker pull-kommandot och GitHub för Dockerfile mer information. Emulatorn fungerar för närvarande inte 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 standardavbildningen Azure Cosmos DB emulator 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 (det vill säga om den angivna porten redan används) när du kör kommandot skickar du en anpassad port genom att docker run ändra portnumren. Du kan till exempel ändra parametern "-p 8081:8081" till "-p 443:8081"

  4. Använd nu emulatorslutpunkten och primärnyckeln 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ör:

    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. Öppna datautforskaren igen genom att gå 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, följer 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 de certifikat 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 startar. Du kan komma runt den här begränsningen genom att 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. 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 fortsätta till nästa artiklar: