DockerでClassic ASP(レガシーASP)の開発環境を整える

2025年 6月 6日 Posted 野々瀨(フロントエンドエンジニア)

今回はDockerでClassic ASP(レガシーASP)の開発環境(IIS)を整える方法について、簡単にですがご紹介しようと思います。

前提

DockerのWindowsコンテナへの切り替え

Docker Desktopが起動していない場合は起動しておきます。タスクトレーにあるDocker Desktopを右クリックし、コンテキストメニューにある「Switch to Windows containers...」を押します。

「Switch to Windows containers」という切り替えていいかどうかという質問のダイアログが表示されたら、「Switch」ボタンを押します。

Switch to Windows containers. You are about to switch to Windows containers. Existing containers will continue to run, but you will not be able to manage them until you switch back to linux containers. No data will  be lost otherwise. Do you want to nontinue?

有効になっているかどうかを確認するため、タスクトレーにあるDocker Desktopを右クリックし、コンテキストメニューにある「Switch to Linux containers...」と表示されていれば切り替えが完了です。

「Docker Desktop - Windows containers not enabled」と表示された時

「Docker Desktop - Windows containers not enabled」というメッセージが表示された場合、ホストOS側のWindowsコンテナ機能が無効化されています。

Docker Desktop - Windows containers not enabled. The Windows containers feature is disabled. Enable it using the following PowerShell script (in an administrative PowerShell) and then restart your computer before using Docker Desktop: "Enable-WindowsOptionalFeature -Online -FeatureName $("Microsoft-Hyper-V", "Containers") -All" need to install feature s: Microsoft-Hyper-V (Hyper-V Platform), Containers (Containers)

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を使うことで、手軽に開発環境を整えることができます。