Docker for Windows 上でエミュレーターを使用する

適用対象: NoSQL MongoDB Cassandra Gremlin Table

Azure Cosmos DB Emulator は、Windows Docker コンテナー上で実行できます。 Dockerfile と詳細については、GitHub を参照してください。 現在、このエミュレーターは Docker for Oracle Linux 上では機能しません。 Docker for Windows 上でエミュレーターを実行するには、次の手順を実行します。

  1. Docker for Windows をインストールしたら、ツール バーの Docker アイコンを右クリックし、 [Switch to Windows containers](Windows コンテナーに切り替える) を選択して Windows コンテナーに切り替えます。

  2. 次に、普段利用しているシェルから次のコマンドを実行し、Docker Hub からエミュレーター イメージをプルします。

    docker pull mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
    
  3. イメージを開始するには、コマンド ラインまたは 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
    

    Windows ベースの Docker イメージは、一般にすべての Windows ホスト OS と互換性があるとは限りません。 たとえば、既定の Azure Cosmos DB Emulator イメージは Windows 10 および Windows Server 2016 とのみ互換性があります。 Windows Server 2019 と互換性があるイメージが必要な場合は、代わりに次のコマンドを実行します。

    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
    

    Note

    docker run コマンドを実行するときに、ポートの競合エラーが表示された場合 (つまり、指定したポートが既に使用されている場合) は、ポート番号を変更してカスタム ポートを渡します。 たとえば、"-p 8081:8081" パラメーターを "-p 443:8081" に変更することができます

  4. 次に、応答からエミュレーター エンドポイントと主キーを使用して、TLS/SSL 証明書をホストにインポートします。 TLS/SSL 証明書をインポートするには、管理者コマンド プロンプトから次の手順を実行します。

    cd  %LOCALAPPDATA%\CosmosDBEmulator\bind-mount
    powershell .\importcert.ps1
    
  5. エミュレーターの起動後に対話型シェルを閉じると、エミュレーターのコンテナーがシャットダウンされます。 データ エクスプローラーを開くには、ブラウザーで次の URL に移動します。 上記の応答メッセージにエミュレーター エンドポイントが表示されます。

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

Linux Docker コンテナーで実行されている .NET クライアント アプリケーションがあり、ホスト マシン上で Azure Cosmos DB Emulator を実行している場合は、次のセクションの手順に従って、Linux Docker コンテナーに証明書をインポートしてください。

エミュレーターの証明書を再生成する

Docker コンテナーでエミュレーターを実行する場合、エミュレーターに関連付けられた証明書は、対応するコンテナーを停止して再起動するたびに再生成されます。 そのため、各コンテナーの起動後に証明書を再インポートする必要があります。 この制限を回避するには、Docker Compose ファイルを使用して、Docker コンテナーを特定の IP アドレスとコンテナー イメージにバインドします。

たとえば、Docker Compose ファイル内で次の構成を使用できます。必要に応じて形式を変更してください。

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'

次のステップ

この記事では、無料のローカル開発のためにローカル エミュレーターを使用する方法について学習しました。 次の記事に進むことができます。