このページの本文へ

FIXER cloud.config Tech Blog

Dockerfileに出てくる謎のexe、ServiceMonitor

2020年02月18日 11時00分更新

文● 松枝 宏樹/FIXER

 本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「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 は参考になるので、「これ何やってるんだろう?」を深掘りしてみると面白いですし、勉強になります。

 例えばご紹介した Dockerfile はこの ServiceMonitor.exe のインストールのためにいろいろ実施しているので、その辺りも調べてみてはいかがでしょうか?

 松枝 宏樹/FIXER

 名古屋事業所所属。得意分野はC#、ASP.NET、terraformなど。最近はdocker、K8s関連を勉強中。

[転載元]
 Dockerfileに出てくる謎のexe、ServiceMonitor

カテゴリートップへ