
Dockerfile の基本的な書き方
皆様、Windows コンテナで遊んでいますか?
Dockerfile に書く内容は、誤解を恐れず表現すると、だいたい下記のような流れですよね。
- ベースイメージ
- ミドルウェアのインストール、セットアップの処理
- アプリケーションのコピー
- アプリケーションの起動を監視するために
ENTRYPOINTを記載
これだけ認識していれば、例えば単発実行や無限ループで処理待機するコンソールアプリケーションのコンテナ化なんてのは、(細かいことを無視すれば)すぐにできてしまうと思います。
謎の exe 、ServiceMonitor
しかし、例えば下記の 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 は参考になるので、「これ何やってるんだろう?」を深堀してみると面白いですし、勉強になります。
例えばご紹介した Dockerfile はこの ServiceMonitor.exe のインストールのためにいろいろ実施しているので、その辺りも調べてみてはいかがでしょうか?






![Microsoft Power BI [実践] 入門 ―― BI初心者でもすぐできる! リアルタイム分析・可視化の手引きとリファレンス](/assets/img/banner-power-bi.c9bd875.png)
![Microsoft Power Apps ローコード開発[実践]入門――ノンプログラマーにやさしいアプリ開発の手引きとリファレンス](/assets/img/banner-powerplatform-2.213ebee.png)
![Microsoft PowerPlatformローコード開発[活用]入門 ――現場で使える業務アプリのレシピ集](/assets/img/banner-powerplatform-1.a01c0c2.png)


