自作のWindowsアプリをAKSに載せるキホン技

Azure Kubernetes Service(以降、AKS)は Windows コンテナの使用できる構成を作成することができます。

(記事公開時点ではパブリックプレビュー)

Windows コンテナが使える AKS を用意して、アプリを動かしてみましょう。

アプリの作成からインフラの作成まで一通り必要な手順を書いてみましたので、この記事をベースに Windows コンテナの世界に入門していただけたらと思います。

また、アプリ開発、コンテナ作成、AKS 作成を一通り記載しているので、例えばアプリ開発は知識があるけどインフラはちょっと・・・という場合に部分的に参照していただけると嬉しいです。

Azure Cloud Shell とはなんぞや?などの細かい説明は省いていますので、適宜調べながら読み進めていただけたらと思います。

概要

  • (Windows 環境でしか動作しない)アプリケーションを作成します
  • アプリケーションを載せたコンテナイメージを作成します
  • コンテナイメージをコンテナレジストリ(ACR)に格納します
  • Windows コンテナが動作する AKS を作成します
  • マニフェストファイルを使用して、AKS 上でコンテナを動かします

Web アプリの作成

【作業環境の想定:手元の Windows PC】

Web 上に公開されているサンプルアプリを使っても良いんですが、現実は自社で作成したアプリなどを使用すると思うので、Web アプリの作成からサラッと見てみましょう。

Windows コンテナが必要なケースは、Windows でしか動作しないアプリ、例えば.NET Framework のアプリを使用している場合だと思われます。.NET Framework の ASP.NET MVC アプリを作っておきましょう。

下記サイトから Visual Studio のインストーラをダウンロードします。 https://visualstudio.microsoft.com/ja/downloads/

インストーラを起動し、「ASP.NET と Web 開発」を選択してインストールします。

インストールが成功したら、新規プロジェクトを起動して、C#の ASP.NET MVC アプリを作成しましょう。

ちょっと古めのアプリを載せる想定だと思いますので、.NET Framework は「4.5.2」辺りが良いでしょうか。プロジェクト名は適当で良いので、「MVC」のアプリを作成してください。

アプリが作成されたら、Visual Studio のソリューションエクスプローラーから、Views/Home/Index.cshtml を開き、適当な加工を加えて実行してみてください。例えば下記のような感じでザックリいきましょう。

@{
ViewBag.Title = "コンテナアプリのデモ";
}

<div class="jumbotron">
    <h1>ASP.NET</h1>
    <p class="lead">コンテナでWebアプリを動かしてみよう</p>
</div>

F5 キーでアプリの正常動作を確認したら、アプリケーションを発行しましょう。

[Read More]

Dockerfileに出てくる謎のexe、ServiceMonitor

Dockerfile の基本的な書き方

皆様、Windows コンテナで遊んでいますか?

Dockerfile に書く内容は、誤解を恐れず表現すると、だいたい下記のような流れですよね。

  1. ベースイメージ
  2. ミドルウェアのインストール、セットアップの処理
  3. アプリケーションのコピー
  4. アプリケーションの起動を監視するために ENTRYPOINT を記載

これだけ認識していれば、例えば単発実行や無限ループで処理待機するコンソールアプリケーションのコンテナ化なんてのは、(細かいことを無視すれば)すぐにできてしまうと思います。

謎の exe 、ServiceMonitor

しかし、例えば下記の Dockerfile を見てください。

https://github.com/microsoft/dotnet-framework-docker/blob/7d120a3da56ea5279e1b54a8185530af056c7b33/4.8/aspnet/windowsservercore-ltsc2019/Dockerfile

これは IIS で動く Web アプリを動かすときに使える Dockerfile になるんですが、 ENTRYPOINT に ServiceMonitor.exe なるものが指定されています。

「なにこれ」と思いませんでしたか?

私は思いました。

そもそも ENTRYPOINT って何だっけ

ENTRYPOINT は「コンテナが実行するファイルを設定します。」とのことです。

http://docs.docker.jp/v1.11/engine/reference/builder.html#entrypoint

そして、その「実行するファイル」が終了すると共に、コンテナが終了します。

これを IIS で動かすアプリに当てはめるとどうなるでしょうか?

IIS で動かすアプリは exe ファイルでは無いので、それ単体で実行することはできませんよね。IIS の上に載せてあげることで初めて動作します。

ということは、IIS が ENTRYPOINT に記載すべきものとなります。

しかし、 IIS 自体はサービスなので、「コンテナが実行するファイル」とは違う概念になります。

「サービスの起動状態を監視するアプリ」が欲しい

例えば、「コンテナが実行するファイル」が IIS というサービスの起動状態を監視してくれて、そのサービスの状態に従って終了してくれたら良さそうに思いませんか?

そんな役割を担ってくれるのが ServiceMonitor.exe です。

よって、IIS のようなサービスの状態がコンテナの起動状態を左右する場合は、 ServiceMonitor.exe を ENTRYPOINT に指定してあげればコンテナが実現できそうですね。

まとめ

ServiceMonitor.exe のおかげて IIS アプリのコンテナが実現できることが分かりましたでしょうか? 広く公開されている Dockerfile は参考になるので、「これ何やってるんだろう?」を深堀してみると面白いですし、勉強になります。

[Read More]