【Docker】第11回 WindowsコンテナモードでIIS+ClassicASPを動かす


今回は「Windowsコンテナモード」について触れてみたいと思います。

 

今までの解説では特に説明をしてきませんでしたが、DockerDesktopの初期状態では「Linuxコンテナモード」としてコンテナを動かしていました。

DockerDesktopでは、動作させるコンテナを「Windowsコンテナモード」に変更することができます。

 

コンテナモードとは

DockerDesktopでは「Windowsコンテナモード」と「Linuxコンテナモード」を切り替えて使用することができます。

「Linuxコンテナ」はLinuxのKarnelで動作するコンテナとなります。

「Windowsコンテナ」はWindowsのNT Karnelで動作するコンテナです。

 ・Server Core:標準

 ・Nano Server:軽量版

 ・Windows10:完全版

 ・IoT Core:IoT製品向け

を利用することができます。

 

コンテナモードの変更

コンテナモードを切り替えるには、タスクトレイのDockerアイコンから

「Switch to Windows containers...」を選択します。

Linuxコンテナモードに戻したい場合は同様に「Switch to Linux containers...」を選択します。

 

"ClassicASPが動作するIISコンテナ"の作成

まずはコンテナ上でIISが動いていることを確認するために、事前にホストPC上のIISが無効化してあることを確認しておきます。

(コントロールパネル>プログラムと機能>Windowsの機能の有効化または無効化)

  

 

それではコンテナを用意していきます。

ベースとするIISのコンテナイメージはMicrosoftがDockerHub上に公開しているコチラより取得しました。

https://hub.docker.com/_/microsoft-windows-servercore-iis?tab=description

 

上記ページのドキュメント【How to use this image?】に例に従いつつ一部書き換え(緑字の部分)ながら、Dockerfileを作成していきます。ローカルPC上の作業フォルダに「Dockerfile」という名称(拡張子なし)で、以下の内容のファイルを作成します。

FROM mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019
RUN powershell -NoProfile -Command Remove-Item -Recurse C:\inetpub\wwwroot\*
WORKDIR /inetpub/wwwroot
RUN powershell -NoProfile -Command Install-WindowsFeature Web-ASP
COPY index.asp .

■1行目:取得するイメージのバージョンタグを指定します。

今回は最新イメージではなく「windowsservercore-ltsc2019」タグを使ってみます。

★コンテナイメージは【ホストPCのOSのカーネルで動作する】ため、バージョンを合わせる必要があります。今回作業を行ったPCはWindows10のバージョン1909なので、最新版の「windowsservercore-2004」は動作しません。

 

■2行目:イメージ内のPowershellを使って「C:\inetpub\wwwroot」配下のリソースを全て削除しています。

■3行目:ワークディレクトリを指定しています。

■4行目:イメージ内のPowershellでASPの機能を有効化します。

■5行目:このDockerfileと同一階層にある「index.asp」を、イメージ内にコピーします。

ワークディレクトリが「/inetpub/wwwroot」なので「/inetpub/wwwroot/index.asp」となります。

 

続いて、同一フォルダ内に以下の内容で「index.asp」ファイルを作成します。

<html>
  <body>
    <%
      Response.Write "<p>Hello! this page is [Windows Docker Container] Classic ASP!</p>"
    %>
    <p><%= Now() %></p>
  </body>
</html>

 

ファイルが用意出来たら、コマンドプロンプトからDockerfileを配置した作業フォルダに移動し、「docker build」コマンドでコンテナのビルドを行います。

docker build -t iis/classic-asp:1.0 .

※-tは[名前:タグ]形式でイメージ名とタグ名を指定できるオプションです。

※イメージのサイズが大きので注意してください。10GB近くになります!(ビルド自体にも数分かかります)

 

無事に完了したら、「docker images」コマンドでコンテナイメージを確認してみます。

ベースにした「windowsservercore-ltsc2019」と、それを元にビルドした「iis/classic-asp」の2つが追加されています。

 

続いて、「iis/classic-asp」コンテナを起動してみましょう。コマンドは「docker run」です。

docker run -d -p 8000:80 --name my-iis-asp-test iis/classic-asp:1.0

コンテナの稼働状況は「docerk ps」コマンドでも確認できますが、折角のDockerDesktopなのでダッシュボードから見てみます。

 

問題なくコンテナが起動できているのでASPの確認…と行きたいところですが、その前に「コンテナ内のIPの確認」が必要になります。コンテナ内部はDHCPになっているようなので、「docker inspect」コマンドで内部のIPアドレスを確認します。

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" my-iis-asp-test

※コンテナ内部はGUIがないため、内部の確認にはコマンドでの実行が必要になります。

 

いよいよIISコンテナ上でASPがちゃんと動いているか確認します。先ほど確認したIPより

http://[コンテナ内部のIPアドレス]/index.asp

へアクセスしてみましょう。

ページが正しく表示されました。無事に動いているようです。


 

今回はDocker DesktopでWindowsコンテナを動かしてみました。

開発では、ClassicASP環境が急に必要になったりする場合が割とあるので、事前にテンプレートとしてイメージ化し共有することができれば便利です。今回は公式サンプルに従ってDockerfileを作成しましたが、要件に応じてカスタマイズすれば様々な用途に活用できると思います。

 

それではまた次回。

  お問い合わせ  - お気軽にお問い合わせください - 

  • 株式会社 パブリックリレーションズ
  • 〒064-0807
  • 北海道札幌市中央区南7条西1丁目13番地 弘安ビル5階
メールでのお問い合わせはこちら

  • この記事をシェアする