Použití emulátoru v Dockeru pro Windows

PLATÍ PRO: Rozhraní API Cassandra API Gremlin API Table API služby Azure Cosmos DB API pro MongoDB

Emulátor služby Azure Cosmos DB můžete spustit v kontejneru Windows Dockeru. Další informace najdete na GitHubuDockerfile. V současné době emulátor nefunguje v Dockeru pro Oracle Linux. Pomocí následujících pokynů spusťte emulátor v Dockeru pro Windows:

  1. Po instalaci Dockeru pro Windows přepněte na kontejnery Windows tak, že kliknete pravým tlačítkem na ikonu Dockeru na panelu nástrojů a vyberete Přepnout do kontejnerů Windows.

  2. Potom si spuštěním následujícího příkazu z vašeho oblíbeného prostředí stáhněte image emulátoru z Centra Dockeru.

    docker pull mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
    
  3. Pokud chcete spustit image, spusťte následující příkazy v závislosti na příkazovém řádku nebo prostředí PowerShell:

    
    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
    

    Image Dockeru založené na Windows nemusí být obecně kompatibilní s každým hostitelským operačním systémem Windows. Výchozí image emulátoru služby Azure Cosmos DB je například kompatibilní jenom s Windows 10 a Windows Server 2016. Pokud potřebujete image kompatibilní s Windows Serverem 2019, spusťte místo toho následující příkaz:

    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
    

    Poznámka

    Pokud se při spuštění docker run příkazu zobrazí chyba konfliktu portů (tj. pokud je zadaný port již používán), předejte vlastní port změnou čísel portů. Můžete například změnit parametr -p 8081:8081 na -p 443:8081.

  4. Teď použijte koncový bod emulátoru a primární klíč z odpovědi a naimportujte certifikát TLS/SSL do hostitele. Pokud chcete importovat certifikát TLS/SSL, spusťte z příkazového řádku správce následující kroky:

    cd  %LOCALAPPDATA%\CosmosDBEmulator\bind-mount
    powershell .\importcert.ps1
    
  5. Pokud interaktivní prostředí zavřete po spuštění emulátoru, vypne se kontejner emulátoru. Pokud chcete průzkumníka dat znovu otevřít, přejděte v prohlížeči na následující adresu URL. Koncový bod emulátoru je uveden ve zprávě s odpovědí uvedené výše.

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

Pokud máte klientskou aplikaci .NET spuštěnou v kontejneru Dockeru s Linuxem a pokud používáte emulátor služby Azure Cosmos DB na hostitelském počítači, naimportujte certifikát do kontejneru Dockeru s Linuxem podle pokynů v další části.

Znovu vygenerujte certifikáty emulátoru.

Při spuštění emulátoru v kontejneru Dockeru se certifikáty přidružené k emulátoru znovu vygenerují při každém zastavení a restartování příslušného kontejneru. Kvůli tomu musíte certifikáty po každém spuštění kontejneru znovu importovat. Pokud chcete toto omezení obejít, můžete pomocí souboru docker compose vytvořit vazbu kontejneru Dockeru na konkrétní IP adresu a image kontejneru.

Můžete například použít následující konfiguraci v souboru docker compose, nezapomeňte ho naformátovat podle vašeho požadavku:

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'

Další kroky

V tomto článku jste se dozvěděli, jak používat místní emulátor pro bezplatný místní vývoj. Teď můžete pokračovat k dalším článkům: