在適用於 Windows 的 Docker 上使用模擬器

適用於: SQL API Cassandra API Gremlin API 資料表 API 適用於 MongoDB 的 Azure Cosmos DB API

您可以在 Windows Docker 容器上執行 Azure Cosmos DB Emulator。 如需了解 Dockerfile 和詳細資訊,請參閱 GitHub。 目前模擬器無法在適用於 Oracle Linux 的 Docker 上運作。 使用下列指示,在適用於 Windows 的 Docker 上執行模擬器:

  1. 安裝 Docker for Windows 後,以滑鼠右鍵按一下工具列上的 Docker 圖示,然後選取 [切換到 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 主機作業系統相容。 例如,預設的 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
    

    注意

    執行 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 撰寫檔案,將 Docker 容器繫結至特定的 IP 位址和容器映像。

例如,您可以在 Docker 撰寫檔案中使用下列設定,請務必根據您的需求將它格式化:

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'

後續步驟

在本文中,您學習到如何使用免費的本機模擬器在本機開發。 您現在可以繼續進行下一篇文章: