DockerでClassic ASP(レガシーASP)の開発環境を整える
2025年 6月 6日 Posted 野々瀨(フロントエンドエンジニア)
今回はDockerでClassic ASP(レガシーASP)の開発環境(IIS)を整える方法について、簡単にですがご紹介しようと思います。
前提
- ホスト側のOSはWindows 11
- Docker Desktop for Windowsをインストール済み
DockerのWindowsコンテナへの切り替え
Docker Desktopが起動していない場合は起動しておきます。タスクトレーにあるDocker Desktopを右クリックし、コンテキストメニューにある「Switch to Windows containers...」を押します。
「Switch to Windows containers」という切り替えていいかどうかという質問のダイアログが表示されたら、「Switch」ボタンを押します。
有効になっているかどうかを確認するため、タスクトレーにあるDocker Desktopを右クリックし、コンテキストメニューにある「Switch to Linux containers...」と表示されていれば切り替えが完了です。
「Docker Desktop - Windows containers not enabled」と表示された時
「Docker Desktop - Windows containers not enabled」というメッセージが表示された場合、ホストOS側のWindowsコンテナ機能が無効化されています。
Docker Desktopで扱う場合、ホストOS側でも有効にしておく必要があります。メッセージの内容のとおりPowerShellを起動し、次のコマンドを入力して実行します。
Enable-WindowsOptionalFeature -Online -FeatureName $("Microsoft-Hyper-V", "Containers") -All
しばらくするとホスト側のOSの再起動をするよう聞かれますので、そのままEnterキーを押して再起動します(直ぐに再起動が実行されますので、不要なウィンドウは閉じておいてください)。
プロジェクトの準備
任意の場所にプロジェクトディレクトリーを作成します。配下は次のような感じのファイルを用意しておきます。
.
├ public
│ │
│ └ index.asp
│
└ Dockerfile
「public」ディレクトリーはWebの公開ディレクトリーとなるディレクトリーです。今回はテストとしてindex.aspファイルを置くことにしています。
「Dockerfile」ファイルは今回のDocker環境を構築するためのファイルです。
public/index.aspについて
今回は表示を確認するため、次のような簡単なコードを記述しておきます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ASP Test</title>
</head>
<body>
<% Response.Write Now() %>
</body>
</html>
Now
関数で現在の日時を取得し、Response.Write
メソッドで出力する簡単なコードです。
Dockerfileの準備
FROM mcr.microsoft.com/windows/servercore/iis:20240312-windowsservercore-ltsc2022
RUN powershell -NoProfile -Command Remove-Item -Recurse C:\inetpub\wwwroot\*
RUN powershell -NoProfile -Command Install-WindowsFeature Web-ASP
WORKDIR /inetpub/wwwroot
1行目のFROM mcr.microsoft.com/windows/servercore/iis:20240312-windowsservercore-ltsc2022
はイメージの指定です。末尾のタグ「20240312-windowsservercore-ltsc2022」部分は、ホスト側のOSと合わせる必要があります。対応するバージョンは次のページにある「Full Tag Listing」で確認できます。
https://hub.docker.com/r/microsoft/windows-servercore-iis
3行目のRUN powershell -NoProfile -Command Remove-Item -Recurse C:\inetpub\wwwroot\*
は、PowerShellのコマンドで、C:\inetpub\wwwrootディレクトリー配下のファイルやディレクトリーを、全て削除しています。
4行目のRUN powershell -NoProfile -Command Install-WindowsFeature Web-ASP
は、PowerShellのコマンドでASPの機能を有効にしています。
6行目のWORKDIR /inetpub/wwwroot
は、コンテナ内のディレクトリーを移動しています。
なお、この後にCOPY ./public .
とすると、ホスト側のpublicディレクトリーをコンテナ側の/inetpub/wwwrootへコピーすることができます。ですが、今回はボリュームでホスト側とコンテナ側をリンクさせるため、行いません。
イメージの作成(ビルド)
プロジェクトのディレクトリーへ移動します。次のコマンドを実行しイメージを作成(ビルド)します。
docker build -t asp .
起動
プロジェクトのディレクトリーへ移動します。次のコマンドを実行しコンテナを作成、起動します。
docker run -d -p 8080:80 -v %cd%/public:C:/inetpub/wwwroot --name asp-iis asp
-d
オプションでバックグラウンドで起動します。
-p
オプションでホスト側とコンテナ側のポート番号を、ホスト側:コンテナ側
で割り当てます。
-v
オプションでコンテナ側のWebルートディレクトリーをホスト側のpublicディレクトリーに割り当てます。こうしますと、ホスト側でファイルを更新すると、コンテナ側のファイルとしても更新されます。ちなみにホスト側のパスは絶対パスである必要があり、%cd%
で現在のディレクトリーまでのパスを返すようにしています。また、コンテナ側はドライブ名から始める必要があります。なお、パスの区切りはスラッシュであってもバックスラッシュ(円マーク)であっても問題ありません。
--name
オプションでコンテナの名前を設定します。
最後のasp
はイメージの名前を指定します。
動作確認
ブラウザーを起動し、アドレス「http://localhost:8080/index.asp」へアクセスします。
現在の日時が表示されれば完了です。
【余談】Docker Composeの場合
docker-compose.ymlにこれまで書いた内容をまとめますと、次のような記述になります。
services:
asp:
image: mcr.microsoft.com/windows/servercore/iis:20240312-windowsservercore-ltsc2022
container_name: asp-iis
ports: "8080:80"
volumes: ./public:C:\inetpub\wwwroot
command:
- powershell -NoProfile -Command Remove-Item -Recurse C:\inetpub\wwwroot\*
- powershell -NoProfile -Command Install-WindowsFeature Web-ASP
working_dir: /inetpub/wwwroot
これをdocker-compose
コマンドで実行することで、同様のことがdocker-composeで行うことができます。
docker-compose up -d
最後に
後継であるASP.NET Coreがありますが、古い環境などではまだまだClassic ASP(レガシーASP)が使われることが少なくありません。Dockerを使うことで、手軽に開発環境を整えることができます。