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]

エンジニア業務を加速しよう!

スピーディーに仕事がしたい!

先月は docker から始まるコマンドを何度も何度も実行していた気がします。

私の今の仕事は検証がメインで、何度も似たようなコマンドを実行したり、何かをダウンロードしたりという作業を実施しています。

検証作業は先が見えにくいので、できるだけスピーディーにやるべきことを繰り返して知見を増やしたいですよね。

検証に限らずスピーディーに仕事をすることは大切だと思いますので、私が実践している仕事の高速化手法を書いてみます。

同じことをダラダラ何度も書かない ([ctrl] + [R]の活用)

コマンドを実行する時のお話です。

例えば、 docker build のコマンドって何度も同じ内容で実行するのに長くなりがちですよね。

docker build . -t cloudconfig/blog

上記で「いや、それくらいなら短いのでは?」と思った方、書いた文字の正しさを検証する時間を無視していませんか?

例えば、 dockerdokcer と書き間違えちゃったとして、実行する前に気付けますか?

できれば前回実行したコマンドをそのまま書いたことを書きたいですよね。

そんな時、[ctrl] + [R] が使えます。

Linux 環境で Bash を使用している場合や、Windows 環境で PowerShell を使用している場合に押してみてください。

そして、build とキーボードから入力すると、前に実行した docker build の履歴が表示されると思います。

reverse-i-search とか bck-i-search とか呼ばれるみたいですね。

使いたい候補が出たら [Enter] を押してそのまま実行したり、 [→] を押すなりして一部を修正して実行したりできるので、過去に成功したコマンドラインを流用できます。とても便利ですね!

ただ、失敗したコマンドも出ますし、検索文字列が短すぎたりすると意図しない実行履歴が出る場合もありますので注意してください。

VM を活用する

例えば、Docker を使用する時、どこで動かしていますか?

自分の PC で動かしていませんか?

自分の PC 上で動かすと便利なこともありますが、下記のようなリスクがあります。

  • PC のリソースを食いつぶしてしまう
  • ベースイメージのダウンロードに時間がかかる
  • ミドルウェアの状態を把握しきれず、自分の PC でしか実行できない Dockerfile が出来上がる可能性がある

上記のようなリスクは、VM を使用することで改善できます。

[Read More]