Azure SignalR ServiceのエミュレーターをDockerで動した

2 min read読了の目安(約1800字

昨日書いたAzure SignalR ServiceローカルエミュレーターをDockerで動かしてみた。

Dockerfileはこんな感じ。

FROM mcr.microsoft.com/dotnet/sdk:3.1

RUN dotnet tool install -g Microsoft.Azure.SignalR.Emulator --version 1.0.0-preview1-10723 --add-source https://www.myget.org/F/azure-signalr-dev/api/v3/index.json
ENV PATH="$PATH:/root/.dotnet/tools"
WORKDIR /work
ENTRYPOINT ["asrs-emulator", "start", "-i", "0.0.0.0"]

ポイントは2つ

  • /workをカレントディレクトリにしてる。なのでここをボリュームマウントしてupstreamの設定ファイルを置く感じ。
  • 待ち受けるIPを0.0.0.0にしてる。デフォルトのlocalhostだとホストOS側からはつながらない。

IPを0.0.0.0にしてる関係上、コンソールには次のように表示されるけど、0.0.0.0のところはlocalhostと読み替えてプログラムから使いましょう。

===================================================
The Azure SignalR Emulator was successfully started.
Press Ctrl+C to stop the Emulator.
Use the below value inside *********** block as its ConnectionString:
***********
Endpoint=http://0.0.0.0;Port=8888;AccessKey=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGH;Version=1.0;
***********
===================================================

これで、Azuriteとともに、docker-composeとかで一発で立ち上がるようにしておくとだいぶ便利。

services:
  azurite:
    image: mcr.microsoft.com/azure-storage/azurite
    ports:
      - 10000:10000
    command: "azurite-blob --blobHost 0.0.0.0 --blobPort 10000"
  signalremu:
    container_name: signalr-emu
    build:
      context: ./signalr-emu
      dockerfile: Dockerfile
    ports:
      - 8888:8888
    volumes:
      - ./signalr-emu/config:/work

あとはAzure Cosmos DB EmulatorがWindowsオンリーから脱却してくれれば・・・。