Edited at

マイクロサービス基盤 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