Azure
WindowsServer
aspnet

マイクロサービス基盤 Service FabricでIISを使う。(Windows Containers)

More than 1 year has passed since last update.

Service Fabricはself-hostedなサーバー(WebListener, Katana, Kestrel)しかサポートされない。つまりIISが利用できないのでIISに依存したアプリの移行が難しいケースが考えられる。しかし、提供を開始したコンテナを使うことで解決できるようになった。ちなみにDockerとWindows Server Containersの2種類が利用できる。ただし新規アプリ開発ではASP.NET CoreやJavaによるReliable ServiceやReliable Actorsを使った実装が推奨なので安易に使うのではなく最終手段として考えておこう。

ここではASP.NET on IISが含まれるコンテナをService Fabricにデプロイしてみる。

事前準備

Azure VMでイメージを作成する場合はWindows Server with Containersを選択する。
image

マイクロソフトさんがDocker Hubにコンテナーを公開してくれているので事前に確認して、アカウントを作成
https://hub.docker.com/u/microsoft/

※こちらは公式ドキュメント:Deploy a Windows container to Service Fabric
https://docs.microsoft.com/ja-jp/azure/service-fabric/service-fabric-deploy-container

コンテナのセットアップ

Windows ServerでDocker environmentのセットアップ

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider
Restart-Computer -Force

再起動してDockerのバージョンを確認

docker version
docker info

Docker HubからIISが含まれるコンテナをPull

docker pull microsoft/iis
docker images

Docker イメージをカスタマイズするので準備

mkdir dockerfiles
cd dockerfiles

作成したフォルダに以下のDockerFileを保存。またIISのwwwroot以下にASP.NETのモジュールをコピー。

FROM microsoft/iis
SHELL ["powershell"]
RUN Install-WindowsFeature NET-Framework-45-ASPNET ; \
Install-WindowsFeature Web-Asp-Net45
COPY . C:\\inetpub\\wwwroot
EXPOSE 80

実行

docker images
docker build -t [Image Name] .
docker run -d -p 80:80 [Imange Name]

Docker プロセスの確認

docker ps

VMにコマンドでアクセス。ブラウザでアクセスすればIISが動いていることを確認できる。

docker exec -i -t [CONTAINER_ID] cmd

Docker Hubにプッシュ
*Reference: Push to Docker Hub
https://docs.docker.com/engine/getstarted/step_six/#step-1-tag-and-push-the-image

Docker Hub. (Check your docker hub account name)
docker images
docker tag [IMAGEID] [docker hub acccountname]/ [Image Name] :[TAG]
docker login
docker push [docker hub acccountname]/[Image Name]

Service Fabric にDeployはこちらのサイトを参照。Deployの完了には10分以上必要で、その間に以下のようなエラーが発生することがあるが無視する。
https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-deploy-container
image

準備が完了すると「Status」が「Ready」になる。Endpointの
image

image

URLのドメイン名をコピーして RDPで接続。無事にWindows Serverにログインできたらコピーしたアプリが動いていることを確認できる。
image