Dockerコンテナで Windows IIS を動かす

記事タイトルとURLをコピーする

こんにちは、クラウドインテグレーション2部 技術1課 宮形 です。

私はサーバーワークスへは昨年2021年12月に中途入社しまして、はや4か月がたとうとしています。

実務では主に VPC、EC2、RDS、WorkSpaces といったインフラ部分の構築を担当してきましたが、そろそろ新しい領域チャレンジということで、Dockerコンテナ技術 にトライしてみようと思います。

アプリケーション開発の経験無い、インフラエンジニア視点での文章となります。専門の方がみてお見苦しい表現があるかもしれません。ご了承ください。

Dockerコンテナとは

仮想化技術のひとつとなりますが、すでに弊社先輩方のBLOGで解説されておりますので そちらを紹介とさせていただきます。

blog.serverworks.co.jp

Windows コンテナに挑戦

Docker コンテナといえばLinuxであり、Apache とか Nginx を動かすというイメージでした。

実は Windows 固有アプリケーションもコンテナで動かすことが出来るのです。代表的な用途としては「IIS」だと思います。

調べてみましたが過去BLOGで Windows コンテナは取り扱いされていないようでしたので、私の学習を兼ねての題材とさせていただくことにしました。

参考情報

Microosft の公式マニュアルを参考にしております。

Windows オペレーティング システム コンテナーの準備 | Microsoft Docs

インターネットで Windows コンテナを調べると、下記3つの方式がヒットしました。1. 2. は Windows上で仮想化された Linux を動かし、その上で Docker コンテナを動かす方式となりますので、 Windows 固有アプリケーションの要件には選択できません。本BLOGは 3. の Windowsネイティブで Docker コンテナを動かす方式となります。

  1. Docker Desktop でコンテナを動かす
  2. WSL 上で Docker コンテナを動かす
  3. Windows Server 上で Dockerコンテナ機能をインストールしてコンテナを動かす

ゴール

弊社はAWS専業クラウドインテグレーターですので、やはり AWS でコンテナを動かしたいです。最終的には AWS のマネージドサービスである ECS でコンテナ化された Windowsアプリケーションを動かすことをゴールとします。

何回かにわけて掲載しようと思い、今回BLOGでは EC2 の Windows Server 上でコンテナをビルドして動かすところまでとします。

aws.amazon.com

検証開始

コンテナを動かす EC2 Windows サーバー を準備

通常の Windows Server を利用します。私は AWS の EC2 を利用しました。利用したAMIは下記になります。

AMI ID AMI 名
ami-0f10983cd1e2ce868 SupportedImages Windows_Server-2019-Japanese-Full-Base-2022.02.12-c591e9cf-10e9-4aea-84a0-1db739c7cade

Windows コンテナのセットアップ

上記「参考情報」の手順を参考に、Windows コンテナをインストールします。特に難しいことはなく、PowerShell からインストールコマンドを実行していきます。最後にOS再起動を行なえば、セットアップ完了となり利用可能となります。

PS> Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

PS> Install-Package -Name docker -ProviderName DockerMsftProvider

PS> Restart-Computer -Force

Windows サービスの一覧に「Docker Engine」が追加されました。

where.exe docker を実行すると C:\Program Files\Docker フォルダにインストールされていることがわかります。

PS > where.exe docker
C:\Program Files\Docker\docker.exe

エクスプローラーで覗いてみると、EXEファイルアイコンがクジラのコンテナになっていました!可愛いですね~

まず動かしてみる

docker コマンドで環境を作ります。この辺は Linux と同じのようです。 docker pull コマンドにて Microsoft のレジストリ上にあるIISのイメージをローカルにダウンロードします。私は Windows Server 2019 で動かしているので、対応したタグ名「windowsservercore-ltsc2019」を指定しています。

PS> docker pull mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019

私が行ったときは、約10分ほどかかりました。

docker image lsコマンドでローカルイメージ一覧を確認します。Linuxベースの Docker コンテナご経験者だと、ファイルサイズの大きさに驚くと思います。Dockerコンテナのメリットであるポータビリティが損なわれる可能性もあるので、この点は Windows コンテナの弱点ともいえそうですね。

PS> docker image ls

早速 docker run で動かしてみます。IISのデフォルトポートは TCP80 ですが、私は -p 8080:80 と指定して TCP8080でのリッスンへ変換して起動しています。 動作確認しているサイトが 従来IISなのかコンテナのIISなのか区別したかった為ですので、必要なければ省略可能です。

PS> docker run -it -p 8080:80 mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019

Windows Server で Webブラウザを開始し、http://localhost:8080/ へアクセスします。無事 IISデフォルトページが表示されました。

WindowsベースのコンテナでIISを動かすことに成功しました。ただし、まだデフォルトHTMLページしかないので、これでは実務で使えません。自分で準備したHTMLコンテンツを動かすコンテナを作成(ビルド)してみます。

オリジナルHTMLコンテンツをWindowsコンテナのIISで動かす

Docker Hub に掲載されているサンプルを参考にします。

Docker Hub

任意のフォルダ(本例では c:\dockertest) に Dockerfile というテキストファイルを作成し、下記のように記載します。

FROM mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019
RUN powershell -NoProfile -Command Remove-Item -Recurse C:\inetpub\wwwroot\*
WORKDIR /inetpub/wwwroot
COPY content/ .

Dockerfileはコンテナをビルドする時の動作を定義します。この概念はLinuxベースのコンテナと同じです。 ファイル中身をみてみると、デフォルトの C:\inetpub\wwwroot\ 配下を全削除した後に、自身が用意する content フォルダの中を Copy しているようです。

同フォルダ配下に content というサブフォルダを作成。このサブフォルダに IIS の wwwroot 配下に配置するコンテンツのHTMLファイルを配置します。私は sample.html というファイルを1つ配置しました。

PowerShell にて任意のフォルダ(本例では c:\dockertest) へ cd で移動し、docker build コマンドを実行します。

PS> cd C:\dockertest
PS> docker build -t myga-iis-test .

問題なくビルドが成功しました。

今ほどビルドしたコンテナを ls コマンドで確認します。

PS> docker image ls

docker run でコンテナを起動します。

PS> docker run -it -p 8080:80 myga-iis-test

Windows Server で Webブラウザを開始し、http://localhost:8080/sample.html へアクセスします。オリジナルHTMLコンテンツが表示されました!成功です!今回BLOGでの検証は、ここまでとしたいと思います。

まとめ

やってみると、おもったよりは簡単に Dockerコンテナで Windows IIS を動かすことが出来ました。 次回は、AWS のマネージドサービスである ECS を本番環境にみたてて Windows コンテナ動かすところを検証し、その次では IIS のアクセスログや管理方法など従来 Windows Serverで行っていた運用との違いをみてみたいと思います。

Windows コンテナは Linuxベースと比べると事例は少ないと予想しますが、出来るかぎりユースケースやメリット・デメリットを記載し、皆様のシステム検討の参考になるよう心掛けたいと思います。

宮形純平(執筆記事の一覧)

クラウドインテグレーション部 技術1課

好きなお酒は缶チューハイと本格焼酎